当我们给元素添加Animation后,动画总是现在元素的初始位置显示一下,然后再跳到动画的起始位置播放,这样的话会很难看。
解决方法:
使用animation-fill-mode:forwards属性
forwards参数意思为 元素将在动画延迟结束后 初始位置显示在 动画关键帧的最后一帧定义的位置
backwards参数意思为 元素将在动画延迟结束后 初始位置显示在 动画关键帧的第一帧定义的位置
上边样式的将变现为,class为phone的元素会在加载完成后,从它的定义位置靠下5rem开始动画。
js中赋值nimation-fill-mode:forwards的方法:
object .style.animationFillMode=none | forwards | backwards | both
前言:VUE弹窗动画建议不要参考官网封装好的的transition,本来很简单的一个需要,越看越晕。
先上源码,看不懂再往下看:
开发流程:
1.先写好一个不带动画的弹窗组件,share_cover为遮罩DIV,share_content为内容DIV
2.(核心)
弹窗动画,我们要给内容DIV的CSS加个animation属性。这里我们给animation设置了三个值:动画CSS名,时间,动画播放次数
3.动画CSS名,按照组件功能命名就行,动画效果在@keyframes里面配置
keyframes后面跟动画名,0%表示动画开始的DIV样式,会覆盖掉animation所在DIV的属性。
可以把0%当作vi-if=false时来理解,动画刚开始时候DIV的样式。
比如我们这里0%的时候bottom设置为-5.5rem,那么share_content里面的bottom会开始会被替换成-5.5rem.
5.同理,如果我们想把动画由从上到下换成从中间一个点展开,也是改keyframes
更多动画效果可以参考 这个 ,直接预览看里面的样式文件,拉倒keyframes那一块即可
思路应该是一个从0%到100%的动画展开的效果,大概需要写0%,50%,100%三个样式。 弹窗的css代码大概是:position: fixedz-index: 2000left: 0top: 0这样弹窗的左上角原点在页面最左上角,如果要调整位置要用CSS变换特效(transform)的平移translate函数达到目的: translate(x, y)(长度值或者百分比):在水平方向、垂直方向平移元素。 translateX(value):水平方向平移。 translateY(value):垂直方向平移。 scale(x, y)、scaleX(value)、scaleY(value):在水平方向、垂直方向或者两个方向上缩放元素。 rotate()、rotateX()、rotateY()、rotateZ():rotate支持3D效果,可在x、y、z轴上旋转元素。 skew()、skewX()、skewY():在水平方向、垂直方向或者两个方向倾斜一定的角度。 另外弹窗展开的动画要用到css3的动画属性: animation-delay:设置动画开始前的延迟时间。 animation-direction:设置动画循环播放的时候是否方向播放,包含normal和alternate两个值。 animation-duration:设置动画播放持续的时间。 animation-interacion-count:设置动画的播放次数,可以为具体数据或者无限循环关键字infinite。 animation-name:指定动画名称。 animation-play-state:允许动画暂停和重新播放,包含running、paused。 animation-timing-function:指定如何计算中间动画值,