动画效果与过度效果

  • 单个元素
  • 多个元素
  • 引用第三方库
  • 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--动画效果与过度效果相关推荐

  1. Vue动画的淡入淡出效果

    今天呢,我们来利用vue动画实现以下淡入淡出效果 在vue中,显示隐藏和创建移除,一个元素或者一个组件的时候,可以通过transition实现动画 主要通过6个类名来控制 进入(显示,创建) v-en ...

  2. vue动画效果-定义动画帧过度效果集成第三方动画animate.css

    1.定义动画帧 <template><div><button @click="isShow=!isShow">显示/隐藏</button& ...

  3. vue页面切换动画-类似于轮播效果、渲染列表给每一行数据加上显示动画

    vue页面切换动画-类似于轮播效果 <transition :name="transitionName"><router-view/> </trans ...

  4. vue动画效果配置和弹层css sticky footer

    vue动画效果配置 有两种方式: 一种是css方式 需要注意 4 个(CSS)类名在 enter/leave 的过渡中切换: v-enter: 定义进入过渡的开始状态.在元素被插入时生效,在下一个帧移 ...

  5. Vue 动画效果 及 Animate的基本使用

    Vue 动画效果 及 Animate的基本使用 运用原来的css代码编写动画,但是动画的类名在Vue是有规定,在进入的时候使用v-enter-active,离开的时候使用v-leave-active ...

  6. 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果

    做个炫酷的图片切换过度效果 首先,今天是520节日.到了520这类为情侣准备的节日,小编都会感到一万点暴击-- 首先酸一波,搞点事情(蹭波热度). 给大家分享一个520特效页面:看完记得回来为小编点个 ...

  7. vue实现数字“滚动式增加”效果 【插件化封装】

    vue实现数字"滚动式增加"效果 [页面加载后,获取API返回的data后,即执行渲染动画(如下图gif动画)] 源码来自于转载 demo演示地址 https://www.17su ...

  8. 26_ue4进阶末日生存游戏开发[僵尸添加动画和扣血效果]

    给僵尸npc添加动画和扣血效果 首先新建一个动画文件夹 新建一个动画蓝图 一般只要是不做汽车啊等模型,我们一般选Animinstance 因为僵尸是女英雄,所以我们选择女英雄的动画 重命名Zombie ...

  9. html怎么添加积分系统,CSS动画实现领积分效果的思路详解

    最近项目中要做一个领积分的效果,根据老板的描述,这个效果类似于支付宝蚂蚁森林里的领取能量.整体效果是就是在树周围飘着几个积分元素,上下滑动,类似星星闪烁,点击领取后,沿着树中心的位置滑动并消失,树上的 ...

最新文章

  1. BST(binary search tree)类型题目需要用到的头文件binary_tree.h
  2. 13、SpringBoot-CRUD员工修改操作/删除
  3. ActionScript 3.0 Step By Step系列(三):学学流程控制,编编if-else switch while for
  4. JavaScript设计模式—富有表现力的Javascript(一)
  5. docker安装gitlab_docker 安装部署gitlab
  6. 今天中午过的不爽的原因分析
  7. 程序员你知道被迫参与一个两亿的项目,想跑还逃不掉吗?
  8. toStringequals方法
  9. linux 进程创建 c语言,linux下进程创建的C语言程序
  10. java省略号_在Java中使用省略号(…)
  11. QDataTime格式互转
  12. 【vue3】ref获取v-for循环渲染的元素
  13. 讲述 Android 开发代号的故事:Cupcake - Donut - Eclair - Flan - Gingerbread
  14. 在电脑上通过手机发短信
  15. 认识机器学习与深度学习
  16. 两年老网站IP100 到底错哪儿了?
  17. 金庸武侠年表,终于把每部人物关系串起来了
  18. 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
  19. 比ownCloud/Nextcloud更好用的免费私有企业网盘
  20. 2020年蓝桥杯暑假第1次练习赛(C++组)

热门文章

  1. 问道手游加点模拟器 一个可用的在线版问道加点模拟器
  2. python查询12306余票_Python脚本实现12306火车票查询系统
  3. MAME4droid imame4all 项目编译
  4. 工作故事之三--崭露头角(从愣头青到感觉有点意思)
  5. 打破次元壁垒BOY LONDON X DNF 联名系列即将全国发售!
  6. 桑德罗·波提切利油画将亮相苏富比大师周拍卖会
  7. Content Aware ABR技术(九)
  8. 微新余微信号ivxinyu新余农村户口多值钱?@一张表告诉你(农民的逆袭)!
  9. Unity Shader动画-做捕鱼达人效果
  10. html无法选记事本打开方式,WinXp无法打开记事本或打开记事本会弹出打开方式的解决方案...