我们正在努力确保加载内容的JavaScript菜单在相关内容加载之前不会被命令覆盖,并通过.show('blind',500)展开,因为动画会运行很多次,它看起来不那么好。所以我有六个看起来像这样的选择器:
("#center_content:not(:animated)")
它似乎没有任何影响。仅限尝试:动画具有预期效果(它永远不会起作用,因为它不会启动动画),并且尝试:not(div)也具有此效果(因为#center_content是div)。出于某种原因,:not(:animated)似乎没有改变结果,因为即使我触发选择器而有问题的div是明显动画的,代码也会运行。我知道我之前已经取得了这样的成功,但这里的差异使我无法实现。
$("#center_content:not(:animated)").hide("blind", 500, function () {
var selector_str = 'button[value="' + url + '"]';
//alert(selector_str);
var button = $(selector_str);
//inspectProperties(button);
$("#center_content:not(:animated)").load(url, CenterContentCallback);
if (button) {
$("#navigation .active").removeClass("active");
button.addClass("active");
LoadSubNav(button);
}
});
我希望这能提供足够的背景。我觉得第二个选择器是矫枉过正的(因为它只会在第一个选择器成功的情况下运行),但我不知道这会如何导致它以这种方式运行。
以下是似乎在其他情况下工作的片段:
function clearMenus(callback) {
$('[id$="_wrapper"]:visible:not(:animated)').hide("blind", 500, function() {
$('[id^="edit_"]:visible:not(:animated)').hide("slide", 200, function() {
callback();
});
});
}
这里,动画队列而不是互相中断,但我发现选择器似乎仍然没有工作 - 动画和相关的加载事件根本不应该运行,因为选择器应该失败。虽然排队是动画显示的好行为,但它让我意识到我似乎从来没有让这个选择器工作。我错过了什么吗?
答案 0 :(得分:1)
有时使用.stop()
并在开始新动画之前停止当前动画会很有帮助。
$("#center_content").stop().hide("blind", 500, function () {});
真的取决于它在您的环境中的行为方式。请记住,.stop()
将停止动画(例如,隐藏或褪色的中途)
答案 1 :(得分:0)
我不知道我是否理解正确,但是如果你想确保用户在当前动画时不再触发菜单动画(导致它排队动画并看起来很迟钝,这可行并且应该有所帮助我使用if-statement
。在任何鼠标悬停/关闭动画之前,我添加了.stop(false, true)
。
$('whatever').click(function(){
//if center_content is not currently animated, do this:
if ($("#center_content").not(":animated")) {
$(this).hide(etc. etc. etc.)
}
//else if center_content IS currently animated, do nothing.
else {
return false;}
});
我在别处找到的另一个例子:
if($("#someElement").is(":animated")) {
...
}
if($("#someElement:animated").length) {
...
}
// etc
然后你可以这样做:
$("#showBtn").attr("disabled", $("#someElement").is(":animated"));