vue实现列表依次逐渐进入动画

利用vue 中transition-group 实现列表逐个进入动画效果

1.vue3代码,

 

<template>
<section class="search-tool">
<div class="search-content">
<div class="build-box">
<div class="list">
<transition-group name="more" :css="false" @before-enter="beforeEnter" @enter="enter">
<!-- template 是为了解决vue3 vfor vif一起使用时冲突 -->
<template v-for="(build, b_index) in data.buildList" :key="b_index">
<!-- data-key 自定义属性,为过渡效果添加延时 -->
<!-- 类似 ant motion 中列表渲染时添加的key-->
<div v-if="data.show" :data-key="b_index">
<div
v-if="build.name.indexOf(data.inputVal) >= 0"
class="build-item"
:title="build.name"
>
<div class="overflow-1">建筑{{ b_index }}</div>
<div class="collect" @click="collectBuild()"></div>
</div>
</div>
</template>
</transition-group>
</div>
</div>
</div>
</section>
</template> <script setup>
import { reactive, toRefs, onBeforeMount, onMounted, watchEffect, computed } from 'vue'
import "./../assets/transiton.css"
const data = reactive({
show: false,
inputVal: '',
buildList: [
{
name: '11'
},
{
name: ''
},
{
name: ''
},
{
name: ''
},
{
name: ''
},
{
name: ''
}
]
})
const collectBuild = () => {}
const beforeEnter = (el) => {
el.style.opacity = 0
}
const enter = (el, done) => {
let delay = el.dataset.key * 150 //进入延时
setTimeout(() => {
el.style.transition = 'opacity 0.4s '
el.style.opacity = 1
el.style.animation = 'right-to-left 0.4s infinite' //动画效果
el.style['animation-iteration-count'] = 1
done()
}, delay)
}
onBeforeMount(() => {})
onMounted(() => {
data.show = !data.show
})
watchEffect(() => {})
defineExpose({
...toRefs(data)
})
</script>
<style scoped lang="scss">
.search-tool {
width: 500px;
height: 800px;
background: rgba($color: #000000, $alpha: 0.7);
.search-content {
max-height: 1170px;
color: #fff;
font-size: 30px;
.list {
max-height: 380px;
overflow-y: scroll;
overflow-x: hidden;
}
.build-item {
height: 72px;
background: #000000;
background-size: 100% 100%;
background-repeat: no-repeat;
cursor: pointer;
margin-bottom: 5px;
padding-left: 15px;
box-sizing: border-box;
position: relative;
display: flex;
align-content: center;
align-items: center;
.overflow-1 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
max-width: 450px;
}
}
::-webkit-scrollbar {
/*滚动条整体样式*/
width: 12px; /*高宽分别对应横竖滚动条的尺寸*/
height: 20px;
}
::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 5px;
-webkit-box-shadow: inset 0 0 5px #2c8af3;
background-color: #2c8af3;
}
::-webkit-scrollbar-track {
/*滚动条里面轨道*/
-webkit-box-shadow: inset 0 0 5px #a1a1a1;
border-radius: 0;
display: none;
}
}
}
</style>

 

2.过渡动画放在 统一放在一个transiton.css文件夹中,引入到main.js或者单个组件引入

body{
padding: 0;
margin: 0;
}
/* 从右到左 */
@keyframes right-to-left {
from {
padding-left: 100%;
}
to {
padding-left: 0%;
}
}
/* 从左到右 */
@keyframes left-to-right {
from {
padding-right: 100%;
}
to {
padding-right: 0%;
}
}

更新:解决循环元素过多,防止延时时间过长,dom长期不显示

let index = 0
const enter = (el, done) => {
let delay = el.dataset.key * 150 //进入延时
if(index <= 30){//只循环30条
setTimeout(() => {
el.style.transition = 'opacity 0.4s '
el.style.opacity = 1
el.style.animation = 'right-to-left 0.4s infinite' //动画效果
el.style['animation-iteration-count'] = 1
done()
}, delay)
} else {
el.style.opacity = 1
}
}

vue列表逐个进入过渡动画的更多相关文章

  1. Vue 路由知识三(过渡动画及路由钩子函数)

    路由的过渡动画:让路由有过渡动画,需要在<router-view>标签的外部添加<transition>标签,标签还需要一个name属性. <transition nam ...

  2. vue 列表的排序过渡 shuffle遇到的问题

    内部的实现,Vue 使用了一个叫 FLIP 简单的动画队列使用 transforms 将元素从之前的位置平滑过渡新的位置 需要注意的是使用 FLIP 过渡的元素不能设置为 display: inlin ...

  3. VUE笔记 - 列表过渡动画 v-enter, v-leave-to | v-enter-active, v-leave-active | v-move

    本例要结合过渡动画四个过程的示意图一起理解. https://cn.vuejs.org/v2/guide/transitions.html 疑问: v-for="(item,i) in li ...

  4. vue过渡 & 动画---进入/离开 & 列表过渡

    (1)概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animat ...

  5. Vue列表过渡

    前面的话 本文将详细介绍Vue列表过渡 概述 前面分别介绍了单元素CSS过渡和JS过渡,以及多元素过渡.如何同时渲染整个列表呢?在这种情景中,需要使用<transition-group>组 ...

  6. Vue相关(过渡动画)

    Vue 过渡 && 动画 一.CSS过渡 1.transition标签可以用来封装需要过渡的元素,添加entering/leaving 过渡, 条件是: (1)使用条件渲染语句 v-i ...

  7. vue.js之过渡动画

    vue提供了一个封装动画的组件 <transition name="tr"></transition>,将需要执行动画的元素包裹在该组件中,在通过css修改 ...

  8. vue 过渡 & 动画

    过渡 & 动画 过渡动画 用css先定义好动画效果 .a-enter-active, .a-leave-active { transition: all 1.5s; } .a-enter, . ...

  9. 058_末晨曦Vue技术_过渡 & 动画之过渡的类名

    进入/离开 & 列表过渡 点击打开视频讲解更加详细 概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class ...

  10. CSS3初学篇章_5(背景样式/列表样式/过渡动画)

    背景样式 1.背景颜色语法:background-color : transparent | color body { background-color:#CCCCCC;} 2.渐变色彩语法:back ...

随机推荐

  1. Python基础 - 算数运算符

    算数运算符   运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 - 两个数相乘或是返回一个被 ...

  2. MAUI Android 关联文件类型

    实现效果 打开某个文件,后缀是自己想要的类型,在弹出的窗口(用其它应用打开)的列表中显示自己的应用图标 点击后可以获得文件信息以便于后续的操作 实现步骤 以注册.bin后缀为例,新建一个MAUI项目 ...

  3. 代码随想录算法训练营Day31 贪心算法| 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

    代码随想录算法训练营 122.买卖股票的最佳时机II 题目链接:122.买卖股票的最佳时机II 给定一个数组,它的第 i个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润. ...

  4. 2021-i春秋秋季赛部分misc+re wp

    两道re比较简单,没有什么好说的,misc的符号执行那题还有点意思,总的来说题目不难 CTFMakesMeAngr 给出了符号执行的中间语言,对着文档把汇编逻辑逆一下,发现是个凯撒加密,位移为14,注 ...

  5. 2023-06-02:给定一个二进制数组 nums 和一个整数 k, k位翻转 就是从 nums 中选择一个长度为 k 的 子数组, 同时把子数组中的每一个 0 都改成 1 ,把子数组中的每一个 1

    2023-06-02:给定一个二进制数组 nums 和一个整数 k, k位翻转 就是从 nums 中选择一个长度为 k 的 子数组, 同时把子数组中的每一个 0 都改成 1 ,把子数组中的每一个 1 ...

  6. 数据科学工具 Jupyter Notebook 教程(二)

    Jupyter Notebook 是一个把代码.图像.注释.公式和作图集于一处,实现可读性分析的交互式笔记本工具.借助所谓的内核(Kernel)的概念,Jupyter Notebook 可以同时支持包 ...

  7. 云原生时代Go最受欢迎Web开源框架Gin原理与实战

    @ 目录 概述 定义 特点 概览导图 使用 快速入门 HTTP 方法使用 参数获取 参数绑定 自定义日志输出 自定义中间件 路由组 HTML渲染 设置和获取Cookie XML.YAML.ProtoB ...

  8. nordic——NCS下的DFU升级(基于NCS)

    一.简介 在NCS中有多种的DFU选择,强烈推荐使用MCUboot,当然如果你需要选择传统的nrf_DFU也是可以的,但是要用到官方修改的源文件. 关于mcuboot,原理性的东西在官网和官方博客中有 ...

  9. 【Netty】02-入门

    二. Netty 入门 1. 概述 1.1 Netty 是什么? Netty is an asynchronous event-driven network application framework ...

  10. Spring MVC 前后台传递json格式数据 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

    若使用默认的json转换器,则需要如下包: <mvc:annotation-driven /> 报错如下: Content type 'application/x-www-form-url ...