html5 缓动效果,【html5】缓动函数在动画中的应用

缓动类型:

Linear:无缓动效果

Quadratic:二次方的缓动(t^2)

Cubic:三次方的缓动(t^3)

Quartic:四次方的缓动(t^4)

Quintic:五次方的缓动(t^5)

Sinusoidal:正弦曲线的缓动(sin(t))

Exponential:指数曲线的缓动(2^t)

Circular:圆形曲线的缓动(sqrt(1-t^2))

Elastic:指数衰减的正弦曲线缓动

超过范围的三次方缓动((s+1)t^3 – st^2)

指数衰减的反弹缓动

每种类型都有三种缓动方式:

easeIn:先慢后快

easeOut:先快后慢

easeInOut:先慢后快然后再慢

bVtLey

封装的缓动函数:

//Tween.js

//t: current time(当前时间);

//b: beginning value(初始值);

//c: change in value(变化量);

// d: duration(持续时间)。

//you can visit 'http://easings.net/zh-cn' to get effect

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) {

var s;

if (t==0) return b;

if ((t /= d) == 1) return b + c;

if (typeof p == "undefined") p = d * .3;

if (!a || a < Math.abs(c)) {

s = p / 4;

a = c;

} else {

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) {

var s;

if (t==0) return b;

if ((t /= d) == 1) return b + c;

if (typeof p == "undefined") p = d * .3;

if (!a || a < Math.abs(c)) {

a = c;

s = p / 4;

} else {

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) {

var s;

if (t==0) return b;

if ((t /= d / 2) == 2) return b+c;

if (typeof p == "undefined") p = d * (.3 * 1.5);

if (!a || a < Math.abs(c)) {

a = c;

s = p / 4;

} else {

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 (typeof s == "undefined") s = 1.70158;

return c * (t /= d) * t * ((s + 1) * t - s) + b;

},

easeOut: function(t, b, c, d, s) {

if (typeof 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 (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;

}

},

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;

}

}

}

}

Math.tween = Tween;

funFall = function() {

var start = 0, during = 100;

var _run = function() {

start++;

var top = Tween.Bounce.easeOut(start, objBall.top, 500 - objBall.top, during);

ball.css("top", top);

if (start < during) requestAnimationFrame(_run);

};

_run();

};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: animate是jQuery提供的一个动画函数,可以实现元素的缓动效果。下面是animate函数的基本用法: ```javascript $(selector).animate({params},speed,callback); ``` 其,selector是要进行动画的元素选择器;params是动画参数,可以设置元素的CSS属性、样式和值,也可以设置动画的持续时间、缓动效果、延迟等;speed是动画的速度,可以是毫秒数或者是字符串slow、normal、fast;callback是动画完成后执行的回调函数。 下面是一个简单的使用animate函数的例子: ```javascript $(document).ready(function(){ $("button").click(function(){ $("div").animate({left: '250px'}, 1000); }); }); ``` 该例子表示当用户点击按钮时,div元素会向右移动250像素的距离,动画持续时间为1秒。 除了基本用法外,我们还可以通过自定义封装函数来更方便地使用animate函数。比如下面这个例子: ```javascript function move(obj, target, duration) { clearInterval(obj.timer); var current = parseInt($(obj).css("left")); var speed = (target - current) / (duration / 10); obj.timer = setInterval(function () { current += speed; $(obj).css("left", current + "px"); if (current >= target) { clearInterval(obj.timer); } }, 10); } $(document).ready(function(){ $("button").click(function(){ move($("div").get(0), 250, 1000); }); }); ``` 该例子定义了一个move函数,实现了与前面例子相同的功能。我们可以通过调用move函数来实现动画效果,而不用写过多的代码。其,obj参数表示要进行动画的元素,target参数表示目标位置,duration参数表示动画持续时间。 总的来说,animate函数是一个非常方便的工具,可以帮助我们快速实现各种缓动动画效果。如果需要更加复杂的动画效果,我们也可以通过自定义封装函数来满足需求。 ### 回答2: animate缓动动画函数是一种常用于网页开发的技术,可以实现元素的平滑过渡效果。封装和使用该函数主要包括以下几个步骤。 首先,在JavaScript创建一个名为"animate"的函数,该函数接收四个参数:目标元素(element)、目标属性(properties)、动画持续时间(duration)和缓动函数(easing)。这些参数用于确定动画的目标、时长和缓动方式。 接下来,在animate函数根据不同浏览器的兼容性,获取目标元素的初始属性值,并将其存储在变量。 然后,通过计算每帧的属性值和对应的时间间隔,将属性值应用到目标元素上。这个计算过程可以使用缓动函数来实现元素平滑过渡的效果。常见的缓动函数有线性缓动、弹性缓动、加速缓动等,根据需求选择合适的函数。 最后,执行动画效果,通过设置定时器来改变元素的属性值,直到达到目标属性或动画持续时间结束。在每一帧更新元素属性值时,要使用这些属性值来更新元素的样式。 使用animate函数时,可以在HTML的JavaScript代码调用该函数,传入需要执行动画的元素和相应的参数。例如:animate(document.getElementById("box"), {"left": "500px", "top": "300px"}, 1000, "easeInOut")。 总结起来,animate缓动动画函数的封装和使用包括创建函数、获取初始属性值、计算每帧属性值和对应时间、执行动画效果等步骤。它可以通过传入不同的参数来实现各种各样的动画效果,提升网页的用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值