velocity.js学习记录

简介:

Velocity是一个动画引擎,与jQuery的$.animate()具有相同的API。它可以使用和不使用jQuery。它的速度非常快,它具有色彩动画,变换,循环,缓动,SVG支持和滚动功能。它是jQuery和CSS转换相结合的最佳选择。

引用:

1.
//有 jQuery的引用情况:先JQ 再VE
window.jQuery = window.$ = require("path/to/jquery-x.x.x.js");
require("path/to/velocity.js");
// ps: If you're using the UI pack, require it after Velocity.就是一套很优秀的动画预设插件
// (You don't need to assign it to a variable.您无需将其分配给变量)
require("path/to/velocity.ui.js");
/* Your app code here. */
$("body").velocity({ opacity: 0.5 });
2.
//没有 jQuery的引用情况
If you're using Velocity without jQuery, simply require Velocity as normal:
var Velocity = require("path/to/velocity.js");//需要变量
require("path/to/velocity.ui.js");//和上面一样
/* Your app code here. */
Velocity(document.body, { opacity: 0.5 });

简单说明

Velocity 接收一组 css 属性键值对 (css map) 作为它的第一个参数,该参数作为动画效果的最终属性。第二个参数是可选参数 为动画的额外配置项。下面为参数的写法:(说明:如果提供的最终属性包含字母,那么要将它们用半角引号括起来)

$element.velocity({
    width: "500px",        // 动画属性 宽度到 "500px" 的动画
    property2: value2      // 属性示例
}, {
    /* Velocity 动画配置项的默认值 */
    duration: 400,         // 动画执行时间
    easing: "swing",       // 缓动效果
    queue: "",             // 队列
    begin: undefined,      // 动画开始时的回调函数
    progress: undefined,   // 动画执行中的回调函数(该函数会随着动画执行被不断触发)
    complete: undefined,   // 动画结束时的回调函数
    display: undefined,    // 动画结束时设置元素的 css display 属性
    visibility: undefined, // 动画结束时设置元素的 css visibility 属性
    loop: false,           // 循环
    delay: false,          // 延迟
    mobileHA: true         // 移动端硬件加速(默认开启)
});
//【单一对象参数写法】
$element.velocity({
    properties: { opacity: 1 },
    options: { duration: 500 }
});
或者
$element.velocity({
    p: { opacity: 1 },// 可以将 properties 简写成 p
    o: { duration: 500 }
});

velocity接受多个参数。第一个参数是一个对象,用于将CSS属性映射到最终的期望数值上。例如:
//设置元素的width属性值变动至“500px”且其opacity属性值变动至1的动画。$element.velocity({ width:500px , opacity :1 }) ;
还有一种参数简写语法,那就是不将选项对象作为第二个参数传入,而是使用逗号分隔参数语法。这种写法需要列举出动画的持续时间、缓动形式和动画执行完毕后触发的一个回调函数。

【逗号分割的参数写法】
$element.velocity({ top: 50 }, 1000); 
$element.velocity({ top: 50 }, 1000, "swing");
$element.velocity({ top: 50 }, "swing");
$element.velocity({ top: 50 }, 1000, function() { alert("Hi"); });
  • 举个栗子:
<!DOCTYPE html>
<html lang="zh">

    <head>
        <meta charset="UTF-8" />
        <link rel="stylesheet" type="text/css" href="demo.css" />
        <title>velocity.js使用</title>
    </head>
   <body>
    <div id="demo"></div>
<br />
<button id="btn">运动</button>
    <script type="text/javascript" src="jquery.js" ></script>
    <script type="text/javascript" src="velocity.js" ></script>
    <script type="text/javascript" src="demo.js" ></script>
</body>
</html>
/*******js********/
let btn = document.getElementById('btn')
btn.onclick = function() {
//   不使用jquery的用法
Velocity(document.getElementById("demo"),{left: '300px'},3000,function() { alert("Hi");})
};
//使用jQuery的用法
$("#demo").velocity({ 
  opacity: "/=2",
  width: "*=2"
}, 2000);

支持px,em,rem,%,deg,vw【默认px】
*Velocity 还支持动态计算属性值,包括 "+, -, , /",还可以设置元素在动画执行前的初始值

链式操作

当一个元素链式调用多个velocity函数时,会自动形成队列(一个动画结束后一个动画接着执行)

let btn = document.getElementById('btn')
btn.onclick = function() {
//   不使用jquery的用法
$("#demo")
    /* Animate the width property. */
    .velocity({ width: 75 })
    /* Then, when finished, animate the height property. */
    .velocity({ height: 0 });
};

begin(开始)和complete(完成)

let btn = document.getElementById('btn')
btn.onclick = function() {
//   不使用jquery的用法
$("#demo").velocity(
  {width:'500px'},
  {
    duration:3000,
      begin:function(){
        alert("begin")
      },
    complete:function(){
      alert("complete")
    }
 }
)
};

动画队列

可以通过设置queue: false 强制并行执行一个新动画


let btn = document.getElementById('btn')
btn.onclick = function() {
//   不使用jquery的用法
$("#demo").velocity({width:'500px'},{duration:3000});
setTimeout(function(){
      /* 1.5秒后 开始并行执行高度变为"200px"的新动画 */
$("#demo").velocity({ height: "200px" }, { duration: 1500, queue: false });
},1500)
};

也可以自定义动画队列,但不会立即执行,需要通过dequeue()方法手动执行动画

// 自定义队列,这里并不会立即执行
$("div")
  .velocity({ translateX: 75 }, { queue: "a" })
  .velocity({ width: 50 }, { queue: "b" })
  .velocity({ translateY: 75 }, { queue: "a" })
  .velocity({ height: 0 }, { queue: "b" })

// 2秒后 执行队列"a"的动画
setTimeout(function() {
  $("div").dequeue("a");
}, 2000);

// 4秒后 执行队列"b"的动画
setTimeout(function() {
  $("div").dequeue("b");
}, 4000);

[注意]loop循环选项 和reverse反向动画指令,不能和队列一起使用

更多请参考:http://www.xgllseo.com/velocityjs/velocity/index.html
https://www.cnblogs.com/shitaotao/p/7624636.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。