javascript – CSS:覆盖元素高度0后悬停重新渲染

我有一个元素,我称之为另一个元素,我称之为前面.

返回在CSS中设置以在悬停时更改颜色.当悬停时,前面被设置为在1秒延迟后消失,并且前面元素上的鼠标指针现在位于后面元素上.

通过在JavaScript中设置高度:0,前面消失.在Front消失并且鼠标ointer悬停在Back上之后,浏览器不会在Back上重新渲染悬停效果,这会导致其颜色未按预期更改.

当我通过自然地从DOM中删除Front来尝试相同的示例时,它可以正常工作.但是,我的应用程序要求我通过设置height:0来执行此操作.

您可以在以下示例中自行尝试.你会看到一个红色的盒子和一个蓝色的盒子.红色是正面,蓝色是背面.将鼠标指针移动到红色框时,红色框的颜色变为绿色.当您将鼠标移动到蓝色框上时,一秒钟后它将消失.

示例的要点是显示蓝框消失后,鼠标指针现在悬停在红色框上,因此应该变为绿色.

this example中,蓝色框完全从DOM中移除,它的工作原理与预期的一样.

但是在this example中,通过设置高度来移除蓝色框:0.消失后,红色元素在移动鼠标之前不会变为绿色.

有没有办法强制浏览器重新渲染?

问题仍然存在于Google Chrome和Microsoft Edge中. Firefox运行良好.

解决方法:

您可以只在foo中添加一个类,使其在条消失时变为绿色,然后在mouseleave上恢复正常,而不是试图强制浏览器重新渲染.

CSS:

#foo.hover, /* <- I just added this */
#foo:hover {
    background-color: green;
}

JavaScript的:

var
  foo = document.getElementById("foo"),
  bar = document.getElementById("bar");

/* Set the 'mouseenter' event for bar to set the height to 0 and & the 'hover' class. */
bar.onmouseenter = function() {
  setTimeout(function() {
    bar.style.height = 0;
    foo.classList.add("hover");
  }, 1000);
}

/* Set the 'mouseleave' event for bar to remove the 'hover' class. */
bar.onmouseleave = function() {
  foo.classList.remove("hover");
}

查看以下代码段以获得可视化表示.

片段:

/* --- JavaScript --- */
var
  foo = document.getElementById("foo"),
  bar = document.getElementById("bar");

/* Set the 'mouseenter' event for bar. */
bar.onmouseenter = function() {
  setTimeout(function() {
    /* Set the height to 0. */
    bar.style.height = 0;
    
    /* Add the 'hover' class. */
    foo.classList.add("hover");
  }, 1000);
}

/* Set the 'mouseleave' event for bar. */
bar.onmouseleave = function() {
  /* Remove the 'hover' class. */
  foo.classList.remove("hover");
}
/* --- CSS --- */
#foo {
  width: 200px;
  height: 200px;
  background-color: red;
  position: absolute;
  top: 10px;
  left: 15px;
}
#foo.hover,
#foo:hover {
  background-color: green;
}
#bar {
  width: 200px;
  height: 200px;
  background-color: blue;
  position: absolute;
  top: 100px;
  left: 100px;
}
<!-- HTML -->
<div id = "foo"></div>
<div id = "bar"></div>
上一篇:javascript – 增加SVG元素的悬停区域


下一篇:类似hover的css伪类注解