草庐IT

vue-动画基础-velocity

云高风轻 2023-09-30 原文

1.前言

之前在公司上班 ,或者接私活 整体上动画其实几乎某用到
最近看文档 又梳理了下,那就记下来吧


2. transition

vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具:
1 .在 CSS 过渡和动画中自动应用 class

  1. 可以配合使用第三方 CSS 动画库,如 Animate.css 案例
  2. 在过渡钩子函数中使用 JavaScript 直接操作 DOM
  3. 可以配合使用第三方 JavaScript 动画库,如 Velocity.js

3.Vue 提供了 transition 的封装组件

动画的 钩子 生命周期可以看文档解释非常清除 ,这里简单说几个点
v-enter-active 简单理解为 标签出现的动画
v-leave-active 标签离开的动画
上面2个里面 一般定义 动画的时长 延迟和 曲线函数 就是那个贝塞尔曲线
例如 {animation: moveOne 1s;}
{transition: all 2s;}
v-enter-to 进入过渡的结束状态 比如出现后位置在哪颜色等
v-leave-to 离开过渡的结束状态 比如最后消失的位置 在哪

注意

v 就是 transitionname属性对应的值
比如下面的案例 nameyzs 那么写 样式动画的时候 就用yzs代替 v

<template>
  <div>
    <button @click="show = !show">点击</button>
    <!-- 在vue中提供了一个transition组件,让哪部分执行过渡动画,则使用transition包裹起来 -->
    <transition name="yzs">
      <div :class="styA" v-show="show">vue动画</div>
    </transition>
  </div>
</template>

<script>
export default {
  data: function () {
    return {
      show: true,
      styA: "classA",
    };
  },
};
</script>

<style lang="less" scoped>
.classA {
  width: 200px;
  height: 200px;
  background-color: red;
  font-size: 50px;
  color: white;
  text-align: center;
  line-height: 200px;
}
/* 设置不同的进入和离开动画时的状态,设置了动画过渡时长 */
.yzs-enter-active,
.yzs-leave-active {
  transition: all 2s;
}
/*  .yzs-leave-to,.yzs-enter{
                width: 50px;
                height: 50px;
                opacity: 0.2;
                font-size: 16px;
                transform: translate(500px,300px);
            } */
/* 或者 */
.yzs-leave-to {
  width: 50px;
  height: 50px;
  opacity: 0.2;
  font-size: 16px;
  transform: translate(0px, 0px);
}
.yzs-enter {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  transform: translate(800px, 200px);
}
</style>

3.js动画

这里没有使用定时器 而是用了 requestAnimationFrame 这个api
js动画主要就是给vue自带的钩子 绑定上自己的 动画函数就行

<template>
  <div>
    <input type="checkbox" v-model="show" />

    <!-- transition还可以设置js动画,使用js设置动画时,需要监听transition组件的@leave事件,这个事件在元素需要做离场动画时调用。在事件绑定的函数中使用js进行动画 -->
    <transition name="js-ani" @leave="leaveAniStart" @enter="enterAniStart">
      <div id="box" v-show="show"></div>
    </transition>
  </div>
</template>

<script>
export default {
  data: function () {
    return {
      show: true,
    };
  },
  methods: {
    // transtion组件的动画时间函数有两个参数,第一个是要做动画的元素。第二个是动画结束时的回调函数,必须在动画结束时调用。
    leaveAniStart(el, callback) {
      var opacity = 1;
      function ani() {
        opacity -= 0.02;
        el.style.opacity = opacity;
        if (opacity <= 0) {
          callback();
        } else {
          requestAnimationFrame(ani);
        }
      }
      requestAnimationFrame(ani);
    },
    enterAniStart(el, callback) {
      var opacity = 0;
      function ani() {
        opacity += 0.02;
        el.style.opacity = opacity;
        if (opacity >= 1) {
          callback();
        } else {
          requestAnimationFrame(ani);
        }
      }
      requestAnimationFrame(ani);
    },
  },
};
</script>

<style lang="less" scoped>
#box {
  width: 100px;
  height: 100px;
  background-color: red;
}
</style>


4.Velocity

4.1简介

Velocity 是一个简单易用、高性能、功能丰富的轻量级JS动画库。它能和 jQuery完美协作,并和$.animate()有相同的API, 但它不依赖jQuery,可单独使用。Velocity不仅包含了$.animate()的全部功能, 还拥有:颜色动画、转换动画(transforms)、循环、 缓动、SVG 动画、和 滚动动画 等特色功能。

它比 $.animate()更快更流畅,性能甚至高于CSS3 animation, 是 jQueryCSS3 transition的最佳组合,它支持所有现代浏览器,最低可兼容到IE8Android 2.3


4.2 引入方式 1

直接脚本引入

<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script>

4.3 脚手架项目

npm安装 注意 安装这个velocity-animate

npm install velocity-animate -S

哪个组件使用哪个组件可以引入 ,
也可以作为全局引入

import Velocity from "velocity-animate";

4.4 使用方式都一样

   <transition
      v-on:before-enter="beforeEnter"
      v-on:enter="enter"
      v-on:leave="leave"
    >
      <div id="box" v-show="showView"></div>
    </transition>

钩子

 methods: {
   beforeEnter (el) {
      el.style.opacity = 0
    },
    enter (el, done) {
      Velocity(el, { opacity: 1}, { duration: 3000,complete:done })
    },
    leave (el, done) {
      Velocity(el, { opacity: 0}, { duration: 3000,complete:done })
    }
}

比原生JS简单方便多了,可以多用用哦


5.列表动画

列表动画我觉得官网写的也挺好的 建议看看
注意key值的写法 不要 用索引.因为索引永远不会变,不管你是插入,还是删除,第一个位置永远是0,第二个永远是1,监听不到key的变化,自然也就无法做动画,其实就是底层 diff虚拟 DOM触发不了

<template>
<!--  这个列表动画 官网写的挺好的 -->
  <div>
    <button @click="addClick">添加数字</button>
    <div>
      <!-- 对于列表的添加删除动画,必须使用transition-group标签 -->
      <transition-group name="list" tag="ul">
        <!-- 列表项参与动画时,必须有一个唯一的key属性
  这里不建议使用 i ,因为用i作为,key的话,这个不会变化,
i是索引 不管怎么插入第一个位置索引永远是0,第二个位置索引永远是1,监听不到改变,不会进行动画
 -->
        <li v-for="(n, i) in arr" :key="n">{{ n }}</li>
      </transition-group>
    </div>
  </div>
</template>

<script>
export default {
  data: function () {
    return {
      arr: [1, 2, 3],
      max: 4,
    };
  },
  methods: {
    addClick() {
      var num = this.max++;
      var index = Math.floor(Math.random() * (this.arr.length + 1));
      this.arr.splice(index, 0, num);
    },
  },
};
</script>

<style lang="less" scoped>
li {
  background-color: orange;
  /* 如果列表中添加新元素时,其他元素“让位置”时也带动画,那么列表项元素必须设置transition过度,而且不能是inline元素 */
  transition: all 0.7s;
  width: 100px;
}

.list-enter {
  transform: translate(-100%, 0);
}

.list-enter-active {
  transition: all 0.7s;
}

.list-enter-to {
  transform: translate(0, 0);
}
</style>

参考资料

vue-动画
Velocity


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉

有关vue-动画基础-velocity的更多相关文章

  1. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  6. 【网络】-- 网络基础 - 2

    (本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。    如:有三个人,每个人做的不同的事物,但是是需要协作的完成。    而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据

  7. LVGL V8动画 - 2

    动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim

  8. (附源码)vue3.0+.NET6实现聊天室(实时聊天SignalR) - 2

    参考文章搭建文章gitte源码在线体验可以注册两个号来测试演示图:一.整体介绍  介绍SignalR一种通讯模型Hub(中心模型,或者叫集线器模型),调用这个模型写好的方法,去发送消息。  内容有:    ①:Hub模型的方法介绍    ②:服务器端代码介绍    ③:前端vue3安装并调用后端方法    ④:聊天室样例整体流程:1、进入网站->调用连接SignalR的方法2、与好友发送消息->调用SignalR的自定义方法 前端通过,signalR内置方法.invoke()  去请求接口3、监听接受方法(渲染消息)通过new signalR.HubConnectionBuilder().on

  9. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  10. c++基础-运算符 - 2

    目录1关系运算符2运算符优先级3关系表达式的书写代码实例:下面是面试中可能遇到的问题:1关系运算符C++中有6个关系运算符,用于比较两个值的大小关系,它们分别是:运算符描述==等于!=不等于小于>大于小于等于>=大于等于这些运算符返回一个布尔值,即true或false。例如,当x等于y时,x==y的结果为true,否则结果为false。2运算符优先级在C++中,关系运算符的优先级高于赋值运算符,但低于算术运算符。以下是关系运算符的优先级,从高到低排列:运算符描述>,,>=,关系运算符==,!=相等性运算符&&逻辑与`如果在表达式中有多个运算符,则按照优先级顺序依次进行运算。3关系表达式的书写在

随机推荐