vue进入可视区域执行动画、动效、添加样式类名等

本文介绍了如何使用Vue自定义指令(v-animate)实现在元素进入可视区域时添加类名,从而触发CSS动画。通过监听滚动事件,判断元素位置是否在视口中,动态添加和移除类名,结合CSS关键帧动画(bottomMoveTop),实现了标题从下往上缓缓出现的效果。此技术可用于网页动效设计,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举例:每个模块标题,进入可视区域后,标题从下往上缓缓出现

代码:

添加一个全局自定义指令

import Vue from 'vue'
//注册'v-animate'  当元素出现在可视范围时添加类名触发动效样式
Vue.directive('animate', {
    inserted: function (el, binding) {
      // 聚焦元素
      binding.addClass = () => {
        const { top } = el.getBoundingClientRect()
        const h = document.documentElement.clientHeight || document.body.clientHeight
        if (top < h) {
          if(el.className.indexOf(binding.value) == -1 ){
            // 初次还未绑定过,则新增类名(注意:下面单引号中间是一个空格!!!)
            el.className = binding.value+' '+el.className
          }
          if (binding.addClass) {
            window.removeEventListener('scroll', binding.addClass)
          }
        }
      }
      window.addEventListener('scroll', binding.addClass,true)
      binding.addClass()
    },
    unbind: function (el, binding) {
      if (binding.addClass) {
        window.removeEventListener('scroll', binding.addClass)
      }
    }
}) 

回到html中给需要添加动效的地方添加上 类名 

 <p class="title" v-animate="'queue-bottom'">我是需要动效的标题</p>

动画效果:

@keyframes bottomMoveTop{
  0%{
    opacity: 0;
    transform: translate3d(0, 50px, 0);
  }
  100% {
    opacity: 1;
    transform: none;
  }
}

.queue-bottom {
  animation: bottomMoveTop .6s cubic-bezier(.5,1,.89,1);
  animation-fill-mode: forwards;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值