javascript - 如果光标已经在元素上,则在页面加载时触发鼠标输入事件
问题描述
我已经mouseenter
在我的页面上绑定了一个事件与一些元素,我在允许 mouseenter 的实际功能运行之前检查页面是否已加载。一切正常,但问题是,如果用户在页面加载之前已经将光标放在元素上,则用户将被迫首先移出 div,然后再次将光标移到 div 内以触发事件,这使得这很尴尬。
有没有一种方法可以检查光标在页面加载时的位置,例如它悬停在哪个元素上并相应地触发 mouseenter 事件?
为了更好地理解我的问题,我附上了一个片段。
提前致谢。
let pageLoaded;
/* assuming page load takes 3 seconds*/
window.onload = () => setTimeout(() => pageLoaded = true, 3000)
$(document).ready(() => {
$('#box').mouseenter(() => {
/* continue only if the page has been loaded */
if (!pageLoaded)
return;
$('body').append('mouse entered after page load <br>')
})
})
#box {
height: 150px;
width: 150px;
background-color: green;
margin:10px;
cursor:pointer;
float: left;
}
p {
font-style: italic;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="box">
</div>
<p> I want the mouseenter event to fire (on page load ~ "3 seconds here"), if the cursor was already placed inside the green box before the page loaded. </p>
解决方案
** 编辑后的答案 ** 由于隐藏框不是一个选项,因此请使用布尔值来跟踪用户是否在页面加载之前使用 mouseenter 和 mouseleave 在框上。然后,如果页面加载后布尔值为 true,则手动调用与 mouseover 事件相同的逻辑。然后删除 mouseenter 和 mouseleave 侦听器。
let pageLoaded;
let insideBox = false;
/* assuming page load takes 3 seconds*/
window.onload = () => setTimeout(function() {
pageLoaded = true;
if (insideBox) {
// Manually call the mouseover logic here
$('body').append('mouse entered BEFORE page load <br>')
}
$('#box').off('mouseenter').off('mouseleave')
}, 3000)
$(document).ready(() => {
$('#box').on('mouseenter', function() {
insideBox = true;
})
$('#box').on('mouseleave', function() {
insideBox = false;
})
$('#box').mouseover(() => {
/* continue only if the page has been loaded */
if (!pageLoaded)
return;
$('body').append('mouse entered after page load <br>')
})
})
#box {
height: 150px;
width: 150px;
background-color: green;
margin:10px;
cursor:pointer;
float: left;
}
p {
font-style: italic;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="box">
</div>
<p> I want the mouseenter event to fire (on page load ~ "3 seconds here"), if the cursor was already placed inside the green box before the page loaded. </p>
推荐阅读
- r - r left_join 排除要加入的列
- linux - 在 Linux find 命令中包含所有字符
- reactjs - React hooks如何在初始useEffect之后跳过特定的useEffect
- javascript - 在 vueJs 项目中隐藏一些短语
- html - 除非我删除 div 的浮动属性,否则 html 文档的正文不会超出 div
- python - Python pandas 数据框 set_name 长度问题,需要一个参数,但有两个
- bash - 将输出作为文件名执行
- python - Wand 无法正确设置图像分辨率
- java - 我可以在 Spring 中注入一个 bean 的所有 impl 的 Map
- css - 从 Classpath 导入 Less-Files (Bootstrap Webjars)