动态列表尾部添加数据执行动画
先上动画
- 动态控制节点数量(目前只显示6个节点)
- 尾部添加几个item,头部则删除几个item
- 触发 transition-group 动画
- splice 的使用方法
代码:
<style lang="scss"> .content { display: flex; width: 600px; height: 50px; margin: 100px auto; } .list-complete-item { transition: all 1s; display: inline-block; width: 100px; text-align: center; line-height: 50px; font-size: 18px; } .list-complete-enter, .list-complete-leave-to { opacity: 0; transform: translateX(-30px); } .list-complete-leave-active { position: absolute; } </style>
<template> <div class="vueBox"> <transition-group class="content" name="list-complete" tag="div"> <span v-for="item in list" v-bind:key="item.value" class="list-complete-item" > {{ item.name }} </span> </transition-group> </div> </template>
<script> export default { name: "slideanimation", data() { return { list: [ { name: "苹果", value: "1.68", }, { name: "橘子", value: "0.9", }, { name: "香蕉", value: "2.58", }, { name: "猕猴桃", value: "3.2", }, { name: "灵梦", value: "1.2", }, { name: "李子", value: "13.2", }, ], }; }, mounted() { // 定时模拟的socket的 推送数据, 需求: 页面只显示6个节点,推送几个新的数据,则删除头部几个数组。 setInterval(() => { this.animation(); }, 3000); }, methods: { // 生成指定 随机范围的 整数 randomNum(minNum, maxNum) { switch (arguments.length) { case 1: return parseInt(Math.random() * minNum + 1, 10); break; case 2: return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10); break; default: return 0; break; } }, animation() { let newItems = [...this.list]; // 来一波随机个数,随机数组 let randomCount = 1, addItems = []; randomCount = this.randomNum(1, 3); console.info("生成随机数 - 尾部添加 - 头部删除", randomCount); Array.from(new Array(randomCount), (n, i) => i).forEach(() => addItems.push({ name: (Math.random(0, 1) * 1000).toFixed(0), value: Math.random(0, 1), }) ); // 删除 数组 头部 几个item newItems.splice(0, randomCount); // 数组 尾部 添加 几个item newItems.splice(newItems.length, 0, ...addItems); // 触发 transition-group 动画 this.list = [...newItems]; }, }, }; </script>
动态数据使用wowjs显示动画
1.通过npm安装
npm install wowjs --save-dev
animate.css会自动安装。
2.在main.js中引入animate.css
import 'wowjs/css/libs/animate.css
在组件需要的地方引入wowjs
有两种使用方式:
第一种:
import {WOW} from 'wowjs' mounted() { new WOW().init() }
第二种:
import WOW from 'wowjs' mounted() { new WOW.WOW().init() }
wow实例化里面的配置参数
自己选择性添加配置参数
infinite无限次播放
如过添加动画的元素渲染数据是请求接口渲染的 那么实例化wow一定得在接口请求结束之后使用this.$nextTick()在这个函数里面执行
以上为个人经验,希望能给大家一个参考,也希望大家多多支持阿兔在线工具。