Ada*_*kis 19 javascript dom google-chrome mouseevent
我有一个绝对定位的div,我试图跟踪鼠标何时移动它以及鼠标何时离开.不幸的是,单击框中的文本偶尔会触发mouseleave事件.
演示:js小提琴
我怎么能阻止这个?
JS
let tooltip = document.createElement('div');
tooltip.innerHTML = 'HELLO WORLD';
tooltip.setAttribute('class', 'tooltip');
tooltip.style.display = 'none';
tooltip.onclick = evt => {
console.log('click')
evt.stopPropagation();
}
tooltip.ondblclick = evt => {
console.log('double click')
evt.stopPropagation();
}
tooltip.onmouseenter = () => {
console.log('tooltip mouse OVER');
}
tooltip.onmouseleave = () => {
console.log('tooltip mouse OUT')
}
tooltip.style.left = '290px';
tooltip.style.top = '50px';
tooltip.style.display = 'block';
document.body.appendChild(tooltip);
Run Code Online (Sandbox Code Playgroud)
HTML
<div style="width: 300px; height: 300px; background-color: lightblue">
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
.tooltip {
position: absolute;
/*display: none;*/
left: 100;
top: 100;
min-width: 80px;
height: auto;
background: none repeat scroll 0 0 #ffffff;
border: 1px solid #6F257F;
padding: 14px;
text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
Dre*_*nai 12
我之前看过这里的答案和评论,但最近找到了一种检查mouseleave事件是否被错误触发的方法
我在mouseleave处理程序中添加了一个检查:
private handleMouseLeave(event: MouseEvent) {
if(event.relatedTarget || event.toElement){
// do whatever
}
// otherwise ignore
}
Run Code Online (Sandbox Code Playgroud)
根据我在Chrome v64上的测试,null只要快速点击导致mouseleave事件被触发,这两个值都将是.这relatedTarget是为了较旧的浏览器兼容性
注意:null如果鼠标离开target元素并进入浏览器(例如选项卡,菜单等)或离开浏览器窗口,这两个值也将是.对于我的目的,这不是一个问题,因为它是我正在使用的滑动菜单,并且离开浏览器窗口不应该在我的特定情况下关闭菜单.
注意:mouseleave我的菜单每次点击都会触发最新的Firefox版本(2018年2月)!将不得不调查它
tri*_*cot 10
这似乎是一个错误(我可以在Chrome中重现它,点击鼠标按下并且鼠标在彼此之后快速发生).
我建议通过检查事件被触发时鼠标是否仍然在元素上来解决此问题:
tooltip.onmouseleave = (e) => {
if (tooltip === document.elementFromPoint(e.clientX, e.clientY)) {
console.log('false positive');
return;
}
console.log('tooltip mouse OUT')
}
Run Code Online (Sandbox Code Playgroud)
缺点是当浏览器窗口失去焦点时,这也被认为是误报.如果这对您来说是一个问题,请检查此答案.
| 归档时间: |
|
| 查看次数: |
3702 次 |
| 最近记录: |