Vue--动画效果与过度效果
动画效果与过度效果
- 单个元素
- 多个元素
- 引用第三方库
- todolist案例
API文档:https://v2.cn.vuejs.org/v2/guide/transitions.html#CSS-%E5%8A%A8%E7%94%BB
单个元素
transition标签不会呈现在浏览器元素选项上,将相应动画效果的内容放置在transition标签内,并且设置相应class的样式,可以实现动画效果。
<template><div><button @click="isShow = !isShow">显示/隐藏</button><!--将需要增加动画效果的元素放在transition内--><!--如果设置name="xxx",name后面的v-enter-active的v就要改成xxx--><!--appear设置表示一进页面就显示动画效果--><!-- 如果变化元素只有一个,可以不设置name,如果有多个,为了避免样式冲突,还是设置name --><transition name="democss" :appear="true"><h1 v-show="isShow">你好啊!</h1></transition></div>
</template><script>
export default {name: "MyTest",data() {return {isShow: true,};},
};
</script><style>
/*过度效果,标志transition*/
h1 {background-color: aqua;
}
/*进入和离开过程*/
.v-enter-active,
.v-leave-active {transition: 0.5s linear;
}
/*刚进入和离开过去*/
.v-enter,
.v-leave-to {transform: translateX(-100%);
}
/*刚进入和进入过去*/
.v-leave,
.v-enter-to {transform: translateX(0);
}
/*
下面的是用@keyframe实现的,一样的效果,动画效果,标志@keyframe,animation
h1 {background-color: aqua;
}
.democss-enter-active { //如果没有name则为.v-enter-activeanimation: testPart 1s linear;
}
.democss-leave-active {animation: testPart 1s linear reverse;
}
@keyframes testPart {from {transform: translateX(-100%);}to {transform: translateX(0px);}
}
*/
</style>
多个元素
这时候需要用transition-group标签,并且其子标签也就是要给与动画的标签需要有key值。
<template><div><button @click="isShow = !isShow">显示/隐藏</button><!-- transition-group的子标签有key值 --><transition-group :appear="true"><h1 v-show="!isShow" key="1">你好啊!</h1><h1 v-show="isShow" key="2">你好啊!</h1></transition-group></div>
</template><script>
export default {name: "MyTest",data() {return {isShow: true,};},
};
</script><style>
h1 {background-color: aqua;
}
.v-enter-active,
.v-leave-active {transition: 0.5s linear;
}
.v-enter,
.v-leave-to {transform: translateX(-100%);
}
.v-leave,
.v-enter-to {transform: translateX(0);
}
</style>
引用第三方库
有很多动画第三方库,这里示例为animate.css
可以通过
npmjs.com
搜索得到并进入官网。里面有相应的步骤,基本就是先安装相应的类库
npm install animate.css
然后再相应的组件中导入
import "animate.css"
接着将transition的name值改为animate__animated animate__bounce,以及设置属性,示例中加的为enter-active-class和leave-active-class,相应的类可以在官网复制粘贴直接使用
<template><div><button @click="isShow = !isShow">显示/隐藏</button><!-- 如果变化元素只有一个,可以不设置name,如果有多个,为了避免样式冲突,还是设置name --><transition-groupname="animate__animated animate__bounce":appear="true"enter-active-class="animate__shakeX"leave-active-class="animate__bounceOut"><h1 v-show="!isShow" key="1">你好啊!</h1><h1 v-show="isShow" key="2">你好啊!</h1></transition-group></div>
</template><script>
import "animate.css";
export default {name: "MyTest",data() {return {isShow: true,};},
};
</script><style>
h1 {background-color: aqua;
}
</style>
todolist案例
方法一:在MyItem内改
<template><transition name="democss" appear><li><label><!-- 如下代码也能实现功能,但是不太推荐,因为有点违反原则,因为修改了props --><!-- <input type="checkbox" v-model="todo.done"/> --><inputtype="checkbox":checked="todo.done"@change="handleCheck(todo.id)"/><span v-show="!todo.isEdit">{{ todo.title }}</span><inputv-show="todo.isEdit"type="text":value="todo.title"@blur="handleBlur(todo, $event)"ref="inputPart"/></label><button class="btn btn-danger" @click="handleDelete(todo.id)">删除</button><buttonv-show="!todo.isEdit"class="btn btn-edit"@click="handleEdit(todo)">编辑</button></li></transition>
</template><script>
export default {name: "MyItem",props: ["todo"],methods: {handleCheck(id) {//this.checkTodo(id);this.$bus.$emit("checkTodo", id);},handleDelete(id) {//this.deleteTodo(id);this.$bus.$emit("deleteTodo", id);},handleEdit(todo) {if (Object.prototype.hasOwnProperty.call(todo, "isEdit")) {todo.isEdit = true;} else {this.$set(todo, "isEdit", true);}this.$nextTick(function () {this.$refs.inputPart.focus();});},//失去焦点回调handleBlur(todo, e) {todo.isEdit = false;if (!e.target.value.trim()) return alert("输入不能为空");this.$bus.$emit("updateTodo", todo.id, e.target.value);},},
};
</script><style scoped>
/*item*/
li {list-style: none;height: 36px;line-height: 36px;padding: 0 5px;border-bottom: 1px solid #ddd;
}
li label {float: left;cursor: pointer;
}
li label li input {vertical-align: middle;margin-right: 6px;position: relative;top: -1px;
}
li button {float: right;display: none;margin-top: 3px;
}
li:before {content: initial;
}
li:last-child {border-bottom: none;
}
li:hover {background-color: #ddd;
}
li:hover button {display: block;
}
.democss-enter-active {animation: testPart 1s linear;
}
.democss-leave-active {animation: testPart 1s linear reverse;
}
@keyframes testPart {from {transform: translateX(100%);}to {transform: translateX(0px);}
}
</style>
方法二: 在MyList中修改
由于使用了v-for因此这时候需要用transition-group
<template><ul class="todo-main"><transition-group name="democss" appear><MyItem v-for="todo in todos" :key="todo.id" :todo="todo" /></transition-group></ul>
</template><script>
import MyItem from "./MyItem";export default {name: "MyList",components: { MyItem },props: ["todos"],
};
</script><style scoped>
/*main*/
.todo-main {margin-left: 0px;border: 1px solid #ddd;border-radius: 2px;padding: 0px;
}
.todo-empty {height: 40px;line-height: 40px;border: 1px solid #ddd;border-radius: 2px;padding-left: 5px;margin-top: 10px;
}
.democss-enter-active {animation: testPart 1s linear;
}
.democss-leave-active {animation: testPart 1s linear reverse;
}
@keyframes testPart {from {transform: translateX(100%);}to {transform: translateX(0px);}
}
</style>
感觉第二种情况更加清晰点。
Vue--动画效果与过度效果相关推荐
- Vue动画的淡入淡出效果
今天呢,我们来利用vue动画实现以下淡入淡出效果 在vue中,显示隐藏和创建移除,一个元素或者一个组件的时候,可以通过transition实现动画 主要通过6个类名来控制 进入(显示,创建) v-en ...
- vue动画效果-定义动画帧过度效果集成第三方动画animate.css
1.定义动画帧 <template><div><button @click="isShow=!isShow">显示/隐藏</button& ...
- vue页面切换动画-类似于轮播效果、渲染列表给每一行数据加上显示动画
vue页面切换动画-类似于轮播效果 <transition :name="transitionName"><router-view/> </trans ...
- vue动画效果配置和弹层css sticky footer
vue动画效果配置 有两种方式: 一种是css方式 需要注意 4 个(CSS)类名在 enter/leave 的过渡中切换: v-enter: 定义进入过渡的开始状态.在元素被插入时生效,在下一个帧移 ...
- Vue 动画效果 及 Animate的基本使用
Vue 动画效果 及 Animate的基本使用 运用原来的css代码编写动画,但是动画的类名在Vue是有规定,在进入的时候使用v-enter-active,离开的时候使用v-leave-active ...
- 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
做个炫酷的图片切换过度效果 首先,今天是520节日.到了520这类为情侣准备的节日,小编都会感到一万点暴击-- 首先酸一波,搞点事情(蹭波热度). 给大家分享一个520特效页面:看完记得回来为小编点个 ...
- vue实现数字“滚动式增加”效果 【插件化封装】
vue实现数字"滚动式增加"效果 [页面加载后,获取API返回的data后,即执行渲染动画(如下图gif动画)] 源码来自于转载 demo演示地址 https://www.17su ...
- 26_ue4进阶末日生存游戏开发[僵尸添加动画和扣血效果]
给僵尸npc添加动画和扣血效果 首先新建一个动画文件夹 新建一个动画蓝图 一般只要是不做汽车啊等模型,我们一般选Animinstance 因为僵尸是女英雄,所以我们选择女英雄的动画 重命名Zombie ...
- html怎么添加积分系统,CSS动画实现领积分效果的思路详解
最近项目中要做一个领积分的效果,根据老板的描述,这个效果类似于支付宝蚂蚁森林里的领取能量.整体效果是就是在树周围飘着几个积分元素,上下滑动,类似星星闪烁,点击领取后,沿着树中心的位置滑动并消失,树上的 ...
最新文章
- BST(binary search tree)类型题目需要用到的头文件binary_tree.h
- 13、SpringBoot-CRUD员工修改操作/删除
- ActionScript 3.0 Step By Step系列(三):学学流程控制,编编if-else switch while for
- JavaScript设计模式—富有表现力的Javascript(一)
- docker安装gitlab_docker 安装部署gitlab
- 今天中午过的不爽的原因分析
- 程序员你知道被迫参与一个两亿的项目,想跑还逃不掉吗?
- toStringequals方法
- linux 进程创建 c语言,linux下进程创建的C语言程序
- java省略号_在Java中使用省略号(…)
- QDataTime格式互转
- 【vue3】ref获取v-for循环渲染的元素
- 讲述 Android 开发代号的故事:Cupcake - Donut - Eclair - Flan - Gingerbread
- 在电脑上通过手机发短信
- 认识机器学习与深度学习
- 两年老网站IP100 到底错哪儿了?
- 金庸武侠年表,终于把每部人物关系串起来了
- 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
- 比ownCloud/Nextcloud更好用的免费私有企业网盘
- 2020年蓝桥杯暑假第1次练习赛(C++组)
热门文章
- 问道手游加点模拟器 一个可用的在线版问道加点模拟器
- python查询12306余票_Python脚本实现12306火车票查询系统
- MAME4droid imame4all 项目编译
- 工作故事之三--崭露头角(从愣头青到感觉有点意思)
- 打破次元壁垒BOY LONDON X DNF 联名系列即将全国发售!
- 桑德罗·波提切利油画将亮相苏富比大师周拍卖会
- Content Aware ABR技术(九)
- 微新余微信号ivxinyu新余农村户口多值钱?@一张表告诉你(农民的逆袭)!
- Unity Shader动画-做捕鱼达人效果
- html无法选记事本打开方式,WinXp无法打开记事本或打开记事本会弹出打开方式的解决方案...