【发布时间】:2009-08-26 15:12:36
【问题描述】:
我尝试使用 jQuery 的切换功能滑入和滑出 DIV,但结果在动画的开始和/或结束时总是跳跃。这是我使用的js代码:
$(document).ready(function(){
$('#link1').click(
function() {
$('#note_1').parent().slideToggle(5000);
}
);
还有 HTML:
<div class="notice">
<p>Here's some text. And more text. <span id="link1">Test1</span></p>
<div class="wrapper">
<div id="note_1">
<p>Some content</p>
<p>More blalba</p>
</div>
</div>
</div>
您还可以在此处查看完整示例:jQuery Slide test
我通常使用 Mootools,我可以毫无问题地制作这张幻灯片。但是我正在 Django 中开始一个新项目,并且 Django 中的大多数应用程序都使用 jQuery。因此,在阅读了jQuery vs Mootools 之后,我决定这将是一个开始使用 jQuery 的好时机。所以我的第一个需要是滑动这个 DIV。而且它不能正常工作。
我进行了更多搜索,发现这是 jQuery 中的一个旧错误,其中边距和填充应用于 DIV。解决方案是将 DIV 包装在另一个 DIV 中。它并没有解决我的问题。
进一步搜索我发现了这篇文章Slidedown animation jumprevisited。它修复了一端的跳转,而不是另一端的跳转(Test2 in jQuery Slide test)。
在 Stack Overflow 上,我发现了这个 jQuery IE jerky slide animation。在 cmets 中,我看到问题出在 DIV 内的 P 标签上。如果我将 P 标签替换为 DIV 标签来解决问题,但这不是一个正确的解决方案。
最后我发现了这个Weird jQuery behavior slide。阅读它,我了解到通过从 P 标签切换到 DIV 解决的问题是 P 的边距(DIV 中不存在)和元素之间边距的折叠。因此,如果我将边距切换为填充,它可以解决问题。但是我放松了边距的折叠行为,折叠了我想要的。
老实说,我可以说我对 jQuery 的第一次体验并不是很好。如果我想使用 jQuery 中最简单的效果之一,我必须不使用正确的函数 (slideToggle),而是使用一些手工制作的代码并将 DIV 包装在另一个 DIV 中并将边距切换到填充,弄乱我的布局。
我错过了一个更简单的解决方案吗?
正如 krdluzni 建议的那样,我尝试使用 animate 方法编写自定义脚本。这是我的代码:
var $div = $('#note_2').parent();
var height = $div.height();
$('#link2').click(
function () {
if ( $div.height() > 0 ) {
$div.animate({ height: 0 }, { duration: 5000 }).css('overflow', 'hidden');
} else {
$div.animate({ height : height }, { duration: 5000 });
}
return false;
});
但这也不起作用,因为 jQuery 总是在动画结束时将溢出设置为可见。因此,DIV 在动画结束时重新出现,但覆盖在其余内容上。
我也尝试了 UI.Slide(以及 Scale 和 Size)。它可以工作,但 DIV 下方的内容不会随动画移动。它只会在动画的结束/开始处跳转以填补空白。我不想要那个。
更新:
解决方案的一部分是在任何事情之前动态设置容器 DIV 的高度。这解决了一个跳跃。但不是利润率下降的原因之一。代码如下:
var parent_div = $("#note_1").parent();
parent_div.css("height", parent_div.height()+"px");
parent_div.hide();
第二次更新:
您可以在此页面上的 jQuery 自己的网站上看到错误(示例 B): Tutorials:Live Examples of jQuery
第三次更新:
用 jQuery 1.4 试过了,没有机会了 :-(
【问题讨论】:
-
现在,我很难相信 jQuery 的“少写,多做”的口号。
-
那么这绝对不是mootools等价功能的问题?
-
你说得对,jQuery 在隐藏动画的末尾设置了 display:none 。 Mootools 不这样做。
标签: javascript jquery