我有下面的代码,它只是隐藏主菜单并显示下一个预定菜单,它完全按照我的意愿工作,但并不总是这样,主菜单不会隐藏,所以你最终会有两个重叠的菜单,这让我很困扰。
为了简单起见,我缩短了代码,只显示这个特定菜单的事件。
$('.tileButton').click(function() {
$('.bottomPiece', this).animate( { bottom: "+=50px", easing: "easeInOutBack" }, 'fast', function() {
$('#mainMenu').hide("drop", {direction: "down", easing: "easeInOutBack"}, 1000, function() {
$('#backButton').fadeIn(300);
});
});
});
$('#media').click(function() {
$('body').animate({ backgroundPositionX: "-=1000px", backgroundPositionY: "+=1000px" }, 1500, function() {
$('#videoPlayerParent').show("drop", {direction: "down", easing: "easeInOutBack"}, 750);
});
});
由于我在这方面还很幼稚,我不太确定,但我怀疑这是因为我同时调用了同一项目上的两个点击事件。但我不确定这一点,而且问题发生的速度非常不可预测,所以测试很难。有时它可以连续工作20次,但通常发生在你最意想不到的时候
这是双击事件的问题还是我做错了什么?
我创建了一个jsfiddle来演示它。缺少大部分功能,这是一个个人项目,只是为了学习web编码。我将大部分代码添加到了下面链接的jsfiddle中,并没有完全按照预期显示。(Jsfidle也是新手)但我只是在jsfiddle中也遇到了同样的问题。
http://jsfiddle.net/9r545swy/2/
在这种情况下,特别谈论媒体按钮,因为这是我迄今为止添加的唯一页面。
有时会发生的事情:https://i.stack.imgur.com/2ccw8.jpg
JSFiddle有点乱,所以这里有一个实际的例子:http://flyingwhal.es/
(在chrome上效果最好,因为它根本没有优化)
更新:
问题是可能是Stella发现的错误的结果,因此这不是一个答案,但希望能把事情指向正确的方向。
----------------------------------------------------------------------------------------------------------------------
这个问题很难解决,我认为当你在玩家动画事件完成之前很快按下后退按钮时,就会发生这种情况,当动画仍在滚动并且玩家没有显示时,就会出现这种代码:
$('#mainMenu').hide();
$('#videoPlayerParent').hide();
但由于时间原因,在你隐藏它之后,这个代码就会出现:
$('#videoPlayerParent').show("drop", {direction: "down", easing: "easeInOutBack"}, 750);
导致您自己描述的页面重叠。
您的解决方案重点将是使计时器保持一致,或者像我一样实现某种临时禁用。必须有一个更优雅的解决方案,你可以在上面工作。我只是希望为你指明正确的方向。
我的解决方案:
加载主菜单功能变为:
var loadHomeMenu = function () {
$('#mainMenu').hide();
//Disable the player as soon as you want to display the front page;
$('#videoPlayerParent').addClass('disabled').hide();
setTimeout(function () {
$('#mainMenu').show("drop", {
direction: "down",
easing: "easeInOutBack"
}, 1000, function () {});
},
200);
};
媒体点击功能变为:
$('#media').click(function () {
//Removing disabled when calling for the menu;
$('#videoPlayerParent').removeClass('disabled');
$('body').animate({
backgroundPositionX: "-=1000px",
backgroundPositionY: "+=1000px"
}, 1500, function () {
//Checking if the player wasn't disabled meanwhile, and if not executing the show animation;
if (!$('#videoPlayerParent').hasClass('disabled')) {
$('#videoPlayerParent').show("drop", {
direction: "down",
easing: "easeInOutBack"
}, 750);
}
});
});
感谢您的评论,感谢@Null帮助我在这里找到确切的原因。它发生的真正原因是;我对.haverage()事件调用.stop()。因此,如果你在点击按钮后将鼠标悬停在按钮的外侧/内侧,动画显然会停止,菜单也不会隐藏。这就是为什么它以非常不可预测的速度发生,只是在交互过程中很难注意到的事情
所以我更改了代码,在动画期间添加了一个类,如果存在,则禁用悬停事件。当菜单重新弹出时,该类被删除
发现我可以在.animation()
函数中使用{queue: false}
。
总是小事。。但是非常感谢。