返回值:jQueryslideToggle([duration], [callback])
通过滑动的形式显示或隐藏匹配的元素。
-
1.0 新增slideToggle([duration], [callback])
duration (String,Number) 可选参数,字符串("slow"或 "fast")或表示动画时长的毫秒数值。callback (Callback) 可选参数,在动画完成时执行的函数。 -
1.4.3 新增slideToggle([duration], [easing], [callback])
duration (String,Number) 可选参数,字符串("slow"或 "fast")或表示动画时长的毫秒数值。easing (String) 可选参数,要使用的缓冲效果的名称,默认值是 "swing"。jQuery 内置提供 "linear" 和 "swing" 两种效果,如果要使用更多缓冲效果,需要插件支持。callback (Callback) 可选参数,在动画完成时执行的函数。
.slideToggle()
方法对匹配元素的高度进行动画操作。这会导致页面中,在这个元素下面的内容往下或往上滑。如果元素一开始是显示的,它最终会被隐藏;如果一开始是隐藏的,它最终会被显示出来。display
属性值会保存到 jQuery 的数据缓存中,之后还能恢复 display
的初始值。比如,如果一个元素的 display
值为 inline
,那么当它隐藏后再被显示时,它仍然是 inline
。当高度变成 0 之后,会把 display
样式属性设置成 none
以确保这个元素不再对页面布局产生影响。
duration 参数可以提供一个毫秒数,代表动画运行的时间,时间越长动画越慢。还可以提供字符串 'fast'
和 'slow'
,分别对应了 200
和 600
毫秒。如果没有设置 duration
参数,或者设置成其他无法识别的字符串,就会使用默认值 400 毫秒。
我们可以对任何元素应用动画,比如下面这个例子,对图片应用动画:
<div id="clickme"> Click here </div> <img id="book" src="book.png" alt="" width="100" height="123" />
当点击 id 为 clickme 的 div 之后,就会在 id 为 book 的图片上应用 .slideToggle()
方法:
$('#clickme').click(function() { $('#book').slideToggle('slow', function() { // Animation complete. }); });
如果元素一开始是显示的,那么第一次点击它之后,它就会慢慢隐藏起来:
第二次点击后,元素会再次出现:
缓冲函数
从 jQuery 1.4.3 起,增加了一个可选的参数,用于确定使用的缓冲函数。缓冲函数确定了动画在不同位置的速度。jQuery默认只提供两个缓冲效果:swing
(默认值) 和 线性缓冲效果linear
。更多特效需要使用插件。可以访问 jQuery UI 网站 来获得更多信息。
回调函数
如果提供了回调函数,那么当动画结束时,会调用这个函数。通常用来按顺序执行一组不同的动画。这个函数不接受任何参数,但是 this
会设成将要执行动画的那个元素。如果对多个元素设置动画,那么要非常注意,回调函数会在每一个元素执行完动画后都执行一次,而不是这组动画整体才执行一次。
截止 jQuery 1.6,
.promise()
方法可以和
deferred.done()
方法一起使用,用于当所有匹配的元素执行完各自的动画后,再调用一个回调函数。 ( 参见 .promise() 例子 )。
补充说明:
- 所有的 jQuery 动画, 包括
.slideToggle()
, 都可以被关闭,通过全局设置jQuery.fx.off = true
, 效果等同于将动画时间 duration 设置成 0. 可以访问 jQuery.fx.off 来获得更多信息。 由于requestAnimationFrame()
特性的原因,绝对不要在setInterval
或setTimeout
方法中设置动画队列。 为了保护CPU资源, 支持requestAnimationFrame
的浏览器在当前窗口或标签失去焦点时,是不更新动画的。如果你通过setInterval
或setTimeout
方法在动画暂停时,持续向队列里添加动画,那么在窗口或标签重新获得焦点时,所有在队列中的动画都会被播放。 为了避免这个潜在的问题,可以在循环时,利用最后一个动画的回调函数,或者给元素添加.queue()
方法来避免这个问题,实现动画的继续播放。
示例:
让所有的段落滑上或滑下,用时 600 毫秒。
<!DOCTYPE html>
<html>
<head>
<style>
p { width:400px; }
</style>
<script src="jquery.min.js"></script>
</head>
<body>
<button>Toggle</button>
<p>
This is the paragraph to end all paragraphs. You
should feel <em>lucky</em> to have seen such a paragraph in
your life. Congratulations!
</p>
<script>
$("button").click(function () {
$("p").slideToggle("slow");
});
</script>
</body>
</html>
演示:
示例:
让隔开的 div 交替出现或消失。
<!DOCTYPE html>
<html>
<head>
<style>
div { background:#b977d1; margin:3px; width:60px;
height:60px; float:left; }
div.still { background:#345; width:5px; }
div.hider { display:none; }
span { color:red; }
p { clear: left; }</style>
<script src="jquery.min.js"></script>
</head>
<body>
<div></div>
<div class="still"></div>
<div style="display:none;">
</div><div class="still"></div>
<div></div>
<div class="still"></div>
<div class="hider"></div>
<div class="still"></div>
<div class="hider"></div>
<div class="still"></div>
<div></div>
<p><button id="aa">Toggle</button> There have been <span>0</span> toggled divs.</p>
<script>
$("#aa").click(function () {
$("div:not(.still)").slideToggle("slow", function () {
var n = parseInt($("span").text(), 10);
$("span").text(n + 1);
});
});
</script>
</body>
</html>