怎么用原生 原生javascriptt 实现像 jQuery 那样平滑运动的动画效果

用原生JavaScript写出类似jQuery中slideUp和slideDown效果
用原生JavaScript写出类似jQuery中slideUp和slideDown效果
[摘要:JavaScript是自己自教的第一门说话,也是自己现在最爱好的一门说话。因为是自教,减上出有做过任何项目(只是间或本身做一些小后果玩玩),以是程度没有咋天,写得欠好的地方,迎接各]
JavaScript是本人自学的第一门语言,也是本人目前最喜欢的一门语言。由于是自学,加上没有做过任何项目(只是偶尔自己做一些小效果玩玩),所以水平不咋地,写得不好之处,欢迎各位指正。
在我自学JavaScript的时候,一直想实现类似安卓手机状态栏那种下拉上滑效果。在网上搜索一番后,我知道了jQuery的slideUp()和slideDown()方法。这两个方法让我很着迷,我迫不及待知道他是如何实现的。可当我尝试在网上寻找答案时,得到答案几乎都是:你去看jQuery源码不就知道了吗?于是我就去看了jQuery源码,但是面对几万行代码,让我望而却步。所以至今我也不知道slideUp()和slideDown()这两个方法在jQuery中到底是怎样实现的。
第一次尝试
在进一步学习JavaScript后,我了解了setTimeout和setInterval,并知道可以利用它们来逐渐的改变元素的属性,以此达到动画效果。于是我开始着手借助setInterval来实现我自己的下拉上滑效果。让我们以下面的HTML代码为基础,开始聊聊我的第一次实现:
文件名:Silder.html
&!doctype html& & &
charset="utf-8"/&
&Slider& & &
id="btn"&Button&
id="panel" style="width:600height:400background:"&&
src="Slider.js"&& & &
上面代码布局很简单,会显示一个id为btn的按钮;和一个宽为600px,高为400px,背景为红色,id为panel的div。最后我引入了一个文件名为Slider.js的JavaScript文件,这个文件目前还未创建,我将在下面给出。
为了方便描述,我把id为btn的按钮简记为btn,同理也把红色div简记为panel。
现在我想实现一个效果:当我点击btn时,如果panel当前可见,就执行一个上滑动画来将它慢慢收起,从而让它变成不可见;如果当前不可见,那就执行一个下拉动画将它慢慢展开,从而让它变成可见。整个流程如下:
Created with Rapha?l 2.1.2开始点击btnpanel是否可见?上滑动画结束下拉动画yesno
整个流程清楚了,现在就开始写JS代码了,以下是Slider.js中的内容:
window.onload = function() {
= document.getElementById("btn"),
panel = document.getElementById("panel");
btn.onclick = function() {
if (panel.offsetHeight === 0) {
slideDown(panel, 300);
slideUp(panel, 300);
function slideDown(element, time) {
function slideUp(element, time) {
以上代码注释地很清楚,这里不再赘述。我们要注意的是其中有两个等待实现的函数slideDown(element, time)和slideUp(element, time) 。这两个函数分别用于执行下滑上拉动画,他们都接受一个Element类型的element和一个Number类型的time为参数,其中element表示要执行动画的元素,time表示执行动画一个需要多少时间(毫秒)。
我们先来实现slideUp(element, time)。我的思路是这样的:用一个setInterval定时器,每隔10毫秒执行一个函数,每次执行这个函数时就把element的height属性(element.style.height)减去一部分。举个例子,如果我们传入的time参数为500的话,这个函数就会执行(500/10) = 50次。也就是说我们要分50次把element.style.height减为0,那么每次要减去的值就是 element.offsetHeight/50 了(其中element.offsetHeight为元素的高度)。来看看slidUp的实现:
function slideUp(element, time) {
var totalHeight = element.offsetH
var currentHeight = totalH
var decrement = totalHeight/ (time/10);
var timer = setInterval(function() {
currentHeight = currentHeight -
element.style.height = currentHeight + "px";
if (currentHeight &= 0) {
clearInterval(timer);
element.style.display = "none";
element.style.height = totalHeight + "px";
现在当我们点击btn时,panel就会慢慢被收起。而当我们再次点击btn时,却没有任何反应,因为我们还没有实现slideDown。有了slideUp为基础,slideDown就不算什么难事了,直接上代码:
function slideDown(element, time) {
element.style.display = "block";
var totalHeight = element.offsetH
element.style.height = "0px";
var currentHeight = 0;
var increment = totalHeight / (time/10);
var timer = setInterval(function () {
currentHeight = currentHeight +
element.style.height = currentHeight + "px";
if (currentHeight &= totalHeight) {
clearInterval(timer);
element.style.height = totalHeight + "px";
OK,大功告成。现在来看看效果如何。首先点击btn,我们会看到panel慢慢被收起。等待收起动画完成后,再次点击btn,panel又会被慢慢展开。看起来很不错,达到了我们预期的效果。可是一切真的这么简单吗?请注意,我方才刻意强调了等待收起动画完成后再点击btn,但是如果我们快速连续点击btn又会出现什么情况呢?答案是我们的动画会崩溃!你可以亲自试一试,看看是不是如我所说。
综上所述,我的第一次尝试是失败的,或者说是不完美的。因为当用户快速点击按钮时我们的动画会崩溃,这显然不是用户想要的。
第一次失败的思考
以上动画为什么会失败呢?那是因为我想当然的认为:JavaScript中的定时器会一个接一个的按着顺序执行。因为JavaScript是单线程,所以也这个认为看起来似乎并不是错的。但是,事实证明这是错的,比如从下面的列子中就可以看出:
window.onload = function() {
timer3(); };
function timer1() {
var num = 0;
var timer = setInterval(function() {
alert(num);
if (num == 3) {
clearInterval(timer);
function timer2() {
var num = 3;
var timer = setInterval(function() {
alert(num);
if (num == 6) {
clearInterval(timer);
function timer3() {
var num = 6;
var timer = setInterval(function() {
alert(num);
if (num == 9) {
clearInterval(timer);
从上面代码可以看出,我们使用三个定时器,希望浏览器依次按顺序弹出1-9这9个数字(每隔10毫秒弹出一个)。把Slider.html 中的Slider.js改为test.js,执行以下看看结果。结果我们会发现,弹出的顺序根本毫无规律可言。这也再次说明了,JavaScript中定时器并不会按代码顺序依次执行。至于为什么,我在这里不做深入研究,在此,我们只需记住这个结论即可。
其实,根本不用做上面的实验,我们也能轻易得出这个结论。因为很多网页上不只有一个动画,如果所有的动画都按顺序一个接一个的执行的话,那岂不是说在该网页上同时至多只能有一个动画在执行,与此同时其余动画都是静止的(因为还未轮到它们执行),这显然和我们看到的不一致。
让定时器乖乖就范
既然定时器如此顽皮地不按顺序执行,所以我们必需得想个法子让它乖乖就范。
要让定时器按顺序执行,那就必需使用回调。也就是说,在一个函数执行函数完成后去调用另一个函数。具体到刚刚那个test.js,要让timer1(),timer2(),timer3()三个定时器依次执行。我们可以在timer1()执行完成后主动去调用timer2(),timer2()完成后又主动去调用timer3()。这样一来,我们只需执行timer1(),三个定时器就都会被依次执行,就像下面一样:
window.onload = function() {
timer1(); };
function timer1() {
var num = 0;
var timer = setInterval(function() {
alert(num);
if (num == 3) {
clearInterval(timer);
function timer2() {
var num = 3;
var timer = setInterval(function() {
alert(num);
if (num == 6) {
clearInterval(timer);
function timer3() {
var num = 6;
var timer = setInterval(function() {
alert(num);
if (num == 9) {
clearInterval(timer);
运行上面的代码,我们发现,浏览器会像我们期待的那样依次按顺序弹出9个数字。
更灵活的管理方案
虽然上面代码会让定时器依次执行,但这种方式并不灵活。想象一下,如果我们要添加一个新的定时器timer4(),我们就必须在timer3()中去调用它。如果要添加1000个呢?那工作量会相当可观。
现在我们用一个更为灵活的方案来管理定时器的执行。我们可以把所有要按一定顺序执行的定时器都保存在一个数组中,然后把这个数组当成一个队列使用,最后按顺序一个接一个的执行队列里面的定时器。
提示:JavaScript中的数组本身就可以当作队列使用(参见数组的shift()方法和push()方法),所以我们不要实现自己的队列数据结构。
在此,我们创建一个TimerManager对象来管理动画队列。其代码如下:
var TimerManager = {};
TimerManager.timers = [];
TimerManager.isFiring = false;
TimerManager.add = function(timer) {
this.timers.push(timer);
this.fire(); };
TimerManager.fire = function() {
if ( !this.isFiring ) {
var firstTimer = this.timers.shift();
if (firstTimer) {
this.isFiring = true;
firstTimer();
TimerManager.next = function() {
this.isFiring = false;
this.fire(); };
TimerManager一共有两个属性,timers和isFiring;还有三个方法分别是add(timer), fire()和next()。其中我们常用的是add(timer)和next()。
fire()是一个用来执行队列中第一个定时器的内部方法,执行的时候,它会先判断当前是否有定时器在执行,如果没有的话,它便会把第一个定时器从队列中取出来并立即执行;如果当前有定时器正在执行,它就什么都不做。
next()是一个用来执行队列中下一个动画的方法,它应该在定时器结束的时候被调用,以执行队列中下一个定时器。这也表明了,我们在写定时器时,必须在定时器结束时主动调用这个方法。
add(timer)用于向队列中添加定时器。timer即要添加的函数名。
前面说过,必须在定时器结束时调用next()方法。所以我们把之前的定时器(timer1,timer2,timer3)都修改一下,改成下面这样:
function timer1() {
var num = 0;
var timer = setInterval(function() {
alert(num);
if (num == 3) {
clearInterval(timer);
TimerManager.next();
function timer2() {
var num = 3;
var timer = setInterval(function() {
alert(num);
if (num == 6) {
clearInterval(timer);
TimerManager.next();
function timer3() {
var num = 6;
var timer = setInterval(function() {
alert(num);
if (num == 9) {
clearInterval(timer);
TimerManager.next();
完成以上修改后,我就可以调用add(timer)方法把所有定时器添加进去。因为在add(timer)内部会主动调用fire()来执行队列中的第一个定时器,所以我们不用手动调用fire()。我们要做的只是把定时器添加进去,其他什么也不用做,定时器就会乖乖地排着队去会执行。以下便是test.js修改后全部代码:
var TimerManager = {};
TimerManager.timers = [];
TimerManager.isFiring = false;
TimerManager.add = function(timer) {
this.timers.push(timer);
this.fire(); };
TimerManager.fire = function() {
if ( !this.isFiring ) {
var firstTimer = this.timers.shift();
if (firstTimer) {
this.isFiring = true;
firstTimer();
TimerManager.next = function() {
this.isFiring = false;
this.fire(); };
window.onload = function() {
TimerManager.add(timer1);
TimerManager.add(timer2);
TimerManager.add(timer3); };
function timer1() {
var num = 0;
var timer = setInterval(function() {
alert(num);
if (num == 3) {
clearInterval(timer);
TimerManager.next();
function timer2() {
var num = 3;
var timer = setInterval(function() {
alert(num);
if (num == 6) {
clearInterval(timer);
TimerManager.next();
function timer3() {
var num = 6;
var timer = setInterval(function() {
alert(num);
if (num == 9) {
clearInterval(timer);
TimerManager.next();
运行上述代码后我们会得到一样的运行结果,不同的是我们采用了更为灵活的管理方式。
上面说了这么多,好像偏题了。但是,实现定时器的有序执行对实现我们的下拉上滑动画来说的确十分重要。现在,我们就利用上面的成果,来完成我们的下拉上滑。为了方便描述,我们新建一个JS文件Slider2.js。我们会在这个文件中实现一个Slider对象,它包含一个slideUp(element, time)和一个slideDown(element, time)方法。以下是这个文件的结构:
window.Slider = (function() {
var Slider = {};
return S })();
这里创建了一个匿名函数,创建并返回一个对象(Slider),我们所有的代码都将在这个闭包中完成,最后只提供两个接口 —— slideUp(element, time)和slideDown(element, time)。
在给出最终实现代码前,先来说说我的思路:
I. 首先,由于一个网页中往往有多个绑定动画的元素,我们要求每个元素的动画单独连续执行,各个元素的动画的执行相互独立。所以我们不能用一个TimerManger来管理所有元素的动画队列,因此我们需要做的是为每个动画元素分配一个唯一的TimerManger。于是我们先要定义一个TimerManager类。
II. 我们要修改之前的动画函数:在动画结束的时候,获取动画元素的TimerManager,并调用它的next()方法
III. 用Slider对象把TimerManger与动画函数整合起来,并提供外部访问接口
以下是Slider2.js中所有代码:
window.Slider = (function() {
var Slider = {};
function TimerManager() {
this.timers = [];
this.args = [];
this.isFiring = false;
TimerManager.makeInstance = function(element) {
if (!element.__TimerManager__ || element.__TimerManager__.constructor != TimerManager) {
element.__TimerManager__ = new TimerManager();
TimerManager.prototype.add = function(timer, args) {
this.timers.push(timer);
this.args.push(args);
this.fire();
TimerManager.prototype.fire = function() {
if ( !this.isFiring ) {
var timer = this.timers.shift(),
= this.args.shift();
if (timer && args) {
this.isFiring = true;
timer(args[0], args[1]);
TimerManager.prototype.next = function() {
this.isFiring = false;
this.fire();
function fnSlideDown(element, time) {
if (element.offsetHeight == 0) {
element.style.display = "block";
var totalHeight = element.offsetH
element.style.height = "0px";
var currentHeight = 0;
var increment = totalHeight / (time/10);
var timer = setInterval(function () {
currentHeight = currentHeight +
element.style.height = currentHeight + "px";
if (currentHeight &= totalHeight) {
clearInterval(timer);
element.style.height = totalHeight + "px";
if (element.__TimerManager__ && element.__TimerManager__.constructor == TimerManager) {
element.__TimerManager__.next();
if (element.__TimerManager__ && element.__TimerManager__.constructor == TimerManager) {
element.__TimerManager__.next();
function fnSlideUp(element, time) {
if (element.offsetHeight & 0) {
var totalHeight = element.offsetH
var currentHeight = totalH
var decrement = totalHeight / (time/10);
var timer = setInterval(function() {
currentHeight = currentHeight -
element.style.height = currentHeight + "px";
if (currentHeight &= 0) {
clearInterval(timer);
element.style.display = "none";
element.style.height = totalHeight + "px";
if (element.__TimerManager__ && element.__TimerManager__.constructor == TimerManager) {
element.__TimerManager__.next();
if (element.__TimerManager__ && element.__TimerManager__.constructor == TimerManager) {
element.__TimerManager__.next();
Slider.slideDown = function(element, time) {
TimerManager.makeInstance(element);
element.__TimerManager__.add(fnSlideDown, arguments);
return this;
Slider.slideUp = function(element, time) {
TimerManager.makeInstance(element);
element.__TimerManager__.add(fnSlideUp, arguments);
return this;
return S })();
以上代码注释相当清楚(之前描述过的实现在此不再注释),这里不再赘述。
Slider对象完成了,现在新建一个test2.js来调用Slider的方法。以下为test2.js的代码:
window.onload = function() {
= document.getElementById("btn"),
panel = document.getElementById("panel");
btn.onclick = function() {
if (panel.offsetHeight === 0) {
Slider.slideDown(panel, 300);
Slider.slideUp(panel, 300);
现在有了Slider2.js与test2.js,我们只要修改一下Slider.html引入这两个JS文件就行了。以下为Slider.html的代码:
&!doctype html& & &
charset="utf-8"/&
&Slider& & &
id="btn"&Button&
id="panel" style="width:600height:400background:"&&
src="Slider2.js"&&
src="test2.js"&& & &
大功告成,运行以上代码,现在无论我们怎样疯狂的点击btn,我们的动画始终会正确执行。
至此我们已经完成了我们的目标,只不过我们的动画函数还不够优秀,因为它们都是一些简单的匀速运动。不过限于篇幅,这里就不再深究,以后有机会再来实现一些复杂的变速运动,当然,如果读者有兴趣的话也可以自行实现。
还有就是当我们在一个周期内(也就是分别执行一次上拉和下滑所用的全部时间内)多次点击btn时,动画最多执行两次,而不会执行一共点击的次数。当然,这也不能算是一个bug,因为这是笔者刻意为之。如果需要响应多次点击的话,也可以通过简单的修改来实现,不过限于篇幅,笔者也不再深究,留给有心的读者实现。
感谢关注 Ithao123精品文库频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊jQuery& Easing
是一款比较老的jQuery插件,在很多网站都有应用,尤其是在一些页面滚动、幻灯片切换等场景应用比较多。它非常小巧,且有多种动画方案供选择,使用简单,而且免费。
引入Easing js文件
该插件基于jQuery,所以需要同时引入jQuery库文件和Easing js文件。
&type="text/javascript"&src="js/jquery.min.js"&&type="text/javascript"&src="js/jquery.easing.min.js"
jQuery Easing是在jQuery原有的动画效果上进行了扩展,所以使用时可以根据jQuery原有的动画函数进行扩展。
设置jQuery默认动画效果
1 jQuery.easing.def = &method&;//如:easeOutExpo
jQuery默认动画
支持toggle()、slideUp()、slideDown()、show()、hide()等jQuery内置的动画效果,使用代码如下:
$(element).slideUp({&&&&&duration:&1000,&&&&&&easing:&method,&&&&&&complete:&callback&});&
参数duration:定义动画运动时间,毫秒,其实就是速度,时间越短,运动速度越快。
参数easing:指定动画效果,Easing js提供多种动画效果,有匀速运动、变加速运动、缓冲波动效果,它们 是:linear,swing,jswing,easeInQuad,easeOutQuad,easeInOutQuad,easeInCubic, easeOutCubic,easeInOutCubic,easeInQuart,easeOutQuart,easeInOutQuart, easeInQuint,easeOutQuint,easeInOutQuint,easeInSine,easeOutSine, easeInOutSine,easeInExpo,easeOutExpo,easeInOutExpo,easeInCirc, easeOutCirc,easeInOutCirc,easeInElastic,easeOutElastic,easeInOutElastic, easeInBack,easeOutBack,easeInOutBack,easeInBounce,easeOutBounce,easeInOutBounce.使用jQuery自定义动画函数animate()
jQuery Easing结合jQuery的自定义动画函数animate()可以制作各种你想要的动画效果,使用代码如下:
$(element).animate({&&&&&height:500,&&&&&width:600&&&&&},{&&&&&easing:&'easeInOutQuad',&&&&&duration:&500,&&&&&complete:&callback&});
http://tympanus.net/codrops//slide-down-box-menu/效果实例
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;&
easeOutElastic:&function&(x,&t,&b,&c,&d)&{&
var&s=1.70158;var&p=0;var&a=c;&
if&(t==0)&return&b;&
if&((t/=d)==1)&return&b+c;&
if&(!p)&p=d*.3;&
if&(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;&
easeInOutElastic:&function&(x,&t,&b,&c,&d)&{&
var&s=1.70158;var&p=0;var&a=c;&
if&(t==0)&return&b;&
if&((t/=d/2)==2)&return&b+c;&
if&(!p)&p=d*(.3*1.5);&
if&(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;&
easeInBack:&function&(x,&t,&b,&c,&d,&s)&{&
if&(s&==&undefined)&s&=&1.70158;&
return&c*(t/=d)*t*((s+1)*t&-&s)&+&b;&
easeOutBack:&function&(x,&t,&b,&c,&d,&s)&{&
if&(s&==&undefined)&s&=&1.70158;&
return&c*((t=t/d-1)*t*((s+1)*t&+&s)&+&1)&+&b;&
easeInOutBack:&function&(x,&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;&
easeInBounce:&function&(x,&t,&b,&c,&d)&{&
return&c&-&jQuery.easing.easeOutBounce&(x,&d-t,&0,&c,&d)&+&b;&
easeOutBounce:&function&(x,&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;&
return&c*(7.5625*(t-=(2.625/2.75))*t&+&.984375)&+&b;&
easeInOutBounce:&function&(x,&t,&b,&c,&d)&{&
if&(t&&&d/2)&return&jQuery.easing.easeInBounce&(x,&t*2,&0,&c,&d)&*&.5&+&b;&
return&jQuery.easing.easeOutBounce&(x,&t*2-d,&0,&c,&d)&*&.5&+&c*.5&+&b;&
至于该如何使用上面的缓动函数呢?将缓动函数保存为
调用。下面是使用示例,用
&!DOCTYPE&
"-//W3C//DTD&
Transitional//EN"&
"http://www.w3c.org/TR/1999/REC-html401-/loose.dtd"&&
&!--&saved&from&url=&http://www.ushai.net/class/13.html&--&&
xmlns="http://www.w3.org/1999/xhtml"&&HEAD&&TITLE&jQuery+easing
&META&http-equiv=Content-Type&content="text/&charset=utf-8"&&
&STYLE&type=text/css&&{&
PADDING-RIGHT:&0&PADDING-LEFT:&0&PADDING-BOTTOM:&0&MARGIN:&0&
PADDING-TOP:&0px&
FONT:&12px/1.8&A&COLOR:ʚ&TEXT-ALIGN:&center&
LIST-STYLE-TYPE:&none&
MARGIN:&15px&0&FONT:&bold&24px/1.5&"Microsoft&Yahei";&TEXT-ALIGN:&center&
.wrapper&{&
BORDER-RIGHT:&
PADDING-RIGHT:&
BORDER-TOP:&
PADDING-LEFT:&
PADDING-BOTTOM:&
BORDER-LEFT:&
<p class="reader-word-layer reader-word-s4-0" style="width: 435 height: 155 line-height: 155 top: 8495 left: 4792 z-index: 88; letter-spacing: -0.0&
PADDING-TOP:&
BORDER-BOTTOM:&#e6e6e6&1px&&BACKGROUND-COLOR:&#f6f6f6&
.animation&{&
BORDER-RIGHT:&
BORDER-TOP:&
BACKGROUND:&
BORDER-LEFT:&
BORDER-BOTTOM:&
POSITION:&
&HEIGHT:&50px&
POSITION:&
BACKGROUND-COLOR:&#000&
.console&{&
PADDING-RIGHT:&
PADDING-LEFT:&
PADDING-BOTTOM:&
PADDING-TOP:&15px&
TEXT-ALIGN:&left&
PADDING-RIGHT:&
PADDING-LEFT:&
PADDING-BOTTOM:&
PADDING-TOP:&10px&
&META&content="MSHTML&6.00."&name=GENERATOR&&/HEAD&&
&H1&jQuery+easing
缓动的动画
&DIV&class=wrapper&&
&DIV&class=animation&&
&DIV&class=block&id=block&&/DIV&&/DIV&&
selected&def&-&
默认方式设置
&/OPTION&&&OPTION&value=easeInQuad&in&-&Quadratic&-&
二次方缓动
&/OPTION&&
value=easeOutQuad&out&
Quadratic&
二次方缓动
&/OPTION&&
&OPTION&value=easeInOutQuad&inOut&-&Quadratic&-&
二次方缓动
&/OPTION&&&OPTION&
value=easeInCubic&in&-&Cubic&-&
三次方缓动
&/OPTION&&&OPTION&value=easeOutCubic&out&
:三次方缓动
&/OPTION&&&OPTION&value=easeInOutCubic&inOut&-&Cubic
:三次方缓
&/OPTION&&
&OPTION&value=easeInQuart&in&-&Quartic&-&
四次方缓动
&/OPTION&&&OPTION&
value=easeOutQuart&out&-&Quartic&-&
四次方缓动
&/OPTION&&&OPTION&
value=easeInOutQuart&inOut&-&Quartic&-&
四次方缓动
&/OPTION&&&OPTION&
value=easeInQuint&in&
&/OPTION&&
value=easeOutQuint&out&
-&Quintic&-&
五次方缓动
&/OPTION&&&OPTION&value=easeInOutQuint&inOut&-&Quintic&-&
&/OPTION&&
value=easeInSine&in&
Sinusoidal&
&/OPTION&&
&OPTION&value=easeOutSine&out&-&Sinusoidal&-&
正弦曲线缓动
&/OPTION&&&OPTION&
value=easeInOutSine&inOut&-&Sinusoidal&-&
正弦曲线缓动
&/OPTION&&&OPTION&
value=easeInExpo&in&-&Exponential&-&
指数曲线缓动
&/OPTION&&&OPTION&
value=easeOutExpo&out&-&Exponential&-&
指数曲线缓动
&/OPTION&&&OPTION&
value=easeInOutExpo&inOut&-&Exponential&-&
指数曲线缓动
&/OPTION&&&OPTION&
value=easeInCirc&in&
&/OPTION&&
value=easeOutCirc&out&
-&Circular&-&
圆形曲线缓动
&/OPTION&&&OPTION&value=easeInOutCirc&inOut&-&Circular&-&
圆形曲线缓动
&/OPTION&&&OPTION&value=easeInElastic&in&-&Elastic&-&
指数衰减的正弦曲线缓动
&/OPTION&&&OPTION&value=easeOutElastic&out&-&Elastic&-&
指数衰减的正弦曲线缓动
&/OPTION&&&OPTION&value=easeInOutElastic&inOut&-&Elastic&-&
指数衰减的正弦曲线缓动
&/OPTION&&&OPTION&value=easeInBack&in&-&Back&-&
超过范围的
三次方缓动
&/OPTION&&
&OPTION&value=easeOutBack&out&-&Back&-&
超过范围的三次方缓动
&/OPTION&&&OPTION&
value=easeInOutBack&inOut&-&Back&-&
超过范围的三次方缓动
&/OPTION&&&OPTION&
value=easeInBounce&in&-&Bounce&-&
指数衰减的反弹缓动
&/OPTION&&&OPTION&
value=easeOutBounce&out&-&Bounce&-&
指数衰减的反弹缓动
&/OPTION&&&OPTION&
value=easeInOutBounce&inOut&
指数衰减的反弹缓动
&/OPTION&&/SELECT&&
id=button_start&
type=button&
id=button_stop&
type=button&
&DIV&class=text&&
&P&&STRONG&
方法介绍:
&/STRONG&&/P&&
:默认方式设置
:默认方式加载
:二次方缓动
:三次方缓动
:四次方缓动
:五次方缓动
:正弦曲线缓动
:指数曲线缓动
:圆形曲线的缓动
&LI&Elastic
:指数衰减的正弦曲线缓动
:超过范围的三次方缓动
&LI&Bounce
:指数衰减的反弹缓动
&/LI&&/UL&&
&P&&STRONG&
&/STRONG&&/P&&
&LI&ease&STRONG&In&/STRONG&
:加速度缓动;
&LI&ease&STRONG&Out&/STRONG&
:减速度缓动;
&LI&ease&STRONG&InOut&/STRONG&
&/LI&&/UL&&
缓动方式的翻译来自:
href="http://www.ushai.net/class/13.html"&
原创文章,转载请注明出处:
&A&href="http://www.ushai.net/"&
&/A&&/P&&/DIV&&/DIV&&
&div&id="test"&&/div&&
&SCRIPT&src="jQuery+easing
缓动的动画
.files/jquery.min.js"&
type=text/javascript&&/SCRIPT&&
&SCRIPT&src="jQuery+easing
缓动的动画
.files/jquery.easing.1.3.js"&
type=text/javascript&&/SCRIPT&&
&SCRIPT&type=text/javascript&&
$(document).ready(function(){&
$('#button_start').click(function(event){&
var&actionType&=&$("#easingType").val();&
$('#block').animate({left:858},1000,actionType,function(){});&
event.preventDefault();&
$('#button_stop').click(function(event){&
var&actionType&=&$("#easingType").val();&
$('#block').animate({left:0},1000,actionType,function(){});&
event.preventDefault();&
&/SCRIPT&&
&/BODY&&/HTML&&
阅读(...) 评论()}

我要回帖

更多关于 javascript 平滑滚动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信