slideDown和slideUp错误

blo*_*ilk 4 javascript css jquery

我是jQuery的新手,我已经看到了内置的slideDown()/ slideUp()动画的问题.我正在使用灵活的宽度元素,当我使用该函数时,元素不会返回到它的全宽.我认为这与jQuery找到元素宽度的方式有关.我遇到了Safari 3和Firefox 3.1 for OS X中的错误.以下是该页面的html:

<div id="archive">
    <h2 class="first open">May</h2>
    <table width="100%" cellspacing="0" cellpadding="0" border="0" class="list">
         <tr class="first">
              <td width="65%"><a href="#">This month</a></td>
              <td align="right">Sunday, May 31   <input type="button" value="Edit"/></td>
         </tr>
    </table>
</div>
Run Code Online (Sandbox Code Playgroud)

和Javascript:

// Enable month names to re-open divs
$("#archive h2").not(":last").wrapInner("<a href='#'></a>").end().find
("a").click(function(event){

event.preventDefault();

var h2 = $(this).parent();

if (h2.hasClass("open")) { // Close

    h2.removeClass("open");
    h2.next().slideUp("fast");


} else { // Open

    h2.addClass("open");
    h2.next().slideDown("fast");


}

});
Run Code Online (Sandbox Code Playgroud)

这个问题可以通过包装in来解决,但随后在Firefox中出现一个新的错误,其中slideDown动画跳到最后.

任何帮助,将不胜感激.

谢谢,布兰登

Ren*_*soo 8

"跳跃"的发生是因为H2元素有边距并且根据CSS的规则,垂直边距会崩溃.

在动画开始之前,您将H2标题与表格分开.标题上面和下面有一些边距,表没有:

+--------------------------+
|                          |
|H2: April                 |
|                          |
+--------------------------+
||||||||||||||||||||||||||||
|TABLE in the middle       |
||||||||||||||||||||||||||||
+--------------------------+
|                          |
|H2: May                   |
|                          |
+--------------------------+
Run Code Online (Sandbox Code Playgroud)

然后桌子变得平滑动画,只留下两个标题:

+--------------------------+
|                          |
|H2: April                 |
|                          |
+--------------------------+
|                          |
|H2: May                   |
|                          |
+--------------------------+
Run Code Online (Sandbox Code Playgroud)

然后突然间,这些标题之间没有任何表格,边距会崩溃,给你这样的东西:

+--------------------------+
|                          |
|H2: April                 |
|                          |
|H2: May                   |
|                          |
+--------------------------+
Run Code Online (Sandbox Code Playgroud)

而那次崩溃导致了"跳跃".

一个可能的解决方案是用填充替换H2边距:

#archive h2 {
  margin: 0;
  padding: 0.5em 0;
}
Run Code Online (Sandbox Code Playgroud)

填充物不会崩溃.