我需要以编程方式触发悬停伪类(如果可能带有冒泡效果,否则我将被迫调用更改所有元素父级的更改)。
我无法控制html页面,因此无法将css从:hover更改为.hover以更新HTMLElement的类为.hover。
这是否可能?
请不要使用jQuery。 我不能在我的项目中使用JQuery。
提前致谢。
更新
我创建了一个类似于CSS加载器的代理,因此现在在加载css之前,它会经过我的“代理”,并将规则从:hover更改为.hoverclass。
好吧,现在悬停效果运行得很好,但是由于悬停模拟的冒泡,我有一些严重的性能问题。
以下是一些代码:
var actualHoveredElements = new Array();
var hoverAddedCount = 0;
var maxHoveredElems = 5;
function changeHover(newElement, oldElement){
var oldHoveredElements = actualHoveredElements.slice();
var remainingElements = setHoverForParentsOfElement(newElement, oldHoveredElements);
for(var i = 0; i < remainingElements.length; i++){
var notHoveredElement = remainingElements[i];
var actualIndex = actualHoveredElements.indexOf(notHoveredElement);
if(actualIndex > -1){
actualHoveredElements.splice(actualIndex, 1);
}
notHoveredElement.classList.remove("hoverclass");
}
hoverAddedCount = 0;
changeHoverTimeout = null;
}
function setHoverForParentsOfElement(element, oldHoveredElements){
var index = -1;
if(oldHoveredElements != "undefined" && oldHoveredElements.length > 0)
index = oldHoveredElements.indexOf(element);
if(index > -1){
oldHoveredElements.splice(index, 1);
} else {
actualHoveredElements.push(element);
element.classList.add("hoverclass");
}
if(element.tagName != "BODY" && element.tagName != "HTML"){
if(hoverAddedCount < maxHoveredElems-1){
hoverAddedCount ++;
oldHoveredElements = setHoverForParentsOfElement(element.parentNode, oldHoveredElements);
}
}
return oldHoveredElements;
}
你可以看到,我也尝试限制悬停冒泡的数量为N,但性能问题仍然存在。
hover
状态,为什么不通过JS手动获取:hover
的CSS规则并应用于元素呢? - Derek 朕會功夫