初识 Vue(25)---( Vue 中的 JS 动画与 Velocity.js 的结合)

简介: Vue 中的 JS 动画与 Velocity.js 的结合通过 JS 钩子添加动画(入场) Vue 中的 JS 动画与 Velocity.

Vue 中的 JS 动画与 Velocity.js 的结合

通过 JS 钩子添加动画(入场)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> Vue 中的 JS 动画与 Velocity.js 的结合</title>
    <script src = './vue.js'></script>
</head>
<body>
    <div id ='root'>
      <transition name="fade" @before-enter="handleBeforeEnter">
        <div v-show ="show">Hello World</div>
      </transition>
      <button @click="handleClick">toggle</button>
    </div>

    <script>

       var vm = new Vue({
        el:'#root',
        data:{
            show:true
        },
        methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(){
                console.log('beforeEnter')
            }
        }
       })
    </script>   
</body>
</html>

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

          

绑定事件

 <transition name="fade" @before-enter="handleBeforeEnter">

定义事件

methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(){
                console.log('beforeEnter')
            }
        }

添加动画钩子(@before-enter="handleBeforeEnter"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> Vue 中的 JS 动画与 Velocity.js 的结合</title>
    <script src = './vue.js'></script>
</head>
<body>
    <div id ='root'>
      <transition name="fade" @before-enter="handleBeforeEnter">
        <div v-show ="show">Hello World</div>
      </transition>
      <button @click="handleClick">toggle</button>
    </div>

    <script>

       var vm = new Vue({
        el:'#root',
        data:{
            show:true
        },
        methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(el){
                el.style.color = 'red'
            }
        }
       })
    </script>   
</body>
</html>

输出:点击---隐藏---点击---出现(红色)

          

重新定义事件

  methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(el){
                el.style.color = 'red'
            }
        }

添加动画钩子(@enter="handleEnter"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> Vue 中的 JS 动画与 Velocity.js 的结合</title>
    <script src = './vue.js'></script>
</head>
<body>
    <div id ='root'>
      <transition name="fade" 
      @before-enter="handleBeforeEnter"
      @enter="handleEnter"
      >
        <div v-show ="show">Hello World</div>
      </transition>
      <button @click="handleClick">toggle</button>
    </div>

    <script>

       var vm = new Vue({
        el:'#root',
        data:{
            show:true
        },
        methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(el){
                el.style.color = 'red'
            },
            handleEnter:function(el,done){
                setTimeout(()=>{
                   el.style.color = 'green'
                    done()
                },2000)
            }
        }
       })
    </script>   
</body>
</html>

输出:点击---隐藏---点击---出现(红色)--2秒后绿色(通过JS实现动画效果)

            

重新定义事件(done():手动告诉 vue ,回调函数已经执行完毕)

methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(el){
                el.style.color = 'red'
            },
            handleEnter:function(el,done){
                setTimeout(()=>{
                   el.style.color = 'green'
                   done()
                },2000)
            }
        }

添加动画钩子(@enter="handleEnter"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> Vue 中的 JS 动画与 Velocity.js 的结合</title>
    <script src = './vue.js'></script>
</head>
<body>
    <div id ='root'>
      <transition name="fade" 
      @before-enter="handleBeforeEnter"
      @enter="handleEnter"
      @after-enter="handleAfterEnter"
      >
        <div v-show ="show">Hello World</div>
      </transition>
      <button @click="handleClick">toggle</button>
    </div>

    <script>

       var vm = new Vue({
        el:'#root',
        data:{
            show:true
        },
        methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(el){
                el.style.color = 'red'
            },
            handleEnter:function(el,done){
                setTimeout(()=>{
                   el.style.color = 'green'
                   
                },2000)
                    setTimeout(()=> {
                        done()
                    },4000)
            },
            handleAfterEnter:function(el){
                el.style.color = 'yellow'
            }
        }
       })
    </script>   
</body>
</html>

输出:点击---隐藏---点击---出现(红色)--2秒后绿色--再2秒黄色(通过JS实现动画效果)

              

重新定义事件(给done()添加定时器)

methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(el){
                el.style.color = 'red'
            },
            handleEnter:function(el,done){
                setTimeout(()=>{
                   el.style.color = 'green'
                   
                },2000)
                    setTimeout(()=> {
                        done()
                    },4000)
            },
            handleAfterEnter:function(el){
                el.style.color = 'yellow'
            }
        }

总结:入场动画钩子:@before-enter="handleBeforeEnter" /  @enter="handleEnter" /  @after-enter="handleAfterEnter"

出场动画钩子:@before-leave="handleBeforeLeave" /  @enter="handleLeave" /  @after-leave="handleAfterLeave"

与 Velocity.js 结合

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> Vue 中的 JS 动画与 Velocity.js 的结合</title>
    <script src = './vue.js'></script>
    <script src = './velocity.js'></script>
</head>
<body>
    <div id ='root'>
      <transition name="fade" 
      @before-enter="handleBeforeEnter"
      @enter="handleEnter"
      @after-enter="handleAfterEnter"
      >
        <div v-show ="show">Hello World</div>
      </transition>
      <button @click="handleClick">toggle</button>
    </div>

    <script>

       var vm = new Vue({
        el:'#root',
        data:{
            show:true
        },
        methods:{
            handleClick:function(){
                this.show = !this.show

            },
            handleBeforeEnter:function(el){
                el.style.opacity = 0;
            },
            handleEnter:function(el,done){
                Velocity(el,{opacity:1},
                    {duration:1000,
                     complete:done
                    })
            },
            handleAfterEnter:function(el){
               console.log("动画结束") 
            }
        }
       })
    </script>   
</body>
</html>

输出:点击---隐藏---逐渐出现(1秒)--执行“动画结束”

          

目录
相关文章
|
23天前
|
前端开发 JavaScript UED
使用JavaScript实现动画效果
【4月更文挑战第21天】使用JavaScript实现动画效果
28 10
|
1月前
|
存储 开发框架 JavaScript
uniapp、vue、小程序、js图片转base64 示例代码
uniapp、vue、小程序、js图片转base64 示例代码
45 0
|
2月前
|
缓存 编解码 JavaScript
在JavaScript小游戏开发中,如何优化游戏性能,比如减少重绘、提高动画流畅度?
提升JavaScript游戏性能的关键点包括:使用requestAnimationFrame优化动画流畅度;减少DOM操作,利用DocumentFragment或虚拟DOM;使用Canvas/WebGL高效渲染;优化图像资源,压缩图片和使用雪碧图;分层渲染与视口裁剪减少无效绘制;借助Web Workers进行后台计算;缓存计算结果;合理添加事件监听器并采用事件委托;定期进行性能分析以找到并解决瓶颈。不断测试与调整是优化的关键。
27 4
|
14天前
|
JavaScript 前端开发 UED
【JavaScript技术专栏】使用JavaScript实现拖放和动画效果
【4月更文挑战第30天】本文介绍了如何使用JavaScript实现拖放功能和基本动画效果。拖放功能通过监听mousedown、mousemove和mouseup事件,记录元素初始位置并更新其坐标实现。动画效果则利用requestAnimationFrame函数持续改变元素位置,创建平滑移动效果。示例代码包括HTML结构和对应的JavaScript实现。
|
19天前
|
存储 JavaScript
报错permission.js:41 [Vue warn]: Property “showClose“ must be accessed with “$data.showClose“ because
报错permission.js:41 [Vue warn]: Property “showClose“ must be accessed with “$data.showClose“ because
|
20天前
|
JavaScript 前端开发
< elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >
在 Vue + elementUi 开发中,遇到这么一个需求,要实现公告轮播的效果。说实话,一开始是打算通过Javascript去获取并修改对应元素来控制轮播的,但是发现这样子代码比较多,而且性能不是很好。然后…聪明的小温想到了,能不能通过vue的动画过渡,实现公告的滚动效果呢!一不做二不休,直接上手,果然是可以实现的!接下来,简单阐述下,开发中使用方法!
|
20天前
|
JavaScript 前端开发 容器
< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>
Vue 的 `Transition` 和 `TransitionGroup` 是用于状态变化过渡和动画的组件。`Transition` 适用于单一元素或组件的进入和离开动画,而 `TransitionGroup` 用于 v-for 列表元素的增删改动画,支持 CSS 过渡和 JS 钩子。
< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>
|
21天前
|
前端开发 JavaScript 容器
JavaScript、CSS像素动画特效代码
此示例创建一个带有像素粒子的容器,每隔300毫秒就会动态添加一个新的像素粒子,然后通过CSS的关键帧动画(`@keyframes`)使它们产生上升和逐渐消失的动画效果。你可以根据需要修改像素粒子的颜色、大小、动画效果和创建速度。
14 0
|
21天前
|
JavaScript
Vue与原生JS中方法调用
Vue与原生JS中方法调用
8 0
|
22天前
|
JavaScript 前端开发 UED
动画效果:给 Vue 应用添加过渡和动画
【4月更文挑战第22天】Vue 框架提供强大的过渡和动画功能,增强用户体验,创建流畅的用户界面。通过CSS动画、设置过渡属性和自定义过渡,开发者能实现多样化效果。同时,结合组件状态、关注性能并测试优化,确保在不同设备上运行良好,打造引人入胜的应用交互。