css3动画
常用的动画属性:
- animation-name:test
动画名称,唯一标识,与@keyframes相对接,必选属性; - animation-duration:5s
动画的单次生效时间,不包含animation-delay在内,必选
示例:
animation-interation-count: 2, animation-delay: 5s, animation-duration: 10s - animation-timing-function: linear;
动画的速率曲线,非必选,默认值为ease:低速开始,然后变快,在结束前减速 - animation-delay: 2s;
动画延迟时间,非必选,默认0延迟 - animation-iteration-count: infinite;
规定动画被播放的次数,非必选,默认一次 - animation-direction: alternate;
规定动画在下一周是否逆向地播放,非必选,默认值normal,但设置的条件必须是 - animation-iteration-count 在两次以上,否则不生效;
- animation-play-state: running;
规定动画是否正在运行或暂停(非必选)
js控制动画的暂停
// 修改-webkit-animation-play-state属性
// 去掉中划线"-",将"-"后的第一个字母大写 => WebkitAnimationPlayState
document.getElementById("loading").style.WebkitAnimationPlayState
// animation-play-state 去掉中划线"-",将"-"后的第一个字母大写 => animationPlayState
document.getElementById("loading").style.animationPlayState
// js
/*暂停扫描按钮*/
function loadingStop(){
document.getElementById("loading").style.animationPlayState = "paused";
document.getElementById("loading").style.WebkitAnimationPlayState = "paused"; // 针对 Chrome 和 Safari 的代码
}
/*继续扫描按钮*/
function loadingStart(){
document.getElementById("loading").style.animationPlayState = "running";
document.getElementById("loading").style.WebkitAnimationPlayState = "running"; // 针对 Chrome 和 Safari 的代码
}
/*动画css*/
.loading {
position: relative;
width: 0;
padding: 20px;
background:
linear-gradient(rgba(0,102,205,1) 30%, transparent 30%, transparent 70%, rgba(0,102,205,.4) 70%),
linear-gradient(to left, rgba(0,102,205,.2) 30%, transparent 30%, transparent 70%, rgba(0,102,205,.8) 70%);
background-repeat: no-repeat;
background-size: 10% 100%, 100% 10%;
background-position: 50% 0%, 0 50%;
-webkit-animation: loading .7s infinite steps(8); /*绑定的关键帧名称 动画时间 动画循环次数 */
animation: loading .7s infinite steps(8);
js监听动画
在做前端页面时,如果一个页面有多套动画特效依次播放。我们一般采用setTimeout延时,就可以完美解决动画依次执行的效果,但存在以下问题:
1、如果动画很多的话会让人感觉很累,因为每个动画动摇计算前方动画所运行的时间。
2、如果中间某个动画的运行时间进行修改的话,后面所有的动画都需要修改。
所以,在使用JS控制动画时一般需要在动画结束后执行回调去进行DOM的相关操作,所以需要监听动画结束进行回调。JS提供了以下事件用于监听动画的结束:
CSS 动画播放时,会发生以下三个事件:
animationstart -CSS 动画开始后触发
animationiteration - CSS 动画重复播放时触发
animationend - CSS 动画完成后触发
代码如下:
var monkey = document.querySelector("#monkey");
monkey.addEventListener("animationstart",function(e){
console.log("start");
},false);
monkey.addEventListener("animationiteration",function(e){
console.log("");
},false);
monkey.addEventListener("animationend",function(e){
console.log("end");
},false);
不同的浏览器要求使用不同的前缀:
No prefix - animationstart, animationiteration, animationend
Webkit - webkitAnimationStart, webkitAnimationIteration, webkitAnimationEnd
Mozilla - mozAnimationStart, mozAnimationIteration, mozAnimationEnd
MS - MSAnimationStart, MSAnimationIteration, MSAnimationEnd
O – oAnimationStart, oAnimationIteration, oAnimationEnd
lottie动画
vue项目使用lottie(主要看安装依赖步骤)
一、安装vue-lottie
npm install --save vue-lottie
二、引用vue-lottie
在main.js引入并全局注册组件也可在页面单独引用
import lottie from 'vue-lottie';
Vue.component('lottie', lottie)
三、引入Lottie动画资源
1、script中引入资源
import * as animationData from "../../public/data/data.json";
2、data里面添加相应属性
defaultOptions: { animationData: animationData.default }
3、template里使用Lottie组件
4、定义方法
//说明:lottie初始化时,需要指定一个options配置项,因为lottie是没有宽高的,所以宽高必须设置,animCreated方法用于创建lottie动画,它的方法返回一个anim对象,里面包含这个动画的所有属性。我们可以根据它返回的这个对象,来对lottie动画做一系列的控制
handleAnimation: function(anim) {
this.anim = anim;
console.log(anim); //这里可以看到 lottie 对象的全部属性
}
说明:关于json文件中引入图片路径的问题,在vue-cli 3.0版本以上 static 文件夹 由 public 文件夹代替,static/public 文件夹打包是不经过编译的,也就是说 我将 data.json 放在 public/data 里,将动画图片放在 public/images 里,在打包之后的 dist 文件夹里会直接生成 data和images文件夹,那么json文件引入图片路径在打包编译之前和之后都是一样的 "../images/"
lottie-web基本用法
一、安装依赖
npm install lottie-web
二、在组件内引用
import lottie from 'lottie-web';
三、js方式使用
this.lottie = lottie.loadAnimation({
container: document.getElementById("containar"), // 容器
renderer: 'svg', // 'svg' / 'canvas' / 'html' 渲染方式,svg、canvas、html(轻量版仅svg渲染)
loop: false, // 动画是否循环
autoplay: false, // 是否自动播放
path: 'https://assets1.lottiefiles.com/packages/lf20_zCoscc.json', // 动画文件json路径
});
this.lottie.play(); // 播放该动画,从目前停止的帧开始播放
this.lottie.stop(); // 停止播放该动画,回到第0帧
this.lottie.pause(); // 暂停该动画,在当前帧停止并保持
this.lottie.goToAndStop(value, isFrame); // 跳到某个时刻/帧并停止。isFrame(默认false)指示value表示帧还是时间(毫秒)
this.lottie.goToAndPlay(value, isFrame); // 跳到某个时刻/帧并进行播放
this.lottie.goToAndStop(30, true); // 跳转到第30帧并停止
this.lottie.goToAndPlay(300); // 跳转到第300毫秒并播放
this.lottie.playSegments(arr, forceFlag); // arr可以包含两个数字或者两个数字组成的数组,forceFlag表示是否立即强制播放该片段
this.lottie.playSegments([10,20], false); // 播放完之前的片段,播放10-20帧
this.lottie.playSegments([[0,5],[10,18]], true); // 直接播放0-5帧和10-18
this.lottie.setSpeed(speed); // 设置播放速度,speed为1表示正常速度
this.lottie.setDirection(direction); // 设置播放方向,1表示正向播放,-1表示反向播放
this.lottie.destroy(); // 删除该动画,移除相应的元素标签等。在unmount的时候,需要调用该方法
1、实例对应的方法:
play、stop、pause、setSpeed(speed)、goToAndStop(value, isFrame)、goToAndPlay(value, isFrame)、setDirection(direction)、destroy、getDuration、playSegments(segments, forceFlag)、setSubframe(useSubFrames)
2、全局方法
3、事件监听方式一: onComplete、onLoopComplete、onEnterFrame、onSegmentStart
//事件监听: onComplete、onLoopComplete、onEnterFrame、onSegmentStart
this.lottie.onComplete = () => {
console.log("onComplete..."); //eslint-disable-line
}
this.lottie.onLoopComplete = function () {
console.log("onComplete..."); //eslint-disable-line
}
4、事件监听方式二: addEventListener 事件监听
complete、 loopComplete、enterFrame、segmentStart、 destroy
config_ready (when initial config is done)、
data_ready (when all parts of the animation have been loaded)、
data_failed (when part of the animation can not be loaded)、
loaded_images (when all image loads have either succeeded or errored)、
DOMLoaded (when elements have been added to the DOM)
this.lottie.addEventListener("data_ready", () => {
console.log("data_ready..."); //eslint-disable-line
});
this.lottie.addEventListener("DOMLoaded", () => {
console.log("DOMLoaded..."); //eslint-disable-line
});
this.lottie.addEventListener('data_ready', () => { console.log('animation data has loaded'); });
data_ready:加载完动画json文件
complete: 播放完成(循环播放下不会触发)
loopComplete: 当前循环下播放(循环播放/非循环播放)结束时触发
enterFrame: 每进入一帧就会触发,播放时每一帧都会触发一次,stop方法也会触发
segmentStart: 播放指定片段时触发,playSegments、resetSegments等方法刚开始播放指定片段时会发出,如果playSegments播放多个片段,多个片段最开始都会触发。
data_ready: 动画json文件加载完毕触发 * DOMLoaded: 动画相关的dom已经被添加到html后触发
destroy: 将在动画删除时触发
四、html方式使用
必写:class="lottie",data-animation-path
可选:data-anim-loop,data-name, data-anim-type
完整demo:
————————————————
版权声明:本部分为CSDN博主「栗子hl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012574931/article/details/103582645