优雅地使用CSS Animation delay

今天写一个css动画时遇到一个mini难题,记录如下:

1.需求:

  等待元素A的动画加载完,再加载B元素的动画

2.初始思路:

  在B元素的动画属性上加上delay(延迟,使得这个延迟时间 = A元素动画的加载时间)
  即:animation : bmove 1s .4s 1; (这里的.4s即delay)

  b的动画过程代码如下:

  @keyframes bmove {

    0%     { opacity:0px; margin-top:300px }

    70%   { opacity:1px;  }

    100%  { margin-top:0px }

  }

  出现bug:

  因为需求是B元素也是渐入,即opacity 由 0 变到 1

  如果把B的opacity设为0, 则动画结束后B又消失了;如果把B的opacity设为1,则delay之前B就出现了;这显然都是不符合需求的,这时候自然而然就想到一种JS方法

3.JS方法:

  先把B的opacity设为0,然后待delay结束,用JS把B的opacity设为1 (用定时器实现,即setTimeout)

  实现之后,在电脑上一切ok;然而在手机上运行时,出现了动画结束之后,B元素又闪了一下再出现的状况

  状况原因猜想:

    手机浏览器的js引擎相对css有延迟,导致动画结束后,setTimeout方法内的回调才执行,使得出现上述状况

  既然这样,那就彻底放弃把JS融入动画控制中,因为不同浏览器js引擎差异

  那怎么样能使opacity 一开始为0 一段时间之后变为1 呢?

4.优雅的delay方法:

  成也delay,败也delay。如果这时候还绕在使用animation-delay属性上,那始终没有办法,所以干脆跳出delay怪圈,不使用delay!!!

  那不使用delay如何办到delay的效果呢?

  答案就是在animation的动画过程代码中自己加一段delay动画过程,话不多说,上代码:

  @keyframes bmove {

    0%  { opacity:0px; margin-top:300px }

    30%  { opacity:0px; margin-top:300px }

    80%  { opacity:1px;  }

    100% { margin-top:0px }

  }

  红色部分代码即是手动delay代码,这时,既可以让B元素在delay期间不执行动画,又能让其初始状态和结束状态达到需求

原文地址:https://www.cnblogs.com/codernie/p/8988215.html

时间: 2024-10-12 17:26:25

优雅地使用CSS Animation delay的相关文章

CSS Animation 属性

一.animation是CSS3中新增的属性,它可以制作出多种酷炫的动画效果,如果对flash有一定的了解,那这个属性就会很容易学习. 先展示一下简单的动画效果 __ __O 二.下面就来了解一下animation的具体属性. 1.动画名称 1 /*1.name:动画名称*/ 2 /*-webkit-animation-name: kf_play;*/ 3 /*-moz-animation-name: kf_play;*/ 4 /*-o-animation-name: kf_play;*/ 5

css animation关于step

animation-timing-function animation-timing-function 规定动画的速度曲线.速度曲线定义动画从一套 CSS 样式变为另一套所用的时间.在平常的取值中,主要有以下几个: 值 描述 linear 动画从头到尾的速度是相同的. ease 默认.动画以低速开始,然后加快,在结束前变慢. ease-in 动画以低速开始. ease-out 动画以低速结束. ease-in-out 动画以低速开始和结束. cubic-bezier(n,n,n,n) 在 cub

CSS Animation

1 div { 2 /* Chrome, Safari, Opera 等使用webkit引擎的浏览器*/ 3 -webkit-animation-name: myfirst; /*规定 @keyframes 动画的名称.*/ 4 -webkit-animation-duration: 5s; /*规定动画完成一个周期所花费的秒或毫秒.默认是 0.*/ 5 -webkit-animation-timing-function: linear;/*设置动画的速度曲线,默认是 "ease".*

[CSS3] Make a One-time CSS Animation that Does Not Revert to its Original Style

We'll add animation to patio11bot using CSS keyframes. When defining a CSS animation, you can add it to a class with animation-name, set the duration with animation-duration, and if you want the animation to 'stick' on the end state, add animation-fi

Campass + Scss ,让我们更优雅的编写CSS

如果你经常写CSS,你应该会发现传统的CSS编写方式或多或少有些枯燥,不智能? 不优雅? 至少我是这么认为的. 缺陷举例 1. 假设页面中有大部分HTML元素的背景颜色值是一样的,  我们就需要为各个元素加上 background-color:#fff 这样重复的CSS代码,当然,你也可以通过单独定义一个class, 为这个class设定 background-color:#fff, 然后把class应用到你想要到的HTML元素上,如果运用的合理,还算说的过去,否则结果就是你的HTML元素上面可

css animation和keyframes

keyframes应用在animation上,animation应用在元素上. <html> <style type="text/css"> .div1 { width:100px;height:100px;border:1px solid #000;position:relative; animation : move 800ms ease-out infinite alternate; } @keyframes move { from {top:0px;}

css Animation初体验(译文)

目前有越来越多的网站都使用animation,无论他们是用GIF,SVG,WebGL,视频背景或者其他形式展示.适当地使用动画会让网站更生动,互动性更好,为用户增加一个额外的反馈和体验层. 在本教程中我会向你介绍CSS动画:随着浏览器支持性的提高已经变得越来越流行了,css动画在做一些事情上有很高的性能.在涵盖了基础知识后,我们将建一个快速的例子:矩形变成圆形的动画. 演示看这里 @keyframes和动画 介绍 css动画的主要组件:@keyframes,创建动画的css规则.把@keyfra

css animation动画

在掘金上看到一个大神总结的animation相关东西,感觉很震撼,需要记录一下 主要也是借助chrome devtool来查看相关的属性,然后去调整 自己只知道有 animation-name animation-delay time-function 次数等,其实这些事w3c上写的,只写了6个,还差两个没写 animation-play-state animation-fill-mode 这两个在w3c里面其实也可以找的到,看了下,现在浏览器的支持度其实还是挺不错的了 如下表格算是比较全的了

CSS Animation初探

动画在交互设计中是一个十分能加分的东西,用以平滑过度,会让用户体验上几个台阶.对于Web开发也是如此,恰当的使用动画可以让网页使用起来更加的用户友好.这里就来探讨一下CSS中一些动画的实现方式,初识前端,不足之处敬请指正. 点击阅读全文