一、vue中使用动画

文档:https://cn.vuejs.org/v2/guide/transitions.html

1. Vue 中的过渡动画

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .box{
  8. width: 200px;
  9. height: 200px;
  10. background-color:yellow;
  11. }
  12. .fade-enter,.fade-leave-to{
  13. opacity: 0;
  14. transform: translateX(200px);
  15. }
  16. .fade-enter-active,.fade-leave-active{
  17. transition: all 0.5s ease-in-out;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div id="app">
  23. <button @click="show=!show">切换</button>
  24. <transition name="fade">
  25. <div class="box" v-if="show">始于1886,可口可乐</div>
  26. </transition>
  27. </div>
  28. <script src="js/vue.js"></script>
  29. <script>
  30. new Vue({
  31. el:'#app',
  32. data:{
  33. show:true
  34. },
  35. });
  36. </script>
  37. </body>
  38. </html>

2. 过渡动画 案例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. *{
  8. padding: 0;
  9. margin: 0;
  10. list-style: none;
  11. }
  12. #app{
  13. width: 600px;
  14. margin: 50px auto;
  15. }
  16. li{
  17. width: 500px;
  18. height: 30px;
  19. border: 1px dashed #3fa435;
  20. margin-top: 10px;
  21. }
  22. li:hover{
  23. cursor: pointer;
  24. background-color: #ff7408;
  25. transition: all 0.8s ease; /* hover 动画效果 */
  26. }
  27. /*从这里开始设置 vue 的动画*/
  28. .hero-enter, .hero-leave-to{
  29. opacity: 0;
  30. transform: translateY(80px);
  31. }
  32. .hero-enter-active, .hero-leave-active{
  33. transition: all 0.5s ease;
  34. }
  35. .hero-move{
  36. transition: all 1s ease-in-out;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <div id="app">
  42. <div>
  43. <label>姓名: <input type="text" v-model="name"></label>
  44. <label>绝招: <input type="text" v-model="unique_skill"></label>
  45. <button @click="add()">添加</button>
  46. </div>
  47. <transition-group tag="ul" name="hero">
  48. <li v-for="(list,index) in lists" @click="del(index)" :key="index">
  49. {{list.name}}:{{list.unique_skill}}
  50. </li>
  51. </transition-group>
  52. </div>
  53. <script src="js/vue.js"></script>
  54. <script>
  55. new Vue({
  56. el:'#app',
  57. data:{
  58. name:'',
  59. unique_skill:'',
  60. lists:[
  61. {name:'鸣人',unique_skill:'螺旋丸'},
  62. {name:'卡卡西',unique_skill:'写轮复制'},
  63. {name:'雏田',unique_skill:'八卦六十四掌'},
  64. {name:'阿童木',unique_skill:'拳头'}
  65. ]
  66. },
  67. methods:{
  68. del(index){
  69. this.lists.splice(index,1)
  70. },
  71. add(){
  72. this.lists.push({name:this.name,unique_skill:this.unique_skill});
  73. this.name = '';
  74. this.unique_skill = '';
  75. }
  76. }
  77. })
  78. </script>
  79. </body>
  80. </html>

3. 用第三方动画库 animate.css

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <link rel="stylesheet" href="css/animate.css">
  7. </head>
  8. <body>
  9. <div id="app">
  10. <button @click="flag = !flag">切换</button>
  11. <br>
  12. <transition
  13. enter-active-class="bounceIn"
  14. leave-active-class="bounceIn"
  15. :duration="{enter:1000,leave:500}"
  16. >
  17. <img v-if="flag" src="img/1.jpg" alt="" class="animated">
  18. </transition>
  19. <h1 class="animated infinite bounce delay-2s">↑↑↑↑↑</h1>
  20. </div>
  21. <script src="js/vue.js"></script>
  22. <script>
  23. new Vue({
  24. el:'#app',
  25. data:{
  26. flag:false,
  27. }
  28. })
  29. </script>
  30. </body>
  31. </html>

其他动画操作方式,查看vue官网文档,这里先不记录了。


二、Vue 组件

以下演示的组件的各种创建方式。在工程化开发中.

1.全局 Vue 组件

全局组件,所有实例都可以使用

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <my-date></my-date>
  10. <my-date></my-date>
  11. </div>
  12. <div id="app2">
  13. <p>------------ app2 -----------</p>
  14. <my-date></my-date>
  15. </div>
  16. <script src="js/vue.js"></script>
  17. <script>
  18. // 1. 组件构造器
  19. let Profile = Vue.extend({
  20. // 模板选项
  21. template:
  22. `
  23. <div>
  24. <span>你的生日是:</span><input type="date">
  25. </div>
  26. `
  27. });
  28. // 2. 注册全局组件
  29. Vue.component('my-date',Profile);
  30. // 1. 创建Vue的实例
  31. new Vue({
  32. el: '#app',
  33. data: {
  34. msg: '哒哒哒'
  35. }
  36. });
  37. new Vue({
  38. el:'#app2'
  39. })
  40. </script>
  41. </body>
  42. </html>

2. 局部 Vue 组件

局部组件在各自的实例里面注册。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <p>------------- app -------------</p>
  10. <my-date></my-date>
  11. <!-- my-color 这里写里也没用-->
  12. <my-color></my-color>
  13. </div>
  14. <div id="app1">
  15. <p>------------- app1 -------------</p>
  16. <my-color></my-color>
  17. </div>
  18. <script src="js/vue.js"></script>
  19. <script>
  20. // 1. 组件构造器
  21. let Profile = Vue.extend({
  22. // 模板选项
  23. template: `
  24. <div>
  25. <span>日期:</span><input type="date">
  26. </div>
  27. `
  28. });
  29. let Profile1 = Vue.extend({
  30. // 模板选项
  31. template: `
  32. <div>
  33. <span>Color:</span><input type="color">
  34. </div>
  35. `
  36. });
  37. // 1. 创建Vue的实例
  38. new Vue({
  39. el: '#app',
  40. data: {
  41. msg: '撩课学院'
  42. },
  43. components: {
  44. 'my-date': Profile
  45. }
  46. });
  47. new Vue({
  48. el: '#app1',
  49. components: {
  50. 'my-color': Profile1
  51. }
  52. })
  53. </script>
  54. </body>
  55. </html>

3. 另一种注册组件的方式

全局组件:

  1. <html lang="en">
  2. <head>
  3. <meta charset="UTF-8">
  4. <title></title>
  5. </head>
  6. <body>
  7. <div id="app">
  8. <my-date></my-date>
  9. </div>
  10. <div id="app1">
  11. <my-date></my-date>
  12. </div>
  13. <script src="js/vue.js"></script>
  14. <script>
  15. // 注册全局组件
  16. Vue.component('my-date', {
  17. template: `
  18. <div>
  19. <span>日期:</span><input type="date">
  20. </div>
  21. `
  22. });
  23. // 1. 创建Vue的实例
  24. new Vue({
  25. el: '#app',
  26. });
  27. new Vue({
  28. el: '#app1',
  29. });
  30. </script>
  31. </body>
  32. </html>

局部组件:

  1. <body>
  2. <div id="app">
  3. <my-date></my-date>
  4. <my-color></my-color>
  5. </div>
  6. <script src="js/vue.js"></script>
  7. <script>
  8. new Vue({
  9. el:'#app',
  10. data:{},
  11. components:{
  12. 'my-date':{
  13. template:`<div> <span>日期:</span> <input type="date"> </div>`
  14. },
  15. 'my-color': {
  16. template: `
  17. <div>
  18. <span>Color:</span><input type="color">
  19. </div>
  20. `
  21. },
  22. }
  23. })
  24. </script>
  25. </body>

4.父子组件

  1. <body>
  2. <div id="app">
  3. <parent></parent>
  4. <!--<child></child>-->
  5. </div>
  6. <script src="js/vue.js"></script>
  7. <script>
  8. // 1.构造子组件
  9. let child1 = Vue.extend({
  10. template:`<img src="img/1.jpg" width="200px">`
  11. });
  12. Vue.component('child',child1);
  13. let child2 = Vue.extend({
  14. template:`<p>child2......hello world!</p>`
  15. });
  16. // 2.构造父组件
  17. Vue.component('parent',{
  18. components:{
  19. 'my-child1':child1,
  20. 'my-child2':child2
  21. },
  22. template:
  23. `
  24. <div>
  25. <p>Father...一千零一夜</p>
  26. <my-child1></my-child1>
  27. <my-child2></my-child2>
  28. </div>
  29. `
  30. });
  31. new Vue({
  32. el:'#app',
  33. });
  34. </script>
  35. </body>

5. vue 组件中的 template标签

  1. <body>
  2. <div id="app">
  3. <g_box></g_box>
  4. </div>
  5. <template id="g_box">
  6. <div>
  7. <h5>hello man</h5>
  8. <img src="img/1.jpg" width="200px" alt="">
  9. </div>
  10. </template>
  11. <script src="js/vue.js"></script>
  12. <script>
  13. Vue.component('g_box',{
  14. template:'#g_box'
  15. });
  16. new Vue({
  17. el:'#app',
  18. })
  19. </script>
  20. </body>

6.Vue组件中的 script 标签

这种方式不常用。

  1. <body>
  2. <div id="app">
  3. <g_div></g_div>
  4. </div>
  5. <script type="text/template" id="g_div">
  6. <div>
  7. <h5>hello Nurato!</h5>
  8. <img src="img/1.jpg" width="200px" alt="">
  9. </div>
  10. </script>
  11. <script src="js/vue.js"></script>
  12. <script>
  13. Vue.component('g_div',{
  14. template:'#g_div'
  15. });
  16. new Vue({
  17. el:'#app'
  18. })
  19. </script>
  20. </body>


三、组件中间的数据通信

1.Vue的组件数据传递-data

在这里,data选项必须为函数,必须要用函数返回的方式传递数据

  1. <body>
  2. <div id="app">
  3. <g_div></g_div>
  4. </div>
  5. <template id="g_div">
  6. <div>
  7. <h5>{{msg}}</h5>
  8. <img src="img/1.jpg" width="200px" alt="">
  9. </div>
  10. </template>
  11. <script src="js/vue.js"></script>
  12. <script>
  13. Vue.component('g_div',{
  14. template:'#g_div',
  15. // 这里data 只能通过函数返回的方式来,因为这样申明的话,和new Vue 里的data会互相污染
  16. // data:{
  17. // msg:'hello man'
  18. // }
  19. data(){
  20. return {msg:'hello man'}
  21. }
  22. });
  23. new Vue({
  24. el:'#app',
  25. data:{
  26. }
  27. })
  28. </script>
  29. </body>

2.Vue的组件之间的通信

  1. <body>
  2. <div id="app">
  3. <g_box msg="hello Nurato" imgSrc="img/1.jpg"></g_box>
  4. </div>
  5. <template id="g_box">
  6. <div>
  7. <h5>{{msg}}</h5>
  8. <img :src="imgsrc" width="200px" alt="">
  9. </div>
  10. </template>
  11. <script src="js/vue.js"></script>
  12. <script>
  13. // 1 创建组件
  14. Vue.component('g_box',{
  15. template:'#g_box',
  16. props:['msg','imgsrc']
  17. });
  18. // 2 创建实例
  19. new Vue({
  20. el:'#app',
  21. data:{
  22. msg:''
  23. }
  24. })
  25. </script>
  26. </body>

3.Vue的组件之间的通信-多层

  1. <div id="app">
  2. <!-- 1. 这种不带 : 号的,可以直接填值,但是用不了 实例中 data 里的数据 -->
  3. <!--<my-parent imgsrc="img/1.jpg" img_title="Nurato"></my-parent>-->
  4. <!-- 2. 图片,imgsrc 如果是用 实例中的data,必须是用加 : 号的方式 -->
  5. <my-parent :img_title="title" :imgsrc="img"></my-parent>
  6. </div>
  7. <!-- 子组件 1 -->
  8. <template id="my_img">
  9. <img :src="imgsrc"width="200px" alt="">
  10. </template>
  11. <!-- 子组件 2 -->
  12. <template id="my_title">
  13. <h5>{{title}}</h5>
  14. </template>
  15. <!-- 父级组件 -->
  16. <div id="my_parent">
  17. <div>
  18. <child1 :imgsrc="imgsrc"></child1>
  19. <child2 :title="img_title"></child2>
  20. </div>
  21. </div>
  22. <script src="js/vue.js"></script>
  23. <script>
  24. // 1.子组件实例
  25. let child1 = Vue.extend({
  26. template:'#my_img',
  27. props:['imgsrc']
  28. });
  29. let child2 = Vue.extend({
  30. template:'#my_title',
  31. props:['title']
  32. });
  33. // 父组件
  34. Vue.component('my-parent',{
  35. props:['imgsrc','img_title'],
  36. components:{
  37. 'child1':child1,
  38. 'child2':child2
  39. },
  40. template:'#my_parent'
  41. });
  42. new Vue({
  43. el:'#app',
  44. data:{
  45. img:'img/1.jpg',
  46. title:'2.哒哒哒'
  47. }
  48. })
  49. </script>
  50. </body>

vue02—— 动画、组件、组件之间的数据通信的更多相关文章

  1. jquery插件模式开发和react组件开发之间的异同

    jquery插件模式开发和react组件开发之间的异同

  2. Vue 根组件,局部,全局组件 | 组件间通信,案例组件化

    一 组件 <div id="app"> <h1>{{ msg }}</h1> </div> <script src=" ...

  3. 微信小程序 - 组件 | 自定义组件 | 组件事件传递页面

    组件 小程序允许我们使用自定义组件的方式来构建页面 类似Vue的小组件 自定义组件 类似于页面,一个自定义组件由 json, wxml, wxss, js 4个文件组成 1.创建 1.创建compon ...

  4. React组件(组件属性this.state和this.props,css样式修饰组件)

    目录: 1.创建组件的第一种方式 function2.将组件抽离为单独的jsx文件3.省略.jsx后缀, 配置webpack设置根目录4.创建组件的第二种方式--使用class关键字创建组件5.组件私 ...

  5. vue组件之间的通信,父子之间的数据通信

    父子组件之间的通信问题既可以传递数据也可以传递变量,父组件传递数据给子组件可以使用props,子组件传递数据给父组件则可以自定义函数来监听子组件的事件发射器. 首先说说组件注册,组件的注册分为全局注册 ...

  6. [2014.01.27]wfGifAnimator 动画GIF组件 3.0

    组件支持设置GIF帧延时和获取GIF的帧延迟. 组件支持添加或插入或更新帧(支持bmp/jpg/gif/wmf/emf/ico格式).删除帧.清空帧操作. 组件支持GIF动画缩放大小. 组件支持绘制线 ...

  7. Vue 组件&组件之间的通信 之 非父子关系组件之间的通信

    Vue中不同的组件,即使不存在父子关系也可以相互通信,我们称为非父子关系通信: 我们需要借助一个空Vue实例,在不同的组件中,使用相同的Vue实例来发送/监听事件,达到数据通信的目的: 实例: 初始加 ...

  8. Vue 组件&组件之间的通信 父子组件的通信

    在Vue的组件内也可以定义组件,这种关系成为父子组件的关系: 如果在一个Vue实例中定义了component-a,然后在component-a中定义了component-b,那他们的关系就是: Vue ...

  9. vue的$emit 与$on父子组件与兄弟组件的之间通信

    本文主要对vue 用$emit 与 $on 来进行组件之间的数据传输. 主要的传输方式有三种: 1.父组件到子组件通信 2.子组件到父组件的通信 3.兄弟组件之间的通信 一.父组件传值给子组件 父组件 ...

随机推荐

  1. 浅谈 Linux 下的 SSH1, SSH2

    SSH:Secure Shell .是一种安全协议. 常见的应用场景是远程控制台登陆. SSH1免费,SSH2收费.  其实 SSH 并不只是在 Linux 和 Unix  下使用,他们同样在 Win ...

  2. 最小树形图--朱刘算法([JSOI2008]小店购物)

    题面 luogu Sol 首先设一个 \(0\) 号点,向所有点连边,表示初始价值 显然这个图的一个 \(0\) 为根的最小有向生成树的边权和就是每个买一次的最小价值 再买就一定能优惠(包含 \(0\ ...

  3. JDBC中常用对象介绍

    JDBC中的主要类(接口) 在JDBC中常用的类有: 1.DriverManager 2.Connection 3.Statement 4.ResultSet 1.DriverManager 其实我们 ...

  4. 一键清理 Nexus 中无用的 Docker 镜像

    现许多团队使用 Nexus 来管理 Docker 镜像,产品不断迭代,镜像仓库占用的磁盘空间也越来越大.由于 Nexus 的控制台并未提供批量操作镜像功能,清理镜像十分不便.本文分享一个清理 Nexu ...

  5. Latex表格太宽处理方法 (How to shorten Latex table length)

    当表格太宽时, 为了能在页面中显示完整, 可以缩小表格, 或者横排.缩小表格的好处是, 不用倒转页面阅读, 坏处是原始宽度不同的表格, 被缩小后, 字体不一, 不美观. 虽然可以调整参数使得所有表格字 ...

  6. Install guide for OpenLDAP and GOsa 2 on Ubuntu & Debian

    First we will install OpenLDAP by running the command as root: apt-get install slapd ldap-utils ldap ...

  7. 统计nginx日志

    .根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l .统计访问URL统计PV awk '{print $7}' access.l ...

  8. java将int类型的变量转化成String类型的

    第一种方法:String的valueOf方法,int i=5;String s=String.valueOf(i);第二种方法,直接在int后面加一个空的字符串,因为在java里面,默认任务int类型 ...

  9. mysql索引小记

    Mysql索引分为以下几类:FULLTEXT, HASH,BTREE,RTREE. FULLTEXT:全文搜索索引 主要是解决'ad%'这样的查询效率低的问题,只能是MyISAM和InnoDB引擎上使 ...

  10. haproxy开启日志功能

    haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件.下面以centos6.4为例,haproxy使用系统自带的rpm报 ...