Tween公式 以及四个参数

  Tween的主页在这里:http://createjs.com/tweenjs , 这里边还有挺多开源项目的;

  Tween公式 4个参数

t:current time(当前时间)

b:beginning value(初始值)

c: change in value(变化量)

d:duration(持续时间) return (目标点)

var Tween = {
    linear: function (t, b, c, d){  //匀速
        return c*t/d + b;
    },
    easeIn: function(t, b, c, d){  //加速曲线
        return c*(t/=d)*t + b;
    },
    easeOut: function(t, b, c, d){  //减速曲线
        return -c *(t/=d)*(t-2) + b;
    },
    easeBoth: function(t, b, c, d){  //加速减速曲线
        if ((t/=d/2) < 1) {
            return c/2*t*t + b;
        }
        return -c/2 * ((--t)*(t-2) - 1) + b;
    },
    easeInStrong: function(t, b, c, d){  //加加速曲线
        return c*(t/=d)*t*t*t + b;
    },
    easeOutStrong: function(t, b, c, d){  //减减速曲线
        return -c * ((t=t/d-1)*t*t*t - 1) + b;
    },
    easeBothStrong: function(t, b, c, d){  //加加速减减速曲线
        if ((t/=d/2) < 1) {
            return c/2*t*t*t*t + b;
        }
        return -c/2 * ((t-=2)*t*t*t - 2) + b;
    },
    elasticIn: function(t, b, c, d, a, p){  //正弦衰减曲线(弹动渐入)
        if (t === 0) {
            return b;
        }
        if ( (t /= d) == 1 ) {
            return b+c;
        }
        if (!p) {
            p=d*0.3;
        }
        if (!a || a < Math.abs(c)) {
            a = c;
            var s = p/4;
        } else {
            var s = p/(2*Math.PI) * Math.asin (c/a);
        }
        return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
    },
    elasticOut: function(t, b, c, d, a, p){    //正弦增强曲线(弹动渐出)
        if (t === 0) {
            return b;
        }
        if ( (t /= d) == 1 ) {
            return b+c;
        }
        if (!p) {
            p=d*0.3;
        }
        if (!a || a < Math.abs(c)) {
            a = c;
            var s = p / 4;
        } else {
            var s = p/(2*Math.PI) * Math.asin (c/a);
        }
        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
    },
    elasticBoth: function(t, b, c, d, a, p){
        if (t === 0) {
            return b;
        }
        if ( (t /= d/2) == 2 ) {
            return b+c;
        }
        if (!p) {
            p = d*(0.3*1.5);
        }
        if ( !a || a < Math.abs(c) ) {
            a = c;
            var s = p/4;
        }
        else {
            var s = p/(2*Math.PI) * Math.asin (c/a);
        }
        if (t < 1) {
            return - 0.5*(a*Math.pow(2,10*(t-=1)) *
                    Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
        }
        return a*Math.pow(2,-10*(t-=1)) *
                Math.sin( (t*d-s)*(2*Math.PI)/p )*0.5 + c + b;
    },
    backIn: function(t, b, c, d, s){     //回退加速(回退渐入)
        if (typeof s == ‘undefined‘) {
           s = 1.70158;
        }
        return c*(t/=d)*t*((s+1)*t - s) + b;
    },
    backOut: function(t, b, c, d, s){
        if (typeof s == ‘undefined‘) {
            s = 3.70158;  //回缩的距离
        }
        return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
    },
    backBoth: function(t, b, c, d, s){
        if (typeof s == ‘undefined‘) {
            s = 1.70158;
        }
        if ((t /= d/2 ) < 1) {
            return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
        }
        return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
    },
    bounceIn: function(t, b, c, d){    //弹球减振(弹球渐出)
        return c - Tween[‘bounceOut‘](d-t, 0, c, d) + b;
    },
    bounceOut: function(t, b, c, d){
        if ((t/=d) < (1/2.75)) {
            return c*(7.5625*t*t) + b;
        } else if (t < (2/2.75)) {
            return c*(7.5625*(t-=(1.5/2.75))*t + 0.75) + b;
        } else if (t < (2.5/2.75)) {
            return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b;
        }
        return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b;
    },
    bounceBoth: function(t, b, c, d){
        if (t < d/2) {
            return Tween[‘bounceIn‘](t*2, 0, c, d) * 0.5 + b;
        }
        return Tween[‘bounceOut‘](t*2-d, 0, c, d) * 0.5 + c*0.5 + b;
    }
}

  在平常使用jQuey或者写运动效果都是使用根据目标终点运动的库, 如果要用到和时间有关的运动咋办,  那么就可以根据miaov的完美运动框架改一改, 把计算速度的过程,使用Tween的方法替代:

<html>
<head>
    <title></title>//记得引用这个JS
    <script src="tween.js"></script>
    <style type="text/css">
        div{
            width:100px;
            height:100px;
            position:absolute;
            left:10px;
            top:100px;
            background:#f00;
        }
        div:hover{
            width:400px;
        }
    </style>
</head>
<body>
    <div id="div">

    </div>
    <script>
        window.onload = function() {
            move(eDiv, "left", "300",1000, "linear")
        }
        var getStyle = function(el, prop) {
            return window.getComputedStyle(el)[prop];
        }
        var move = function(el, prop, dest, duration , fx) {
            var start = new Date().getTime();
            var startValue = parseFloat(getStyle(el, prop));
            var changeValue = dest - startValue;

            var timer = setInterval(function() {
                //1:当前时间 new Date - start;
                //2:初始值;
                //3:变化量;
                //4:持续时间 duration;
                var value = Tween[fx](new Date-start, startValue, changeValue, duration);
                if(prop === "opacity") {
                    el.style[prop] = value;
                }else{
                    el.style[prop] = value + "px";
                }
                if(new Date()>=duration+start) {
                    clearInterval(timer);
                    if(prop === "opacity") {
                        el.style[prop] = dest;
                    }else{
                        el.style[prop] = dest + "px";
                    }
                }

            },30);
        };
        var eDiv = document.getElementById("div");

    </script>
</body>
</html>

  

时间: 2024-10-05 05:21:00

Tween公式 以及四个参数的相关文章

Tween公式

Tween公式 4个参数 t:current time(当前时间) b:beginning value(初始值) c: change in value(变化量) d:duration(持续时间) return (目标点) 1 var Tween = { 2 linear: function (t, b, c, d){ //匀速 3 return c*t/d + b; 4 }, 5 easeIn: function(t, b, c, d){ //加速曲线 6 return c*(t/=d)*t +

使用ASP.Net WebAPI构建REST服务(四)——参数绑定

默认绑定方式 WebAPI把参数分成了简单类型和复杂类型: 简单类型主要包括CLR的primitive types,(int.double.bool等),系统内置的几个strcut类型(TimeSpan.Guid等)以及string.对于简单类型的参数,默认从URI中获取. 复杂类型的数据也可以直接作为参数传入进来,系统使用media-type formatter进行解析后传给服务函数.对于复杂类型,默认从正文中获取, 例如,对于如下函数 HttpResponseMessage Put(int

Android里的AdapterView中OnItemClickListener监听器四个参数的含义

对Android开发中的Adapter接口的onItemClickListener监听器四个参数(arg)的理解: 代码:public void onItemClick(AdapterView<?> arg0, View view, int position,long arg3){} 假如有一个listview,该listview中含a,b,c,d这4个item. 如果你点了b这个item.如下: (1)public  void onItemClick (AdapterView<?>

canvas绘制二次贝塞尔曲线----演示二次贝塞尔四个参数的作用

canvas中绘制二次贝塞尔曲线的方法为ctx.quadraticCurveTo(x1,y1,x2,y2); 四个参数分别为两个控制点的坐标.开始点即当前canvas中目前的点,如果想从指定的点开始,需要使用ctx.moveTo(x,y)方法 演示效果如下图 上代码: html <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title

使用System.IO.Combine(string path1, string path2, string path3)四个参数的重载函数提示`System.IO.Path.Combine(string, string, string, string)&#39; is inaccessible due to its protection level

今天用Unity5.5.1开发提取Assets目录的模块,使用时采用System.IO.Path.Combine(string, string, string, string)函数进行路径生成 明明是公有函数,为何会报错,奇了怪了 有谁知道什么原因?欢迎交流 ....... ... 重新打开了一下 ,可以了.版本原因 使用System.IO.Combine(string path1, string path2, string path3)四个参数的重载函数提示`System.IO.Path.Co

MOS管应用概述(四):基本参数

mos管的基本参数,大家熟悉的必然是Ids电流,Ron导通电阻,Vgs的阈值电压,Cgs.Cgd.Cds这几项,然而在高速应用中,开关速度这个指标比较重要.<ignore_js_op> 上图四项指标,第一项是导通延时时间,第二项是上升时间,第三项是关闭延时时间,第四项是下降时间.定义如下图:<ignore_js_op> 在高速H桥应用中,MOS管内部的反向并联寄生二极管的响应速度指标Trr,也就是二极管的反向恢复时间这个指标很重要,否则容易炸机,下图为高速二极管.<ignor

07_Fiddler_post提交到主体的四种参数形式

post的请求相对于get请求多了个body部分,本篇就详细讲解下body部分参数的几种形式. 一.body数据类型 常见的post提交数据类型有四种: 1.第一种:application/json:这是最常见的json格式,也是非常友好的深受小伙伴喜欢的一种,如下 {"input1":"xxx","input2":"ooo","remember":false} 2.第二种:application/x-ww

hadoop(四):配置参数

hadoop参数配置,主要是配置 core-site.xml,hdfs-site.xml,mapred-site.xml 三个配置文件,core-site.xml是全局配置,hdfs-site.xml和mapred-site.xml分别是hdfs和mapred的局部配置,core-default.xml,hdfs-default.xml,mapred-default.xml 是集群的默认配置,HDP2.4 安装包中 hadoop 版本为2.7,分别可从下面的地址获取到默认的参数说明: core-

十四.带参数的方法

public class Customer { String[] names = new String[5]; public void addStudent(String name) { for (int i = 0; i < names.length; i++) { if (names[i] == null) { names[i] = name; break; } } } public boolean editName(String newname, String oldname) { boo