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. 小H分糖果

    7-5 小H分糖果 (20 分) 小H来到一个小学分糖果,小学生们很听话,站成一排等着分糖果,小H将根据每个人的上次考试分数给一定的糖果,规则如下. 每个人都有自己分数ai​,代表上次考试成绩. 每个 ...

  2. ODOO配置属性

    2字段的属性 2.1 隐藏字段 <field name='model_name' invisible="True"/> 2.2 条件下隐藏 <field name ...

  3. 从0搭建Vue3组件库(十):如何搭建一个 Cli 脚手架

    本篇文章将实现一个名为create-easyest脚手架的开发,只需一个命令npm init easyest就可以将整个组件库开发框架拉到本地. 创建 Cli 包 首先,我们在 packages 目录 ...

  4. C++面试八股文:了解auto关键字吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第15面: 面试官:了解auto关键字吗? 二师兄:嗯,了解一些(我很熟悉). 面试官:说一说auto的用法吧? 二师兄:auto主要是为了编译器进行 ...

  5. Flutter状态管理新的实践

    1 背景介绍 1.1 声明式ui 声明式UI其实并不是近几年的新技术,但是近几年声明式UI框架非常的火热.单说移动端,跨平台方案有:RN.Flutter.iOS原生有:SwiftUI.android原 ...

  6. O2OA(翱途)开发平台如何在流程表单中使用基于Vue的ElementUI组件?

    本文主要介绍如何在O2OA中进行审批流程表单或者工作流表单设计,O2OA主要采用拖拽可视化开发的方式完成流程表单的设计和配置,不需要过多的代码编写,业务人员可以直接进行修改操作. 在流程表单设计界面, ...

  7. 了解O2OA(翱途)开发平台中的VIP应用

    使用O2OA(翱途)开发平台可以非常方便地进行项目的业务需求开发与实施,O2OA(翱途)开发平台并不限制实现的系统类型,所以能实现的系统很多,最终呈现的项目成果也是多样性的,可能是OA系统,可能是人力 ...

  8. CentOS 8搭建Docker镜像私有仓库-registry

    目录 简介 安装Docker 添加docker yum源 安装docker 确保网络模块开机自动加载 使桥接流量对iptables可见 配置docker 验证docker是否正常 添加用户到docke ...

  9. Day06_Java_作业

    A:简答题 1. 类是什么? 对象是什么?举例说明 2. 类由哪些内容组成? 3. 成员变量与局部变量的区别? 4. 什么是匿名对象?什么时候使用匿名对象? 5. 使用面向对象[封装]的好处有哪些? ...

  10. Redis Stack:基于Redis的搜索、文档、图形和时间序列功能

    基于Redis的搜索.文档.图和时间序列功能整合到一个扩展Redis Stack中,以使开发人员能够轻松构建实时应用程序. Redis Stack 于 3 月 23 日发布,由三个组件组成: Redi ...