初识 Vue(28)---(Vue 中的动画封装)

简介: Vue 中的动画封装功能:点击按钮,hello world 出现,再点击隐藏 Vue 中的动画封装 .

Vue 中的动画封装

功能:点击按钮,hello world 出现,再点击隐藏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue 中的动画封装</title>
    <script src = './vue.js'></script>
    <style>
     .v-enter,.v-leave-to{
      opacity:0;
     }
     .v-enter-active,.v-leave-active{
      transition: opacity 1s;
     }
   </style>
</head>
<body>
    <div id ='root'>
      <transition>
        <div v-show="show" >
        hello world
        </div>
      </transition>
      <button @click="handleBtnClick">toggle</button>
    </div>

    <script>
   
  var vm = new Vue({
        el:"#root",
        data:{
            show:false
        },
        methods:{
            handleBtnClick:function(){
             this.show = !this.show   
                }
            }
        })
    
        
  
    </script>   
</body>
</html>

输出:点击--出现--隐藏

                  

封装这个动画功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue 中的动画封装</title>
    <script src = './vue.js'></script>
    <style>
     .v-enter,.v-leave-to{
      opacity:0;
     }
     .v-enter-active,.v-leave-active{   
      transition: opacity 1s;
     }
   </style>
</head>
<body>
    <div id ='root'>
      
     <fade  :show="show"> //等于父组件的变量  
        <div>   
        hello world
        </div>
     </fade>
      <button @click="handleBtnClick">toggle</button>
    </div>

    <script>
    Vue.component('fade',{
      props:['show'],
      template:`
        <transition>
            <slot v-if="show"> </slot>     //判断外部传来的DOM是否要被显示
        </transition>
        ` 
    })
    
  var vm = new Vue({
        el:"#root",
        data:{
            show:false
        },
        methods:{
            handleBtnClick:function(){
             this.show = !this.show   
                }
            }
        })
    
        
  
    </script>   
</body>
</html>

输出:点击--出现--隐藏

                  

 

封装的好处:不需再设置动画样式,直接输入内容就好

<body>
    <div id ='root'>
      
     <fade  :show="show"> 
        <div>   
        hello world
        </div>
     </fade>

     <fade  :show="show"> 
        <h1>   
        hello world
        </h1>
     </fade>
      <button @click="handleBtnClick">toggle</button>
    </div>

输出:

        

 

可以将 样式 也封装进去,只能使用 JS 动画实现(推荐)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue 中的动画封装</title>
    <script src = './vue.js'></script>
    <!-- <style>
     .v-enter,.v-leave-to{
      opacity:0;
     }
     .v-enter-active,.v-leave-active{
      transition: opacity 1s;
     }
       </style> -->
</head>
<body>
    <div id ='root'>
      
     <fade  :show="show"> 
        <div>   
        hello world
        </div>
     </fade>

     <fade  :show="show"> 
        <h1>   
        hello world
        </h1>
     </fade>
      <button @click="handleBtnClick">toggle</button>
    </div>

    <script>
    Vue.component('fade',{
      props:['show'],
      template:`
        <transition @before-enter="handleBeforeEnter"
        @enter="handleEnter"
        >
        <slot v-if="show"> </slot>    
        </transition>
        ` ,
        methods:{
          handleBeforeEnter:function(el){
              el.style.color = 'red'
          },
          handleEnter:function(el,done){
            setTimeout(() =>{
                el.style.color = 'green'
                done()
            },2000)
          }
        }
    })

  var vm = new Vue({
        el:"#root",
        data:{
            show:false
        },
        methods:{
            handleBtnClick:function(){
             this.show = !this.show   
                }
            }
        })
    
        
  
    </script>   
</body>
</html>

输出:点击---显示---2秒后变绿色(将样式都封装到 fade 组件里面,外部只需调用 fade 组件即可)

     

目录
相关文章
|
2天前
|
Web App开发 JavaScript 开发者
Vue工具和生态系统:什么是Vue DevTools?如何使用它?
Vue Devtools是Vue.js官方的浏览器扩展,用于简化应用调试和优化。可在Chrome和Firefox等浏览器上安装,集成到开发者工具中。安装步骤包括下载源码、npm安装、修改manifest.json并加载编译后的扩展。启用后,开发者能查看Vue组件树,检查属性,并在允许的情况下编辑data,提升开发效率。
5 0
|
3天前
|
JavaScript 测试技术
vue不同环境打包环境变量处理
vue不同环境打包环境变量处理
13 0
|
3天前
|
JavaScript
vue中高精度小数问题(加减乘除方法封装)处理
vue中高精度小数问题(加减乘除方法封装)处理
14 0
|
3天前
|
JavaScript
vue项目使用可选链操作符编译报错问题
vue项目使用可选链操作符编译报错问题
8 0
|
3天前
|
JavaScript
Vue项目启动报错处理
Vue项目启动报错处理
6 1
|
3天前
|
JavaScript 定位技术
vue项目开发笔记记录(二)
vue项目开发笔记记录
34 0
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
980 0
|
8天前
|
JavaScript 算法 Linux
【vue报错】error:0308010C:digital envelope routines::unsupported
【vue报错】error:0308010C:digital envelope routines::unsupported
34 3
|
3天前
|
JSON JavaScript API
vue项目开发笔记记录(一)
vue项目开发笔记记录
34 0
|
3天前
|
JavaScript
Vue-实现点击空白处隐藏某节点
Vue-实现点击空白处隐藏某节点
10 1