1
$(document).ready(function() {
    $("ul li").click(function() {
        $(this).find("p").slideToggle("normal");
        return false;
    });
});

使用这段 jQuery 代码,我可以让元素滑入和滑出。但问题是,当有人真正快速点击时,滑出只会一直到达到最新达到的高度的最大高度。

因此,如果有人真正快速点击,该元素只会滑出几个像素并向上滑动。如果他们再次单击以将其滑出,它只会滑出到上次达到的最大高度。

任何人都可以帮我解决这个问题以使这项工作正常吗?

PS:p元素的高度设置为auto,所以它会自动匹配里面内容的高度(也许这个细节会对你的回答有所帮助)。

4

3 回答 3

1

不要使用该click函数来附加点击事件,one而是使用:

$("ul li").one("click", doStuff);

function doStuff(){ 
   // do your stuff here
   $("ul li").one("click", doStuff); // Re-attach event
}

然后在函数中重新附加事件。

于 2012-04-23T14:50:14.180 回答
0

如果您想实际处理额外的点击(而不是忽略它们),那么您想使用.stop(true, true)停止上一个动画并将其跳转到结论,以便您的下一个动画可以按照您的意愿运行:

$(document).ready(function() {
    $("ul li").click(function() {
        $(this).find("p").stop(true, true).slideToggle("normal");
        return false;
    });
});

每当您通过用户点击触发动画时,您都应该知道.stop()并弄清楚在给定情况下要使用哪些参数。没有它,动画可能会堆积在队列中并按顺序运行,这通常不是您想要的。

这是关于它的jQuery 参考信息.stop()及其参数。

于 2012-04-23T15:17:38.910 回答
0

尝试这个:

$(document).ready(function() {
    $("ul li").click(function() {
        if ( ! $(this).find('p:animated').length)
        {
            $(this).find("p").slideToggle("normal");
            return false;
        }
    });
});
于 2012-04-23T14:51:13.540 回答