这几天在做一个感恩节的html5页面,得到了一个非常大的教训。 页面地址: https://news.qq.com/FERD/ganen/main.htm 页面里有比较多2,3帧的动画,我最初的设想是:针对2帧的动画,那么就用2张图交互的进行显示;针对3帧的动画,那么就3张图片轮流显示。 在2帧动画里,一半时间显示,一半时间隐藏: 样式: 结构: 这种实现,在PC的模拟器上没有问题,移动端目前也没有问题。但是,如果当前页面中的图片非常多时,2帧动画就会出现问题。我们发现上面中的img1和img2会几乎同时的显示和隐藏,有一种闪屏的效果,如果图片较大,能亮下我的狗眼。在android手机里,动画更是简直没法看。 刚开始是怀疑 后来在两张图片之前的思路上一直修修补补,但是完全没有左右。估计是图片的loading加载,导致 网上也有很多用 语法: 参数说明: 注意:第二个参数还有两个内置值,step-start等同于steps(1,start),动画分成1步,动画执行时以左侧端点为开始;step-end等同于steps(1,end):动画分成1步,动画执行时以结尾端点为开始。 因此上面的2帧动画可以用steps实现,以下是用sass语法实现的逐帧动画,方便调用: 这时,动画在iOS和android都能正常展示了。 欢迎访问: https://news.qq.com/FERD/ganen/main.htm 。 参考:@keyframes shake2{
0%{
opacity: 1;
}
50%{
opacity: 1;
}
51%{
opacity: 0;
}
100%{
opacity: 0;
}
}
.img1{
-webkit-animation: shake2 600ms linear infinite;
animation: shake2 600ms linear infinite;
}
.img2{
-webkit-animation: shake2 600ms -300ms linear infinite;
animation: shake2 600ms -300ms linear infinite;
}
<div class="container">
<img class="img1" src="http://img1.gtimg.com/ninja/2/2017/11/ninja151140202268586.jpg" alt="">
<img class="img2" src="http://img1.gtimg.com/ninja/2/2017/11/ninja151139704535009.jpg" alt="">
div>
loading效果
造成的,因为页面在loading完成之前,整个页面是隐藏的,会不会是animation在对隐藏的节点上出现问题呢。但是我也发现另一个现象,就是有的动画效果是在一张图片上完成的,比如扇子绕着扇子的根节点扇动,这里只需要为扇子添加一个transform:rotate
的animation即可,这种动画就完全没有问题。animation
的时间没有起作用,后来请教了一下同事,就把所有的2帧和3帧效果都用animation中的steps
来实现。animation-steps
实现逐帧动画,在一张图片里,保存这种事物的不同形态,比如小人走路的不同状态,当切换这几种走路的状态时,小人就走起来了。如果没有使用steps,那么animation中的状态会以指定的动画慢慢变化;但steps是跳跃式动画,当前状态时间完成后会直接跳跃到下一个状态,没有过渡效果。steps(number[, end | start])
number参数指定了时间函数中的间隔数量(必须是正整数)
第二个参数是可选的,可设值:start和end,表示在每个间隔的起点或是终点发生阶跃变化,如果忽略,默认是end。@mixin keyframes($animationName, $width){
@-webkit-keyframes #{$animationName}{
100%{
-webkit-transform: translate3d(-#{$width}, 0, 0);
transform: translate3d(-#{$width}, 0, 0);
}
}
@keyframes #{$animationName}{
100%{
-webkit-transform: translate3d(-#{$width}, 0, 0);
transform: translate3d(-#{$width}, 0, 0);
}
}
}
@mixin donghua($alltime: 0.9, $step: 2, $width:0){
$animation-name: unique-id(); // 生成唯一的animation name
-webkit-animation: #{$animation-name} #{$alltime*1000}ms steps(#{$step}) infinite 0s;
animation: #{$animation-name} #{$alltime*1000}ms steps(#{$step}) infinite 0s;
@include keyframes(#{$animation-name}, $width);
}
https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation-timing-function
版权属于:
加速器之家
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论