能否使用JavaScript事件模拟悬停效果?我尝试注入目标元素的mouseover事件,但没有成功。
例如,如果有一个具有悬停选择器的链接,是否可以使用JavaScript事件“悬停”在其上?基本上,我想触发CSS悬停。您可以假设我不能使用jQuery。
能否使用JavaScript事件模拟悬停效果?我尝试注入目标元素的mouseover事件,但没有成功。
例如,如果有一个具有悬停选择器的链接,是否可以使用JavaScript事件“悬停”在其上?基本上,我想触发CSS悬停。您可以假设我不能使用jQuery。
function (fnOver, fnOut) {
return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
}
// module for swapping out images on hover
var imageSwap = (function ModuleFactory() {
"use strict";
var imageContainer = document.getElementById("image-container"),
image = document.getElementsByClassName("image")[0],
imageSource1 = 'path/to/your/image1',
imageSource2 = 'path/to/your/image2';
function handleImageSwap(e) {
if (e.target.id === "image-container") {
image.setAttribute("src", imageSource2);
e.target.addEventListener("mouseleave", function _handler_() {
image.setAttribute("src", imageSource1);
e.target.removeEventListener("mouseleave", _handler_, false);
}, false);
}
}
function init() {
imageContainer.addEventListener("mouseenter", handleImageSwap, false);
}
var publicAPI = {
init: init
};
return publicAPI;
})();
document.addEventListener("DOMContentLoaded", imageSwap.init(), false);
实际上,CSS hover事件比仅绑定这两个事件mouseenter
和mouseleave
更方便。因此,需要付出一些额外的努力,包括:
1.克隆元素
2.添加鼠标进入事件监听器
3.递归地重复步骤1
、2
并在鼠标离开时恢复克隆的元素
这是我的草稿。
function bindHoverEvent(element,listener){
var originalElement = element.cloneNode(true);
element.addEventListener('mouseenter',listener);
element.addEventListener('mouseleave',function(){
bindHoverEvent(originalElement,listener);
this.parentNode.replaceChild(originalElement,this);
});
}
cloneNode
不会复制事件监听器,因此您需要手动重新绑定克隆元素及其所有子元素的事件。是的,您只需将onMouseOver和onMouseOut事件添加到相关元素即可。
像这样:
<div class="something" onmouseover="hover(this);" onmouseout="unhover(this);">
然后让您的JavaScript更改元素的类(如果您想要两个不同的CSS类),或直接修改元素的样式。您可以像这样做。
<script>
function hover(element) {
element.setAttribute('class', 'something hover');
}
function unhover(element) {
element.setAttribute('class', 'something');
}
</script>