Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
css3转换动画加载?_Css_Webkit_Css Transitions_Css Animations - Fatal编程技术网

css3转换动画加载?

css3转换动画加载?,css,webkit,css-transitions,css-animations,Css,Webkit,Css Transitions,Css Animations,是否可以在页面加载时使用CSS3转换动画而不使用Javascript 这正是我想要的,但在页面加载时: 到目前为止我发现了什么 ,一种延迟元素效果的方法。仅适用于悬停 ,在负载下工作,但速度非常慢。正因为如此,它没有用处 速度足够快,但在页面加载时不设置动画 好吧,这是一个棘手的问题 答案是“不是真的” CSS不是一个功能层。它不知道发生了什么或什么时候。它只是用来向不同的“标志”(类、ID、状态)添加一个表示层 默认情况下,CSS/DOM不提供任何类型的“加载”状态供CSS使用。如果您想要

是否可以在页面加载时使用CSS3转换动画而不使用Javascript

这正是我想要的,但在页面加载时:

到目前为止我发现了什么

  • ,一种延迟元素效果的方法。仅适用于悬停
  • ,在负载下工作,但速度非常慢。正因为如此,它没有用处
  • 速度足够快,但在页面加载时不设置动画

    • 好吧,这是一个棘手的问题

      答案是“不是真的”

      CSS不是一个功能层。它不知道发生了什么或什么时候。它只是用来向不同的“标志”(类、ID、状态)添加一个表示层

      默认情况下,CSS/DOM不提供任何类型的“加载”状态供CSS使用。如果您想要/能够使用JavaScript,您应该为
      body
      分配一个类或一些东西来激活一些CSS

      也就是说,您可以为此创建一个hack。我在这里举个例子,但它可能适用于您的情况,也可能不适用于您的情况

      我们的经营假设“接近”就是“足够好”:


      我们还假设现代浏览器是渐进式渲染的,所以我们的最后一个元素将最后渲染,所以这个CSS将最后激活。

      不太可能,因为CSS会尽快应用,但元素可能还没有绘制出来。你可以猜到一到两秒的延迟,但这对大多数人来说并不合适,这取决于他们的互联网速度

      此外,如果你想淡入一些东西,例如,它将需要CSS隐藏要交付的内容。如果用户没有CSS3转换,那么他们将永远看不到它

      我建议使用jQuery(为了便于使用,您可能希望为其他UAs添加动画)和一些类似以下的JS:

      $(document).ready(function() {
          $('#id_to_fade_in')
              .css({"opacity":0})   // Set to 0 as soon as possible – may result in flicker, but it's not hidden for users with no JS (Googlebot for instance!)
              .delay(200)           // Wait for a bit so the user notices it fade in
              .css({"opacity":1});  // Fade it back in. Swap css for animate in legacy browsers if required.
      });
      

      以及CSS中添加的转换。这样做的好处是,如果需要,可以方便地在传统浏览器中使用动画而不是第二个CSS。

      使用鼠标悬停启动动画,而不是鼠标第一次在屏幕上移动时启动动画,这通常是在鼠标到达屏幕后的一秒钟内,问题是当鼠标离开屏幕时,动画会反转

      html:hover #animateelementid, body:hover #animateelementid {rotate ....}
      
      这是我能想到的最好的事情:

      全屏:

      编辑请参见下面的评论:

      这在任何触摸屏设备上都不起作用,因为没有悬停,因此除非用户点击,否则不会看到内容Rich Bradshaw

      好的,当页面仅使用css转换加载时,我成功地实现了动画效果(有点!)

      我已经创建了2个css样式表: 第一个是我希望如何在动画之前设置html样式。。。 第二个问题是,在动画完成后,我希望页面如何显示

      我不完全理解我是如何做到这一点的,但只有当两个css文件(都在我的文档的头部)被如下javascript分隔时,它才起作用

      我已经用Firefox、safari和opera对此进行了测试。有时动画可以工作,有时它直接跳到第二个css文件,有时页面似乎正在加载,但什么也没有显示(可能只是我?)

      
      $(文档).ready(函数(){
      //iOS悬停事件类修复程序
      if((navigator.userAgent.match(/iPhone/i))| |(navigator.userAgent.match(/iPod/i))||
      (navigator.userAgent.match(/iPad/i))){
      $(“.container.menu text”)。单击(function(){//更新类以指向列表的开头
      });
      }
      });
      
      以下是我正在进行的工作网站的链接:

      也许我错了,但我认为不支持css转换的浏览器不应该有任何问题,因为它们应该直接跳到第二个css文件,不会有延迟或持续时间

      我很想知道这种方法对搜索引擎有多友好。戴上我的黑帽子,我想我可以用关键词填充一个页面,并在其不透明度上应用9999秒的延迟

      我很想知道搜索引擎是如何处理过渡延迟属性的,以及使用上面的方法,他们是否会看到页面上的链接和信息

      更重要的是,我真的想知道为什么每次加载页面时都会出现不一致的情况,以及如何纠正这种情况

      我希望这能产生一些看法和意见,如果没有别的

      您可以在页面加载时运行CSS动画,而无需使用任何JavaScript;只需使用CSS3关键帧即可

      让我们看一个例子。。。 以下是仅使用CSS3的导航菜单滑动到位的演示:

      @关键帧从左滑入{
      0% {
      转化:translateX(-100%);
      }
      100% {
      变换:translateX(0);
      }
      }
      标题{
      /*本节调用上面定义的slideInFromLeft动画*/
      动画:1s从左滑出1s幻灯片;
      背景:#333;
      填充:30px;
      }
      /*为美观而添加*/body{margin:0;字体系列:“Segoe UI”,Arial,Helvetica,Sans Serif;}a{文本装饰:无;显示:内联块;右边距:10px;颜色:#fff;}

      几乎不需要Javascript:

      window.onload=function(){
      document.body.className+=“已加载”;
      }
      
      现在CSS:

      .fadein{
      不透明度:0;
      -moz转变:不透明度1.5s;
      -webkit转换:不透明度1.5s;
      -o-转变:不透明度1.5s;
      过渡:不透明度1.5s;
      }
      body.loaded.fadein{
      不透明度:1;
      }
      
      我知道问题是“没有Javascript”,但我认为值得指出的是,有一个简单的解决方案涉及一行Javascript

      它甚至可以是内联Javascript,类似于:

      
      

      这就是所需的全部JavaScript。

      类似于@Rolf的解决方案,但跳过对外部函数的引用或使用类。如果加载后不透明度保持固定为1,只需使用内联脚本通过样式直接更改不透明度。比如说

      <body class="fadein" onload="this.style.opacity=1">
      
      
      html:hover #animateelementid, body:hover #animateelementid {rotate ....}
      
      <link media="screen,projection" type="text/css" href="first-css-file.css"  rel="stylesheet" />
      
      <script language="javascript" type="text/javascript" src="../js/jQuery JavaScript Library v1.3.2.js"></script>
      
      <script type='text/javascript'>
      $(document).ready(function(){
      
      // iOS Hover Event Class Fix
      if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) ||
      (navigator.userAgent.match(/iPad/i))) {
      $(".container .menu-text").click(function(){  // Update class to point at the head of the list
      });
      }
      });
      </script>
      
      <link media="screen,projection" type="text/css" href="second-css-file.css"  rel="stylesheet" />
      
      <body class="fadein" onload="this.style.opacity=1">
      
      #main p {
        animation: fadein 2s;
      }
      @keyframes fadein {
        from { opacity: 0}
        to   { opacity: 1}
      }
      
      <body class="existing-class-name" onload="document.body.classList.add('loaded')">
      
      <div class="image-wrapper">
          <img src="db-image.jpg" alt="db-image-name">
          <span class="text-over-image">DB text</span>
      </div>
      
      .text-over-image {
          position: absolute;
          background-color: rgba(110, 186, 115, 0.8);
          color: #eee;
          left: 0;
          width: 100%;
          padding: 10px;
          opacity: 0;
          bottom: 100%;
          -webkit-transition: opacity 2s, bottom 2s;
          -moz-transition: opacity 2s, bottom 2s;
          -o-transition: opacity 2s, bottom 2s;
          transition: opacity 2s, bottom 2s;
      }
      
      body.loaded .text-over-image {
          bottom: 0;
          opacity: 1;
      }
      
      header {
          animation: 3s ease-out 0s 1 wait, 0.21s ease-out 3s 1 slideInFromBottom;
      }
      
      @keyframes wait {
          from { transform: translateY(20px); }
          to { transform: translateY(20px); }
      }
      
      @keyframes slideInFromBottom {
        from { transform: translateY(20px); opacity: 0; }
        to { transform: translateY(0); opacity: 1; }
      }
      
      <body class="onload" onload="document.querySelector('body').classList.remove('onload')">
      
      body.onload *{ transform: none !important; }
      
      #rotated{
          transform : rotate(90deg) /* any other transformation */;
          transition  3s;
      }
      #translated{
          transform : translate(90px) /* any other transformation */;
          transition  3s;
      }
      .waitload{
          transform: none !important;
      }
      
      <div id='rotated' class='waitload'>
          rotate after load
      </div>
      <div id='translated' class='waitload'>
          trasnlate after load
      </div>
      <script type="text/javascript">
           // or body onload ?
          [...document.querySelectorAll('.waitload')]
              .map(e => e.classList.remove('waitload'));
      
      </script>
      
      import React, { useState, useEffect } from 'react';
      import { css } from '@emotion/css'
      
      const Hello = (props) => {
          const [loaded, setLoaded] = useState(false);
      
          useEffect(() => {
              // For load
              setTimeout(function () {
                  setLoaded(true);
              }, 50); // Browser needs some time to change to unload state/style
      
              // For unload
              return () => {
                  setLoaded(false);
              };
          }, [props.someTrigger]); // Set your trigger
      
          return (
              <div
                  css={[
                      css`
                          opacity: 0;
                          transition: opacity 0s;
                      `,
                      loaded &&
                          css`
                              transition: opacity 2s;
                              opacity: 1;
                          `,
                  ]}
              >
                  hello
              </div>
          );
      };
      
      body{animation: 2s ease-out 0s 1 FadeIn;}
      @keyframes FadeIn {
          0% {
            opacity:0;
          }
          100% {
            opacity:1;
          }
      }