Lottie : 前端SVG动画效果
叶江怀 2020-09-07 lottie
# Lottie
# lottie-web
with npm | yarn
npm install lottie-web 或者 yarn add lottie-web
<template>
<div id="app">
<div class="animation-style" ref="animation"></div>
<button @click="stop" type="primary">停止</button>
<button @click="pause" type="info">暂定</button>
<button @click="play" type="default">开始</button>
</div>
</template>
<script>
import HelloWorld from "./components/HelloWorld";
import lottie from "lottie-web";
import Trophy from "./trophy.json"; // 导入json包
export default {
name: "App",
components: {},
data() {
return {
defaultOptions: { animationData: animationData.default },
animationSpeed: 1,
anim: {},
};
},
mounted() {
this.anim = lottie.loadAnimation({
container: this.$refs.animation,
renderer: "svg",
loop: true,
autoplay: true,
animationData: Trophy, //动画json
});
},
methods: {
handleAnimation(anim) {
this.anim = anim;
},
stop() {
// stop() 会直接回到初始的位置
this.anim.stop();
},
play() {
// play() 会开始转动
this.anim.play();
},
pause() {
// pause() 会暂停,再次点击play()会再次动起来
this.anim.pause();
},
onSpeedChange() {
// 调节速度
this.anim.setSpeed(this.animationSpeed);
},
},
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# vue-lottie
with npm | yarn
npm install vue-lottie 或者 yarn add vue-lottie
# app.vue
<template>
<div id="app">
<lottie :options="defaultOptions" @animCreated="handleAnimation" />
<van-button @click="stop" type="primary">stop</van-button>
<van-button @click="pause" type="info">pause</van-button>
<van-button @click="play" type="default">play</van-button>
</div>
</template>
<script>
import * as animationData from "./assets/dice4.json";
import pinjump from "./assets/pinjump.json";
export default {
name: "app",
data() {
return {
defaultOptions: { animationData: animationData.default },
animationSpeed: 1,
anim: {},
};
},
methods: {
handleAnimation(anim) {
this.anim = anim;
},
stop() {
this.anim.stop();
},
play() {
this.anim.play();
},
pause() {
this.anim.pause();
},
onSpeedChange() {
// 调节速度
this.anim.setSpeed(this.animationSpeed);
},
},
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# main.js
import Vue from "vue";
import App from "./App.vue";
import "vant/lib/button/style";
import lottie from "vue-lottie";
Vue.component("lottie", lottie);
Vue.use(Button);
Vue.config.productionTip = false;
new Vue({
render: (h) => h(App),
}).$mount("#app");
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# lottie-vuejs
Add to lottie-vuejs to your project
npm install --save lottie-vuejs | yarn add lottie-vuejs
Install lottie-vuejs globally
npm install -g lottie-vuejs | yarn global add lottie-vuejs
# main.js - 全局注册
import Vue from "vue";
import LottieAnimation from "lottie-vuejs"; // import lottie-vuejs
Vue.use(LottieAnimation); // add lottie-animation to your global scope
new Vue({
render: (h) => h(App),
}).$mount("#app");
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# OR - 按需引入
<script>
import LottieAnimation from 'lottie-vuejs' // import lottie-vuejs
export default {
components: {
LottieAnimation
},
data: () => ({
...
})
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# app.vue
<template>
<lottie-animation
path="path/to/your/lottie-animation.json"
:loop="false"
:autoPlay="true"
:loopDelayMin="2.5"
:loopDelayMax="5"
:speed="1"
:width="256"
:height="256"
@AnimControl="setAnimController"
/>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- path:
- The relative path to the animation object (starts in your public folder) e.g. animations/my-cool-animation.json or an absolute path e.g. http://www.mysite.com/animations/my-cool-animation.json.
- speed:
- type: Number
- required: false
- default: 1
- width:
- type: Number
- required: false
- default: -1 //defaults to 100%, Number is in pixels
- height:
- type: Number
- required: false
- default: -1 //defaults to 100%, Number is in pixels
- loop:
- type:Boolean
- required: false
- default: true
- autoPlay:
- type:Boolean
- required: false
- default: true
- loopDelayMin:
- type: Number
- required: false
- default: 0
- loopDelayMax:
- type: Number
- required: false
- default: 0
- @AnimControl:
- type: Event
- required: false
- Returns the lottie-web animation controller for custom event hookup & direct access to the lottie instance. Read the lottie-web usage section for more info