jQuery动画
显示和隐藏
在jQuery中,如果我们想要实现元素的显示和隐藏,可以使用2组方法:
(1)show()和hide();
(2)toggle();
show()和hide()
1 | $().hide() //把所选元素的display属性设置为none。 |
案例:
当点击“隐藏”按钮,使用hide()方法隐藏图片;当点击“显示”按钮,使用show()方法显示图片。这个例子非常简单。
1 | $(function () { |
toggle()方法
在jQuery中,我们还可以使用toggle()方法来“切换”元素的“显示状态”。
如果元素是显示状态,则变成隐藏状态;如果元素是隐藏状态,则变成显示状态。
1 | $().toggle() //简单的toggle() |
淡入和淡出
在jQuery中,如果我们想要实现元素的淡入淡出这种渐变效果,有3组方法:
(1)fadeIn()和fadeOut();
(2)fadeToggle();
(3)fadeTo();
fadeIn()和fadeOut()
1 | $().fadeIn(speed , callback) //淡入效果 |
fadeIn()/fadeOut()和show()/hide()区别
- show()和hide(),是通过改变height、width、opacity来实现动画的显示与隐藏;
- fadeIn()和fadeOut(),只通过opacity来实现动画的显示与隐藏;
- 它们在视觉上也有差别,例如hide()隐藏的效果是从下到上或从右下到左上慢慢折叠缩小,而fadeOut的淡出效果是整体淡化直至消失。
不过这2组方法在动画显示与隐藏完成之后,都会设置display:none或者display:block。
fadeToggle()
使用fadeToggle()方法通过不透明度变化来切换匹配元素的“显示状态”。
也就是说,如果元素是显示状态,则变成隐藏状态;如果元素是隐藏状态,则变成显示状态。
fadeToggle()方法跟toggle()方法很相似,不过toggle()方法通过改变height、width、opacity来实现动画的显示与隐藏,而fadeToggle()只通过opacity来实现动画的显示与隐藏。
fadeTo()
在jQuery中,fadeIn()和fadeOut()这2种方法都是通过改变元素的透明度来实现淡入淡出的动画效果。其中在淡入效果中,透明度(opacity)从0.0变化到1.0;在淡出效果中,透明度(opacity)从1.0变化到0.0。
如果我们想要将元素透明度指定到某一个值,则可以使用fadeTo()方法。$().fadeTo(speed , opacity , callback)
- speed为可选参数,表示动画执行的速度,单位为毫秒,默认为500毫秒。如果speed参数省略,则采用默认速度。
- opacity为必选参数,表示元素指定的透明度,取值范围为0.0~1.0。
- callback为可选参数,表示动画执行完成之后的回调函数。
综合示例:demo
1 | $(function () { |
滑上和滑下
在jQuery中,如果我们想要实现元素的滑动效果,也有2组方法:
(1)slideUp()和slideDown();
(2)slideToggle();
slideUp()和slideDown()
slideDown()函数用于显示所有匹配的元素,并带有向下滑动的过渡动画效果。
向下滑动的动画效果,即元素可见区域的高度从0逐渐增大到其原有高度(向下逐渐展开)。
如果元素本身是可见的,则不对其作任何改变。如果元素是隐藏的,则使其可见。
与该函数相对的是slideUp()函数,用于隐藏所有匹配的元素,并带有向上滑动的过渡动画效果。
1 | $().slideDown(speed , callback) |
当使用slideDown()和slideUp(),我们需要用一个变量来判断当前元素的滑动状态,然后根据这个变量来决定是否执行slideDown()还是slideUp()方法。
slideToggle()
使用slideToggle()方法来切换元素的“滑动状态”。也就是说,如果元素是滑下状态,则变成滑上状态;如果元素是滑上状态,则变成滑下状态。
1 | slideToggle(speed , callback) |
在实际开发中,对于滑动动画,slideToggle()方法相对slideUp()和slideDown()来得更加方便。
自定义动画
jQuery动画原理:
jQuery动画其实就是通过将元素的某一个属性从“一个属性值”在指定时间内平滑地过渡到“另外一个属性值”来实现动画效果。
简单动画
在jQuery中,对于自定义动画,我们可以使用animate()方法来实现。
1 | $().animate(params , speed , callback) |
累积动画
1 | $(function () { |
简单动画只是给定了元素属性的最终值,而累积动画是在元素属性的基础上的增加和减少。此外,如果我们多次点击“累加动画”按钮之后,会发现这个动画效果是不断累加的,
回调函数
如果想要在动画执行完成之后再实现某些操作,我们就需要用到了animate()方法中的回调函数。
回调函数说白了,就是在某个方法执行完成之后的“附加操作”。
1 | $(function () { |
动画执行情况/处理
animate在执行动画中,如果需要观察动画的一些执行情况,或者在动画进行中的某一时刻进行一些其他处理,我们可以通过animate的提供第二种设置语法,传递一个对象参数,可以拿到动画执行状态一些通知.animate( properties, options )
options参数
- duration - 设置动画执行的时间
- easing - 规定要使用的 easing 函数,过渡使用哪种缓动函数
- step:规定每个动画的每一步完成之后要执行的函数
- progress:每一次动画调用的时候会执行这个回调,就是一个进度的概念
- complete:动画完成回调
其中最关键的一点就是:
如果多个元素执行动画,回调将在每个匹配的元素上执行一次,不是作为整个动画执行一次.
列出常用的方式:
1 | $('#elem').animate({ |
案例:http://sandbox.runjs.cn/show/athnfz7g
更多参考:http://api.jquery.com/animate/
队列动画
在jQuery中,队列动画指的是在元素中按照一定的顺序执行多个动画效果,即有多个animate()方法在元素中执行,然后根据这些animate()方法执行的先后顺序,形成了动画队列,然后按照这个动画队列的顺序来进行显示。
队列动画包括之前我们所学到的4种动画形式:(1)显示和隐藏;(2)淡入和淡出;(3)滑上和滑下;(4)自定义动画。
1 | $().animate().animate()…….animate(); |
动画停止stop()
在jQuery中,很多时候我们需要停止当前元素上正在执行的动画效果,可以使用stop()方法来实现。$().stop(clearQueue,gotoEnd)
说明
- 参数clearQueue和参数gotoEnd都是可选参数,取值都为布尔值。两个参数默认值都为false。
- 参数clearQueue表示是否要清空“未执行”的“动画队列”。清空的是整个“动画队列”,而不仅仅是某一个动画。
- 参数gotoEnd,表示是否直接将正在执行的动画跳转到末状态。
- 默认情况下,没有参数值的stop()方法只会停止“当前正在执行”的动画。如果你使用animate()方法为当前元素设置了A、B、C这3个动画。如果当前正在执行的动画是A,则只会停止动画A的执行,不会阻止B和C的执行。如果我们想停止所有的动画,可以使用设置参数clearQueue为true来实现。
- stop()方法在实际开发中唯一的用途:停止当前动画,防止动画累积的bug。
jQuery stop()方法
参数取值 | 说明 |
---|---|
stop() | 等价于stop(false,false),仅仅停止“当前执行”这段动画,后面的动画还可以继续执行 |
stop(true) | 等价于stop(true,false),停止所有动画,包括当前执行的动画 |
stop(true,true) | 当前动画跳到末状态,并停止所有动画 |
stop(false,true) | 当前动画跳到末状态,接着执行下面的动画 |
案例:
1 | $(function () { |
动画延迟delay()
在jQuery中,如果我们想要对动画进行延迟操作,可以用delay()方法来实现。$().delay(speed)
案例:
1 | $(function () { |
动画立即完成finish()
finish()函数用于立即完成队列中的所有动画。
finish()会停止当前正在运行的动画,删除所有队列中的动画,并完成匹配元素的所有动画。
1 | $().finish(queueName) //queueName:可选/String类型,指定的队列名称,默认为"fx",表示jQuery标准的效果队列 |
深入了解jQuery动画
所有jQuery动画效果,从本质上来说,都是通过改变元素的CSS属性来实现的,也就是说:jQuery动画就是通过将元素的属性从“一个属性值”在一定时间内平滑地过渡到“另一个属性值”,从而实现动画效果。
在jQuery中,对于“显示和隐藏、淡入和淡出、滑上和滑下”这3种动画,实现的原理如下:
(1)显示和隐藏:通过改变width、height、opacity、display来实现动画的显示和隐藏;
(2)淡入和淡出:通过改变opacity、display来实现动画的淡入和淡出;
(3)滑上和滑下:通过改变height、display来实现动画的滑上和滑下;
案例:
1 | //以下代码,每一组中的2句代码都是等价的。 |
判断动画状态is()
在jQuery中我们还可以使用is()方法来判断所选元素是否正处于动画状态,如果元素不处于动画状态,则添加新的动画;如果元素处于动画状态,则不添加新的动画。
1 | if(!$().is(":animated")) |