JS同步和异步、回调函数、缓冲(Tween算法)

1、同步和异步

同步:只有一条路,

先把前面的执行了在执行后面的叫做同步,执行时线程不冲突

就是所谓的单线程

/* 同步 */
console.log(1);
console.log(2);
for(var i=0;i<30;i++){
    console.log('☆');
}
console.log(3);
​
/*
    输出结果
    1 
    2 
    ☆   30
    3
*/

同步

异步:有多条路可走,就是所谓的多线程

异步的语句:

setInterval

​ setTimeout

​ Ajax

​ Node.js

/* 异步 */
console.log(1);
console.log(2);
var timer = setInterval(function(){
    consloe.log('☆');
},20);
console.log(3);

异步

2、回调函数

回调函数 :

​ call ---每个函数都有

​ apply ---

var myJson = {
    'name':'Fyn',
    'age':18
    'sex':'男'
};
​
function show(a,b) {
    console.log(this.name);
    console.log(a+b);
}
show.call(myJson,1,2);//两种含义:1、执行函数 2、改变函数内this的指向
show.apply(myjson,[1,2]);//两种含义:1、执行函数 2、改变函数内this的指向

3、缓冲

缓冲:一个盒子用3s从100--700,不一定是匀速。英文:Tween

是别人的一个算法,拿过来用就行了。

官网网址:https://www.tweenmax.com.cn/ease/

其他算法网址:http://www.cnblogs.com/cloudgamer/archive/2009/01/06/tween.html

/* 
    第一个参数 t 表示当前帧编号
    第二个参数 b 表示起始位置
    第三个参数 c 表示变化量
    第四个参数 d 表示总帧数
    
    最终会返回帧数编号的位置,这样的话,升级版的运动框架就不需要步长了,直接要返回的帧数编号位置就行了
*/
​
function linear(t,b,c,d){
    return c * t / d + b;
}
​
function easeIn(t,b,c,d){
    return c * (t /= d) + b;
}
​
function easeOut(t,b,c,d){
    return -c * (t/=d)*(t-2) + b;
}

Tween算法

var Tween = {
    Linear: function(t,b,c,d){ return c*t/d + b; },
    Quad: {
        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;
        },
        easeInOut: function(t,b,c,d){
            if ((t/=d/2) < 1) return c/2*t*t + b;
            return -c/2 * ((--t)*(t-2) - 1) + b;
        }
    },
    Cubic: {
        easeIn: function(t,b,c,d){
            return c*(t/=d)*t*t + b;
        },
        easeOut: function(t,b,c,d){
            return c*((t=t/d-1)*t*t + 1) + b;
        },
        easeInOut: function(t,b,c,d){
            if ((t/=d/2) < 1) return c/2*t*t*t + b;
            return c/2*((t-=2)*t*t + 2) + b;
        }
    },
    Quart: {
        easeIn: function(t,b,c,d){
            return c*(t/=d)*t*t*t + b;
        },
        easeOut: function(t,b,c,d){
            return -c * ((t=t/d-1)*t*t*t - 1) + b;
        },
        easeInOut: 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;
        }
    },
    Quint: {
        easeIn: function(t,b,c,d){
            return c*(t/=d)*t*t*t*t + b;
        },
        easeOut: function(t,b,c,d){
            return c*((t=t/d-1)*t*t*t*t + 1) + b;
        },
        easeInOut: function(t,b,c,d){
            if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
            return c/2*((t-=2)*t*t*t*t + 2) + b;
        }
    },
    Sine: {
        easeIn: function(t,b,c,d){
            return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
        },
        easeOut: function(t,b,c,d){
            return c * Math.sin(t/d * (Math.PI/2)) + b;
        },
        easeInOut: function(t,b,c,d){
            return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
        }
    },
    Expo: {
        easeIn: function(t,b,c,d){
            return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
        },
        easeOut: function(t,b,c,d){
            return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
        },
        easeInOut: function(t,b,c,d){
            if (t==0) return b;
            if (t==d) return b+c;
            if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
            return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
        }
    },
    Circ: {
        easeIn: function(t,b,c,d){
            return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
        },
        easeOut: function(t,b,c,d){
            return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
        },
        easeInOut: function(t,b,c,d){
            if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
            return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
        }
    },
    Elastic: {
        easeIn: function(t,b,c,d,a,p){
            if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.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;
        },
        easeOut: function(t,b,c,d,a,p){
            if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.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);
        },
        easeInOut: function(t,b,c,d,a,p){
            if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.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 -.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 )*.5 + c + b;
        }
    },
    Back: {
        easeIn: function(t,b,c,d,s){
            if (s == undefined) s = 1.70158;
            return c*(t/=d)*t*((s+1)*t - s) + b;
        },
        easeOut: function(t,b,c,d,s){
            if (s == undefined) s = 1.70158;
            return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
        },
        easeInOut: function(t,b,c,d,s){
            if (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;
        }
    },
    Bounce: {
        easeIn: function(t,b,c,d){
            return c - Tween.Bounce.easeOut(d-t, 0, c, d) + b;
        },
        easeOut: 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 + .75) + b;
            } else if (t < (2.5/2.75)) {
                return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
            } else {
                return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
            }
        },
        easeInOut: function(t,b,c,d){
            if (t < d/2) return Tween.Bounce.easeIn(t*2, 0, c, d) * .5 + b;
            else return Tween.Bounce.easeOut(t*2-d, 0, c, d) * .5 + c*.5 + b;
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以回答你关于Unity中DOTween插件的问题。 首先,DOTween插件是用于制作Tween动画的工具,可以轻松地创建动画效果。下面是回答你的问题: 1. 设置参数 在使用DOTween插件创建Tween动画时,可以设置很多不同的参数,如持续时间、延迟时间、循环次数等。这些参数可以通过Tween对象的方法进行设置,例如: ```csharp //创建一个Tween对象 var tween = transform.DOMove(Vector3.zero, 1f); //设置Tween对象的参数 tween.SetDelay(0.5f); //设置延迟时间为0.5秒 tween.SetLoops(-1, LoopType.Yoyo); //设置无限循环,并且在每次循环结束时反转Tween对象的运动方向 ``` 2. Ease曲线 Ease曲线是用于控制Tween动画的运动方式,可以使Tween对象的运动变得更加平滑或者更加突然。DOTween插件提供了很多内置的Ease曲线,也可以自定义Ease曲线。在创建Tween对象时,可以通过传递Ease曲线的枚举值或者自定义的Ease曲线函数来设置Tween对象的Ease曲线,例如: ```csharp //使用Ease枚举值设置Tween对象的Ease曲线 var tween = transform.DOMoveX(5f, 1f).SetEase(Ease.InOutQuad); //设置Tween对象的Ease曲线为InOutQuad //使用自定义Ease曲线函数设置Tween对象的Ease曲线 var tween = transform.DOMoveX(5f, 1f).SetEase((t) => Mathf.Lerp(0f, 1f, t)); //设置Tween对象的Ease曲线为自定义的线性插值函数 ``` 3. 回调函数 回调函数是在Tween动画运动到指定位置或者完成一次循环时调用的函数。可以通过Tween对象的OnComplete、OnStepComplete、OnKill等方法设置Tween对象完成时需要调用的回调函数,例如: ```csharp //设置Tween对象完成时需要调用的回调函数 var tween = transform.DOMoveX(5f, 1f).OnComplete(() => Debug.Log("Tween completed!")); //设置Tween对象完成时需要输出日志信息 //设置Tween对象每次循环完成时需要调用的回调函数 var tween = transform.DOMoveX(5f, 1f).SetLoops(2).OnStepComplete(() => Debug.Log("Tween loop completed!")); //设置Tween对象每次循环完成时需要输出日志信息 ``` 4. 动画控制函数 动画控制函数是用于控制Tween动画的播放、暂停、重置等操作的函数。可以通过Tween对象的Play、Pause、Rewind等方法进行动画控制,例如: ```csharp //播放Tween动画 var tween = transform.DOMoveX(5f, 1f); tween.Play(); //播放Tween动画 //暂停Tween动画 var tween = transform.DOMoveX(5f, 1f); tween.Pause(); //暂停Tween动画 //重置Tween动画 var tween = transform.DOMoveX(5f, 1f); tween.Rewind(); //重置Tween动画 ``` 以上就是关于DOTween插件设置参数、Ease曲线、回调函数、动画控制函数的介绍,希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冒险岛_0_

您的打赏是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值