zoukankan      html  css  js  c++  java
  • Velocity.js的使用

    前面的话

      Velocity是一款优秀的JS动画库,完全可以作为jQuery的animate的替代品。需要动画功能时,使用Velocity是一个好选择。本文将详细介绍Velocity.js的使用

    概述

      Velocity是一个简单易用、高性能、功能丰富的轻量级JS动画库。它和jQuery的animate()有相同的API, 但它不依赖 jQuery,可单独使用。Velocity不仅包含了$.animate()的全部功能,还拥有:颜色动画、转换动画(transforms)、循环、缓动、SVG动画和滚动动画等特色功能。它比$.animate()更快更流畅,性能甚至高于CSS3 animation,是jQuery和CSS3 transition的最佳组合,它支持所有现代浏览器,最低可兼容到IE8和Android 2.3

    【下载】

      可以通过官网直接下载Velocity.js,下载地址

      也可以使用npm安装

    npm install velocity-animate

    基本用法

      当使用jQuery时,Velocity和jQuery的animate()用法类似

    复制代码
    $("#test").velocity({
        left: "200px"
    }, {
        duration: 450,
        delay: 300
    });
    复制代码

      不使用jQuery时,写法如下

    复制代码
      var oBox = document.getElementById('test');
      Velocity(oBox,{
          left: "200px"
      }, {
          duration: 450,
          delay: 300
      }); 
    复制代码

      下面是一个实例

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    reset.onclick = function(){history.go();}
    btn.onclick = function(){
      var oBox = document.getElementById('test');
      Velocity(oBox,{
          left: "200px"
      }, {
          duration: 450,
          delay: 300
      }); 
    }
    </script> 
    复制代码

    参数设置

      Velocity 接收一组 css 属性键值对 (css map) 作为它的第一个参数,该参数作为动画效果的最终属性。第二个参数是可选参数 为动画的额外配置项。下面为参数的写法:

    复制代码
    $element.velocity({
         "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         // 移动端硬件加速(默认开启)
    });
    复制代码

    【单一对象参数写法】

      Velocity 也支持 single-argument 的语法

    复制代码
    $element.velocity({
        properties: { opacity: 1 },
        options: { duration: 500 }
    });
    
    // 或者:
    $element.velocity({
        p: { opacity: 1 }, // 可以将 properties 简写成 p
        o: { duration: 500 }
    });
    复制代码

    【逗号分割的参数写法】

    $element.velocity({ top: 50 }, 1000);
    $element.velocity({ top: 50 }, 1000, "swing");
    $element.velocity({ top: 50 }, "swing");
    $element.velocity({ top: 50 }, 1000, function() { alert("Hi"); });

    【单位】

      如果不写属性值的单位, Velocity 会将像素(px)作为默认单位

    复制代码
    // 等同 padding: 1px
    $element.velocity({ padding: 1 });
    
    // 等同 padding-left: 1px, padding-right: 1px
    $element.velocity({
        paddingLeft: 1,
        paddingRight: 1
    });
    
    // 不能这样写!因为这样相当于为 padding 赋了多个值
    $element.velocity({ padding: "1 1 1 1" }); // error
    复制代码

      Velocity 在 1.2.0+ 版本里增加了对 "px, em, rem, %, deg, vw/vh" 这些单位的支持。如果不填写属性单位,默认单位还是"px",但 "deg" 用于 rotateZ 属性时可以省略不写

    【计算属性】

      Velocity 还支持动态计算属性值,包括 "+, -, *, /",还可以设置元素在动画执行前的初始值

      [注意]"rem" 只支持 IE9+,"vh/vw" 只支持 IE9+ 和 Android 4.4+ 

    复制代码
    $element.velocity({
        top: 50,                // 等同于 "50px"
        left: "50%",
         "+=5rem",        // 每次在当前值上叠加 5rem
        height: "*=2"           // 每次在当前值上叠乘 2
        color: ["#888", "#000"] // 每次动画执行前,color 的初始值都为"#000"(从"#000"过渡成"#888")
    });
    复制代码

    【链式动画】

      当一个元素连续应用多个velocity()时,动画将以队列的方式执行

    $element
        /* 先执行宽度变为75px的动画 */
        .velocity({  75 })
        /* 等前面的宽度动画结束后,再执行高度变为0的动画 */
        .velocity({ height: 0 });

      下面是一个例子

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;150px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    reset.onclick = function(){history.go();}
    btn.onclick = function(){
      $('#test').velocity({left:200}, {duration:500,complete:function(el){
        el[0].style.backgroundColor = 'lightblue';
        el[0].innerHTML = '小火柴的蓝色理想';
      }}).velocity({300})
    }
    </script> 
    复制代码

    配置项

      Velocity 提供了丰富的可选配置项,可以更好的控制动画,也可以利用这些配置做出炫酷复杂的动画特效

    【执行时间】

      Velocity 的动画执行时间以毫秒为单位,并支持 jQuery 中的动画速度关键字: "slow","normal","fast"

    $element.velocity({ opacity: 1 }, { duration: 1000 });
    
    // 支持 jQuery 中的动画速度关键字:
    $element.velocity({ opacity: 1 }, { duration: "slow" });

    【easing缓动效果】

      Velocity默认包含5种缓动效果

      1、jQuery UI的缓动关键字

    复制代码
    "linear"
    "swing"
    "spring"
    "easeInSine"
    "easeOutSine"
    "easeInOutSine"
    "easeInQuad"
    "easeOutQuad"
    "easeInOutQuad"
    "easeInCubic"
    "easeOutCubic"
    "easeInOutCubic"
    "easeInQuart"
    "easeOutQuart"
    "easeInOutQuart"
    "easeInQuint"
    "easeOutQuint"
    "easeInOutQuint"
    "easeInExpo"
    "easeOutExpo"
    "easeInOutExpo"
    "easeInCirc"
    "easeOutCirc"
    "easeInOutCirc"
    复制代码

      2、CSS3缓动关键字

    "ease"
    "ease-in"
    "ease-out"
    "ease-in-out"

      3、CSS3 贝塞尔曲线

    [ 0.17, 0.67, 0.83, 0.67 ]

      4、弹簧物理缓动(spring physics)

       以2位数组的形式 [ tension, friction ],tension最大值为500,friction 最大值为20

      5、步骤缓动(step easings)

      以1位数组的形式 使动画通过指定的步骤过渡到结束值

    /* 标准写法 */
    $element.velocity({  50 }, { easing: "easeInSine" });
    
    /* 或 */
    $element.velocity({  50 }, "easeInSine");
    复制代码
    /* jQuery UI easings */
    $element.velocity({  50 }, "easeInSine");
    
    /* CSS3 easings */
    $element.velocity({  50 }, "ease-in");
    
    /* 贝塞尔曲线 */
    $element.velocity({  50 }, [ 0.17, 0.67, 0.83, 0.67 ]);
    
    /* 弹簧物理 */
    $element.velocity({  50 }, [ 250, 15 ]);
    
    /* step easing */
    $element.velocity({  50 }, [ 8 ]);
    复制代码

      缓动可应用于单个属性

    复制代码
    $element.velocity({
        borderBottomWidth: [ "2px", "spring" ], // border-bottom 使用 "spring"
         [ "100px", [ 250, 15 ] ],        // width 使用 spring physics
        height: "100px"
    }, {
        easing: "easeInSine" // 默认所有属性使用 "easeInSine"
    });
    复制代码

      可以通过函数的形式注册自定义的缓动效果,函数将被扩展到$.Velocity.Easings对象上

    复制代码
    // p:动画完成的百分比(十进制值)
    // opts:传递到触发 .velocity() 调用的选项
    // tweenDelta:补间
    $.Velocity.Easings.myCustomEasing = function (p, opts, tweenDelta) {
        return 0.5 - Math.cos( p * Math.PI ) / 2;
    };
    复制代码

     【动画队列】

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

    复制代码
    // 执行宽度变为"50px"的动画
    $element.velocity({  "120px" }, { duration: 3000 });
    
    setTimeout(function() {
        /* 1.5秒后 开始并行执行高度变为"50px"的新动画 */
        $element.velocity({ height: "120px" }, { duration: 1500, queue: false });
    }, 1500);
    复制代码

      下面是一个例子

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      // 执行宽度变为"50px"的动画
      $("#test").velocity({  "200px" }, { duration: 3000 });  
      setTimeout(function() {
        /* 1.5秒后 开始并行执行高度变为"50px"的新动画 */
        $("#test").velocity({ height: "200px" }, { duration: 1500, queue: false });
      }, 1500);  
    })
    </script> 
    复制代码

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

    复制代码
    // 自定义队列,这里并不会立即执行
    $("div")
      .velocity({ translateX: 75 }, { queue: "a" })
      .velocity({  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反向动画指令,不能和队列一起使用

    【回调函数】

    begin()

      begin为动画开始前的回调函数,但在循环模式下(设置loop选项时),该函数只会在第一次循环前执行一次

    $element.velocity({
        opacity: 0
    }, {
        begin: function(elements) { console.log(elements); }
    });

    complete()

      complete为动画结束时的回调函数,在无限循环模式下(设置loop: true) 该回调函数将不会执行,但是有规定次数的循环模式下(比如设置loop: 3) 该回调函数将只会在最后一次循环结束后执行一次

    $element.velocity({
        opacity: 0
    }, {
        complete: function(elements) { console.log(elements); }
    });
    复制代码
    $element.velocity({
        opacity: 0
    }, {
        // 动画循环执行3次
        loop: 3,
        // 回调函数将在第3次循环结束后 执行一次
        complete: function(elements) {
            alert("I am hungry!");
        }
    });
    复制代码

    progress()

      progress为动画执行过程中调用的函数, 有elements、complete、remaining、start、tweenValue5个参数

    elements:当前执行动画的元素,可以用$(elements)来获取
    complete:整个动画过程执行到百分之多少,该值是递增的,注意:该值为一个十进制数值并不带单位(%)
    remaining:整个动画过程还剩下多少毫秒,该值是递减的
    start:动画开始时的绝对时间 (Unix time)
    tweenValue:动画执行过程中 两个动画属性之间的补间值
    复制代码
    $element.velocity({
        opacity: 0,
        tween: 1000 // 可选的
    }, {
        duration: 2000,
        progress: function(elements, complete, remaining, start, tweenValue) {
            console.log((complete * 100) + "%");
            console.log(remaining + "ms remaining!");
            console.log("The current tween value is " + tweenValue)
        }
    });
    
    // 可以简写这些参数:
    $element.velocity({
        tween: [ 0, 1000 ]
    }, {
        easing: "spring",
        progress: function(elements, c, r, s, t) {
            console.log("The current tween value is " + t)
        }
    });
    复制代码

    【移动端加速】

      mobileHA可以设置是否开始移动端硬件加速, 默认值为true,也可以通过设置 mobileHA: false关闭硬件加速

    // 关闭移动端硬件加速
    $element.velocity(propertiesMap, { mobileHA: false });

    【Loop动画循环执行】

      设置loop为一个正整数,比如设置loop: 2,就可以让动画循环执行2次

    // 循环执行2次(注意:元素height值变化到10em 再从10em变化到初始值 是一次循环)
    $element.velocity({ height: "10em" }, { loop: 2 });

      如果设置loop: true,可以让动画无限循环执行

    $element.velocity({ height: "10em" }, { loop: true });

    【Delay动画延迟执行】

      和 jQuery 的$.delay()方法一样,动画将会延迟所设定的毫秒后执行

    // 动画将延迟1500毫秒后执行
    $element.velocity({ height: "+=10em" }, { delay: 1500 });

    【display 和 visibility】

      可以在动画执行结束后 动态设置元素的 css 属性display或visibility

    /* 动画结束后 元素 display 属性设为 "none" */
    $element.velocity({ opacity: 0 }, { display: "none" });
    
    /* 动画结束后 元素的 visibility 属性设为 hidden */
    $element.velocity({ opacity: 0 }, { visibility: "hidden" });

      display 或 visibility 的值可以设为 css 中规定的其他值,比如 display: "inline-block"

      [注意]当使用reverse方向动画指令时,display 和 visibility 选项都将被忽略。

    动画指令

      Velocity 中预定义了几个常用的快捷动画指令

    【fade】

      Fade对应为"fadeIn"(淡入) 和"fadeOut"(淡出) 两个动画指令, 和 jQuery 的$.fadeIn()和$.fadeOut()相似

      Fade 和 Slide 动画指令都会动态设置元素的display属性显示或隐藏。 默认情况下,当元素被显示,如果是块级元素(如<div>),就会被设置成display: block,如果是行级元素(如<span>),就会被设为display: inline。Velocity会根据元素的标签类型设置最适合的值

      如果在配置项中设置了display选项为某值时, 动画结束时该值会覆盖 Fade 和 Slide 所设置的display属性值

    // 元素会执行平滑淡入的效果
    // 当动画结束时 元素的 display 属性会被设置成 "table"
    $element.velocity("fadeIn", { display: "table" });

      下面是一个例子

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    var OnOff = true;
    $("#btn").click(function(){
      if(OnOff = !OnOff){
        $("#test").velocity("fadeIn"); 
      }else{
        $("#test").velocity("fadeOut"); 
      } 
    })
    </script> 
    复制代码

    【slide】 

      Slide 对应为:"slideUp"(收起) 和"slideDown"(展开)两个动画指令, 和 jQuery 的$.slideUp(),$.slideDown()方法相似,通过动态调整元素的height属性,让元素 "收起" 或 "下拉"

    // 元素会先"收起"隐藏,延迟500毫秒后 再"下拉"显示
    $element
        .velocity("slideUp", { duration: 1500 })
        .velocity("slideDown", { delay: 500, duration: 1500 });

      下面是一个例子

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    var OnOff = false;
    $("#btn").click(function(){
      if(OnOff = !OnOff){
        $("#test").velocity("slideUp"); 
      }else{
        $("#test").velocity("slideDown"); 
      } 
    })
    </script> 
    复制代码

    【scroll】 

      1、滚动浏览器内容到目标元素的位置

      "scroll"动画指令,比如常用的回顶动画就可以使用这个指令

    /* 回顶动画,滚动浏览器内容到 <body> 的顶部 */
    $("body").velocity("scroll", { duration: 500, easing: "easeOutQuart" });

      下面是一个例子

    复制代码
    <body style="height:2000px">
    <button id="btn" style="position:fixed;right:0;bottom:0">回到顶部</button>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#btn").click(function(){
      $(document.documentElement).velocity("scroll", { duration: 500, easing: "easeOutQuart" });
    })
    </script> 
    </body>
    复制代码

      2、滚动元素内容到目标位置

      当一个元素的内容部分溢出产生滚动条,可以使用"scroll"将内容滚动到指定的位置,container选项对应为该元素的选择器

    /* 让 $("#container") 元素的内容滚动到内部子元素 $("#element3") 所在的位置. */
    $("#element3").velocity("scroll", { container: $("#container") });
    复制代码
    <div id="box" style="height:100px;200px;overflow:auto">
      <p id="element1">1 element. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud.</p>
      <p id="element2">2 element. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud </p>
      <p id="element3">3 element. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud.</p>
      <p id="element4">4 element. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud.</p>
      <p id="element5">5 element. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud.</p>
      <p id="element6">6 element. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud </p> 
    </div>
    <button id="btn">到第四段</button>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#btn").click(function(){
      $("#element4").velocity("scroll", { container: $("#box"), easing: "easeOutQuart" });
    })
    </script> 
    复制代码

      3、 设置滚动相对偏移量

      可以设置相对偏移量,单位默认为px

    $element
        /* 滚动到相对 $element 向下偏移250px的地方 */
        .velocity("scroll", { duration: 750, offset: 250 })
        /* 再滚动到相对 $element 向上偏移50px的地方 */
        .velocity("scroll", { duration: 750, offset: -50 });

      另外,当滚动整个浏览器窗口时,如果目标元素为<html>, 可以关闭硬件加速,设置mobileHA: false来避免 iOS 中可能出现的页面闪动问题

    /* 滚动整个页面到一个任意值 */
    $("html").velocity("scroll", { offset: "750px", mobileHA: false });

    【stop】

      "stop"指令,可以使当前正在执行的动画立即停止,类似 jQuery 的$.stop()方法

    复制代码
    $element.velocity("stop"); // 停止正在执行的 $element 元素的动画
    $element.velocity("stop", "myQueue"); // 停止某自定义队列
    $element.velocity({ left: 100 });
    // 点击 $("#button"),立即停止当前正在执行的 left 动画
    // 并立即反向执行 left 动画 (right 方向运动)
    $("#button").on("click", function() {
        $element.velocity("stop").velocity("reverse");
    });
    复制代码

      设置stop: true, 可以停止并清空当前正在执行的整个动画队列

    复制代码
    $element
        .velocity({  100 }, 1000)
        .velocity({ height: 200 }, 1000);
    
    // 如果元素正在执行 width 动画,点击 $("#button") 将立即停止当前动画
    // 并移除和跳过将要执行的 height 动画队列
    $("#button").on("click", function() {
        $element.velocity("stop", true);
    });
    复制代码

    【finish】

      "finish"指令会停止当前正在执行的动画,并直接跳转到动画结束的状态(无过渡)

    【reverse】

      "reverse"指令使动画反向执行,就像让一部电影倒着播放。 Reverse 默认会继承之前动画的配置选项(比如duration,easing等), 但也可以重新设置

    $element
        .velocity({ left: 200 }, { duration: 500 })
        .velocity("reverse", { duration: 2000 });

      下面是一个例子

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      $("#test").velocity({left:200}).velocity("reverse"); 
    
    })
    </script> 
    复制代码

    特色动画

      Velocity 提供了一些特色动画功能

    【transform】

      Velocity 支持2D/3D变换动画, 比如translate, scale, rotate, skew等

    $element.velocity({
        translateX: "200px",
        rotateZ: "45deg"
    });

      以下列举了所有常用的 transform 相关可用属性:

    复制代码
    {
        /* translate */
        translateX: 20,     // 等同于"20px"
        translateY: "1.5em",
        translateZ: "20px", // IE10+
    
        /* scale */
        scale: 0.5,
        scaleX: 0.5,
        scaleY: 0.5,
    
        /* rotate */
        rotate: 45,       // 等同于"45deg"
        rotateX: "45deg", // IE10+
        rotateY: "45deg", // IE10+
        rotateZ: "45deg",
    
        /* skew */
        skewX: "30deg",
        skewY: "30deg",
    }
    复制代码

      [注意]浏览器支持:> IE9

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      $("#test").velocity({rotateZ: "45deg"}).velocity("reverse"); 
    })
    </script> 
    复制代码

    【colors】

      Velocity颜色动画支持的颜色属性有:color, backgroundColor, borderColor, outlineColor。 属性值支持:rgb, hsla, 十六进制颜色码,但不支持关键词 比如:"green"

    复制代码
    $element.velocity({
        backgroundColor: "#ff0000",
        /* 背景色 RGBA 中的 A 透明度到50%  */
        backgroundColorAlpha: 0.5,
        /* 字体颜色 RGB 中的 Red 到 50% (0.5 * 255) */
        colorRed: "50%",
        /* 字体颜色 RGB 中的 Blue 值叠加50 */
        colorBlue: "+=50",
        /* 字体颜色 RGBA 中的 A 透明度到85% */
        colorAlpha: 0.85
    });
    复制代码
    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      $("#test").velocity({backgroundColor: "#0f0"}).velocity("reverse"); 
    })
    </script> 
    复制代码

    【svg】

      Velocity 支持 SVG 元素动画,包含所有常用 SVG 属性, 例如:x, y, rx, fill, stroke-width, opacity 等

    复制代码
    $svgRectangle.velocity({
        /* 坐标动画 */
        x: 200,
        r: 25,
        /* 2D 变换动画 */
        translateX: "200px",
        /* 3D 变换动画(非IE浏览器) */
        translateZ: "200px",
        /* 颜色填充动画 "Fill" */
        fill: "#ff0000",
        strokeRed: 255,
        strokeGreen: 0,
        strokeBlue: 0,
        /* 一些标准的 CSS 属性动画 */
        opacity: 1,
         "50%"
    });
    复制代码

      [注意]浏览器支持:>= IE9 和 >= Android 3.0

    【Hook】

      Hook 可以设置多个CSS属性中的单独一个值,比如 "boxShadow", "clip"等,作用与 jQuery 的$.css()方法相似

    $.Velocity.hook($element, "translateX", "500px"); // 值必须写上单位
    $.Velocity.hook(elementNode, "textShadowBlur", "10px"); // 值必须写上单位

      还可以获取单个 CSS 属性的值

    $.Velocity.hook($element, "translateX"); // 获取元素的translateX值
    $.Velocity.hook(elementNode, "textShadowBlur");

    【promises】

      Velocity 可以使用 ES6 的 Promises 对象的语法方式

    复制代码
    /* 使用 Velocity 的公有方法,$element 为dom选择器 可以用jQuery的 或 原生js的 */
    $.Velocity.animate($element, { opacity: 0.5 })
        /* 一旦动画执行完成 执行下面.then()中的回调函数(可以写多个.then())*/
        .then(function(elements) { console.log("Resolved."); })
        /* 捕获错误后的回调函数 */
        .catch(function(error) { console.log("Rejected."); });
    复制代码

    【Mock】

      如果设置$.Velocity.mock = true; 会强制页面里所有的 Velocity 动画的duration和delay值为0ms,动画会直接跳转到结束状态,这个方法常用于代码调试

      也可以将$.Velocity.mock设置为一个整数,可以加快或减慢页面上所有的 Velocity 动画速度

    /* 页面里所有 Velocity 动画 将以10为系数减慢 */
    $.Velocity.mock = 10;

    【Utility Function】

      Velocity 的公有方法

    /* 标准的多参数语法 */
    var divs = document.getElementsByTagName("div");
    $.Velocity(divs, { opacity: 0 }, { duration: 1500 });

      另一种写法:

    复制代码
    // 可选的单参数语法(idea 来源于 CoffeeScript)
    // e:element - 元素,一个dom选择器
    // p: properties - 属性map { property1: value1, property2: value2, … }
    // o: options - 配置选项
    var divs = document.getElementsByTagName("div");
    $.Velocity({ e: divs, p: { opacity: 0 }, o: { duration: 1500 });
    复制代码

    高级用法

    【函数】

      属性值可通过传递一个函数来设置动画效果

    // 使 $element 的透明度随机到一个值 的动画,每次执行后 元素透明度都不同
    $element.velocity({
        opacity: function() { return Math.random() }
    });
    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      $("#test").velocity({opacity: function() {return Math.random()}});
    })
    </script> 
    复制代码

    【初始值】

      通常,在动画执行前,动画引擎会先查询 DOM 以确定元素的初始值, Velocity 可以让用户自定义元素初始值,这样可以避免 DOM 查询

    复制代码
    $element.velocity({
        /* translateX 初始值永远为0 动画结束值为500px */
        translateX: [ 500, 0 ],
        /* opacity 初始值永远为0 动画结束值为1 缓动效果为"easeInSine" */
        opacity: [ 0, "easeInSine", 1 ]
    });
    复制代码
    $element
        /* 对于这个链式动画,在每次动画开始前 元素的 translateX 初始值还是0 */
        .velocity({ translateX: [ 500, 0 ] })
        .velocity({ translateX: 1000 });

      下面是一个例子

    复制代码
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div id="test" style="height:100px;100px;background:pink;position:absolute;left:0;"></div>
    <script src="http://files.cnblogs.com/files/xiaohuochai/jquery-1.10.0.js"></script>
    <script src="http://files.cnblogs.com/files/xiaohuochai/velocity.min.js"></script>
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      $("#test").velocity({ left: [ 500, 100 ] }).velocity("reverse");
      })
    </script> 
    复制代码

    UI插件

      velocity.ui.js 是 velocity.js 的 动画插件,可以用它快速创建炫酷的动画特效,它依赖于velocity.js

      velocity.ui 有2个重要方法:$.Velocity.RegisterEffect()和 $.Velocity.RunSequence()

      前者将多个 Velocity 动画合并存储到一个自定义数组里,可以通过引用该数组的名称在项目中复用, 后者能改进嵌套的动画序列使得更易于管理

    【$.Velocity.RunSequence()】

      如果嵌套动画的嵌套层次很多时,会难以管理

    $element1.velocity({ translateX: 100 }, 1000, function() {
        $element2.velocity({ translateX: 200 }, 1000, function() {
            $element3.velocity({ translateX: 300 }, 1000);
        });
    });

      如何解决上面的问题?直接用$.Velocity.RunSequence()对上面代码进行重写:

    e:element - 表示元素
    p:properties - 属性集
    o:options - 配置选项
    复制代码
    // 将嵌套动画序列储存到一个数组里,很清晰的显示了它们的执行顺序
    var mySequence = [
        { e: $element1, p: { translateX: 100 }, o: { duration: 1000 } },
        { e: $element2, p: { translateX: 200 }, o: { duration: 1000 } },
        { e: $element3, p: { translateX: 300 }, o: { duration: 1000 } }
    ];
    
    // 调用这个自定义的序列名称 还可以在其他地方复用
    $.Velocity.RunSequence(mySequence);
    复制代码

    【内置特效】

      Velocity.ui.js 内置了很多常用的动画特效,分为 callout.* 和 transition.* 两类,下面是所有的特效名:

    复制代码
    callout.bounce
    callout.shake
    callout.flash
    callout.pulse
    callout.swing
    callout.tada
    transition.fadeIn
    transition.fadeOut
    transition.flipXIn
    transition.flipXOut
    transition.flipYIn
    transition.flipYOut
    transition.flipBounceXIn
    transition.flipBounceXOut
    transition.flipBounceYIn
    transition.flipBounceYOut
    transition.swoopIn
    transition.swoopOut
    transition.whirlIn
    transition.whirlOut
    transition.shrinkIn
    transition.shrinkOut
    transition.expandIn
    transition.expandOut
    transition.bounceIn
    transition.bounceUpIn
    transition.bounceUpOut
    transition.bounceDownIn
    transition.bounceDownOut
    transition.bounceLeftIn
    transition.bounceLeftOut
    transition.bounceRightIn
    transition.bounceRightOut
    transition.slideUpIn
    transition.slideUpOut
    transition.slideDownIn
    transition.slideDownOut
    transition.slideLeftIn
    transition.slideLeftOut
    transition.slideRightIn
    transition.slideRightOut
    transition.slideUpBigIn
    transition.slideUpBigOut
    transition.slideDownBigIn
    transition.slideDownBigOut
    transition.slideLeftBigIn
    transition.slideLeftBigOut
    transition.slideRightBigIn
    transition.slideRightBigOut
    transition.perspectiveUpIn
    transition.perspectiveUpOut
    transition.perspectiveDownIn
    transition.perspectiveDownOut
    transition.perspectiveLeftIn
    transition.perspectiveLeftOut
    transition.perspectiveRightIn
    transition.perspectiveRightOut
    复制代码

    【stagger, drag 和 backwards 选项】 

      velocity.ui 有stagger,drag,backwards 三个可选配置项

      [注意]这些选项只在调用内置动画特效时才起作用

    stagger

      中文译为"错开",当遍历一组元素时 (each), 设置 stagger 为一个毫秒数 (ms) 能让每个元素依次延迟该毫秒数执行动画,产生一种错开的运动节奏感

    // 默认情况下,三个元素会同时运动
    // 这里设置了 stagger 为 300 后,每个元素会依次延迟300ms执行动画
    $(".box-stagger").velocity("transition.slideLeftBigIn", { stagger: 300 });

      下面是一个例子

    复制代码
    <style>
    .box-stagger{ 100px;height: 100px;border:1px solid black;background:lightgreen;line-height: 100px;color:white;text-align: center;} 
    </style>
    
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div class="box-stagger">1</div>
    <div class="box-stagger">2</div>
    <div class="box-stagger">3</div>
    
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      $(".box-stagger").velocity("transition.slideLeftBigIn", { stagger: 300 });
    })
    </script> 
    复制代码

    drag

      遍历一组元素时 (each),当设置drag: true, 最后一个元素会产生一种类似缓冲的效果,但它和其他元素的动画的duration是一样的

    // 最后一个元素产生缓冲效果
    $(".box-drag").velocity("transition.slideLeftBigIn", { drag: true });

      下面是一个例子

    复制代码
    <style>
    .box-drag{ 100px;height: 100px;border:1px solid black;background:lightgreen;line-height: 100px;color:white;text-align: center;} 
    </style>
    
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div class="box-drag">1</div>
    <div class="box-drag">2</div>
    <div class="box-drag">3</div>
    
    <script>
    $("#reset").click(function(){
      history.go();
    })
    $("#btn").click(function(){
      $(".box-drag").velocity("transition.slideLeftBigIn", { drag: true });
    })
    </script> 
    
    复制代码

    backwards

      中文译为"向后的",这个选项通常和drag一起使用, 元素会从最后一个开始依次延迟执行动画

    $('.box-backwards').velocity('transition.slideLeftBigIn', {
        stagger: 300,
        backwards: true
    });

      下面是一个例子

    复制代码
    <style>
    .box-backwards{ 100px;height: 100px;border:1px solid black;background:lightgreen;line-height: 100px;color:white;text-align: center;} 
    </style>
    
    <button id="btn">开始运动</button>
    <button id="reset">还原</button>
    <div class="box-backwards">1</div>
    <div class="box-backwards">2</div>
    <div class="box-backwards">3</div>
    <script> $("#reset").click(function(){ history.go(); }) $("#btn").click(function(){ $('.box-backwards').velocity('transition.slideLeftBigIn', { stagger: 300, backwards: true }); }) </script>
    复制代码

    【 $.Velocity.RegisterEffect()】 

      $.Velocity.RegisterEffect()方法允许注册自定义动画特效,以便在项目中复用

    复制代码
    // name:动画特效名称 为字符串类型
    // defaultDuration:默认动画执行时间 单位为毫秒(ms)
    // calls:动画队列数组,property - 动画属性,durationPercentage - 当前动画所占总时间的百分比 (写成浮点数),option - 选项
    // reset:设置元素在动画开始时的初始值
    $.Velocity.RegisterEffect(name, {
        defaultDuration: duration,
        calls: [
            [ { property: value }, durationPercentage, { options } ],
            [ { property: value }, durationPercentage, { options } ]
        ],
        reset: { property: value, property: value }
    });
    复制代码

      下面是一个使用$.Velocity.RegisterEffect()的例子

    复制代码
    $.Velocity.RegisterEffect("callout.customPulse", {
        defaultDuration: 900,
        calls: [
            [ { scaleX: 1.5 }, 0.50 ], // 0.50 为 动画总时间的50%
            [ { scaleX: 1 }, 0.50 ]
        ]
    });
    
    // 调用
    $element.velocity("callout.customPulse");
    复制代码
    复制代码
    <div id="test" style="height: 100px; 100px;background:lightgreen;border-radius: 50%;"></div>
    <script>
    $.Velocity.RegisterEffect("callout.customPulse", {
        defaultDuration: 900,
        calls: [
            [ { scaleX: 1.5 }, 0.50 ],
            [ { scaleX: 1 }, 0.50 ]
        ]
    });
    $("#test").click(function(){
      $(this).velocity("callout.customPulse");
    })
    </script> 
    复制代码

      还可以使用 链式的写法 注册一系列自定义动画

    复制代码
    $.Velocity
        .RegisterEffect("transition.customFlipXIn", {
            defaultDuration: 700,
            calls: [
                [ { opacity: 1, rotateY: [ 0, -55 ] } ]
            ]
        });
        .RegisterEffect("transition.customFlipXOut", {
            defaultDuration: 700,
            calls: [
                [ { opacity: 0, rotateY: 55 } ]
            ],
            reset: { rotateY: 0 }
        });
    
    // 调用
    $element
        .velocity("transition.customFlipXIn")
        .velocity("transition.customFlipXOut", { delay: 1000, display: "none" });
    复制代码
  • 相关阅读:
    php 接口类与抽象类的实际作用
    php中的implements 使用详解
    swoole两种运行模式BASE和PROCESS的区别
    Java多线程总结
    Shell WordCount:一行shell命令统计固定格式单词词频
    收藏大数据相关写的比较好的博客
    Hive-SQL查询连续活跃登陆的用户
    Mysql触发器
    Python json字符串和字典相互转换
    MySQL基础之实现累加值
  • 原文地址:https://www.cnblogs.com/shitaotao/p/7624636.html
Copyright © 2011-2022 走看看