event.stopPropagation() 不起作用
event.stopPropagation() doesnt work
我有一些按钮彼此靠近。当悬停在它们上面时,它们的 child 弹出,当悬停完成时,效果消失了。
问题出在 css (:hover) 我无法阻止紧张状态。所以我尝试使用 mouseenter 和 mouseleave 并使用 stopPropagation 函数来防止在不需要的悬停在 child 触发器 parent eventListener.
上时出现抖动状态
但是它不起作用,我检查了其他答案,但不知道我的问题是什么
这是我的link作品
完整代码>> https://jsfiddle.net/fe3m74xn/
var el = document.querySelectorAll('#slideShow_control a');
var slideShow_control_hoverIn = function(e, i) {
e.stopPropagation();
var bool = e.target.classList.contains('hover');
el.forEach.call(el, function(e){e.classList.remove('hover')});
if(!bool) {
e.target.classList.toggle('hover');
}
};
var slideShow_control_hoverOut = function(e, i) {
e.stopPropagation();
el.forEach.call(el, function(e){e.classList.remove('hover')});
};
el.forEach.call(el,function(e){e.addEventListener('mouseenter',slideShow_control_hoverIn,false)});
el.forEach.call(el,function(e){e.addEventListener('mouseleave',slideShow_control_hoverOut,false)});
忘记 event.stopPropagation() 并使用 pointer-events
CSS 属性 代替:它能够将任何元素设置为对鼠标交互透明。
仅在 <a>
未悬停时在 "pop out" 元素上使用它:
#slideShow_control figure {
/* ... */
pointer-events: none;
}
#slideShow_control a:hover figure {
/* ... */
pointer-events: all;
}
我还在悬停时向 <a>
添加了一个不可见的伪元素,如果您的鼠标光标悬停在 link 元素上并且您希望它保持可见:
#slideShow_control > a:hover:after {
content: '';
position: absolute;
width: 20px;
height: 20px;
left: 0;
top: -20px;
/* background-color: red; */ /* uncomment to understand */
}
这是您编辑的 Fiddle 的 link:https://jsfiddle.net/m6ephL81/
我有一些按钮彼此靠近。当悬停在它们上面时,它们的 child 弹出,当悬停完成时,效果消失了。
问题出在 css (:hover) 我无法阻止紧张状态。所以我尝试使用 mouseenter 和 mouseleave 并使用 stopPropagation 函数来防止在不需要的悬停在 child 触发器 parent eventListener.
上时出现抖动状态但是它不起作用,我检查了其他答案,但不知道我的问题是什么
这是我的link作品 完整代码>> https://jsfiddle.net/fe3m74xn/
var el = document.querySelectorAll('#slideShow_control a');
var slideShow_control_hoverIn = function(e, i) {
e.stopPropagation();
var bool = e.target.classList.contains('hover');
el.forEach.call(el, function(e){e.classList.remove('hover')});
if(!bool) {
e.target.classList.toggle('hover');
}
};
var slideShow_control_hoverOut = function(e, i) {
e.stopPropagation();
el.forEach.call(el, function(e){e.classList.remove('hover')});
};
el.forEach.call(el,function(e){e.addEventListener('mouseenter',slideShow_control_hoverIn,false)});
el.forEach.call(el,function(e){e.addEventListener('mouseleave',slideShow_control_hoverOut,false)});
忘记 event.stopPropagation() 并使用 pointer-events
CSS 属性 代替:它能够将任何元素设置为对鼠标交互透明。
仅在 <a>
未悬停时在 "pop out" 元素上使用它:
#slideShow_control figure {
/* ... */
pointer-events: none;
}
#slideShow_control a:hover figure {
/* ... */
pointer-events: all;
}
我还在悬停时向 <a>
添加了一个不可见的伪元素,如果您的鼠标光标悬停在 link 元素上并且您希望它保持可见:
#slideShow_control > a:hover:after {
content: '';
position: absolute;
width: 20px;
height: 20px;
left: 0;
top: -20px;
/* background-color: red; */ /* uncomment to understand */
}
这是您编辑的 Fiddle 的 link:https://jsfiddle.net/m6ephL81/