jquery - JQuery 停止任何其他事件和函数,直到此事件完成
问题描述
所以在我的网站上,我有一个圈子。当您将鼠标悬停在圆圈上时,它会增长并占据整个页面并成为一个菜单。这是用 jQuery 完成的:
$(".fullScreenMenu").hover(function(){
$('.fullScreenMenuText').fadeOut();
$(".fullScreenMenu").css("transform", "scale(20)", "top", "-30vh", "left","-30vw", "transition-duration", "2s");
$("#menuTest").fadeIn();
});
这工作得很好。但是,我不希望它在用户离开悬停时关闭。相反,我在导航菜单上弹出了一个“x”。
$(".fullScreenMenu").hover(function(){
$('.fullScreenMenuText').fadeOut();
$(".fullScreenMenu").css("transform", "scale(20)", "top", "-30vh", "left","-30vw", "transition-duration", "2s");
$("#menuTest").fadeIn();
});
$('#closeBtn').click(function(){
$(".fullScreenMenu").css("transform", "scale(1)", "top", "80vh", "left","-2vw", "transition-duration", ".5s");
$("#menuTest").fadeOut();
function showCircleText(){
$('.fullScreenMenuText').show();
}
setTimeout(showCircleText, 500);
});
.close {
position: fixed;
top: 5vh;
text-align: right;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- FULL SCREEN MENU -->
<div class="fullScreenMenu">
<div class="fullScreenMenuText">Full Screen Menu</div>
</div>
<div class="row" id="menuTest">
<div class="text-center col-12 mt-5">
<div class="display-2 text-center" style="z-index: 200">This is a Menu Test</div>
<h1 style="z-index: 200">This is a Menu Test</h1>
</div>
<div class="close col-12">
<h1><i class="fas fa-times" id="closeBtn"></i></h1>
</div>
</div>
这也很好用……有时。如果在单击“x”后完全移动鼠标,它会重新触发 $(".fullScreenMenu").hover(function(){...}; 函数。基本上,我想做的就是防止任何其他 JQuery 工作 1 秒以完成关闭动画。
我试过 event.stopImmediatePropagation(); 和 event.stopPropagation(); 但这些都不起作用(根据他们的描述,我认为他们无论如何都不会起作用)。
想法?
解决方案
您需要设置一个标志,如 canAnimate,当单击关闭按钮且未打开或在标志为真时悬停时执行任何操作时。
var canAnimate = true;
$(".fullScreenMenu").hover(function(){
if(canAnimate){
$('.fullScreenMenuText').fadeOut();
$(".fullScreenMenu").css("transform", "scale(20)", "top", "-30vh", "left","-30vw", "transition-duration", "2s");
$("#menuTest").fadeIn();
}
});
function showCircleText(){
$('.fullScreenMenuText').show();
canAnimate = true;
}
$('#closeBtn').click(function(){
canAnimate = false;
$(".fullScreenMenu").css("transform", "scale(1)", "top", "80vh", "left","-2vw", "transition-duration", ".5s");
$("#menuTest").fadeOut();
setTimeout(showCircleText, 500);
});
推荐阅读
- bixby - Bixby:如何在 Note 9 中测试私人提交
- azure - 公有云服务如何设置内部环境?
- go - 如何从堆栈跟踪中删除绝对路径?
- php - 如何在 wordpress 中添加用户自定义元数据
- reactjs - 无法在 Windows 7 上安装 ReactJS 库
- python - 确认烧瓶安装后,Flask app no module named flask 错误在 elasticbeanstalk
- javascript - 如何从排序中排除/跳过项目?
- r - 无法让 dCast 工作 - 缺少聚合函数:默认为长度
- redis - 故障转移中止无好从主 mymaster
- python - 实现具有重复值的二叉搜索树