如何删除背景图像更改闪烁

时间:2013-03-09 20:03:28

标签: javascript jquery html css

我有<div>以图片为背景。我有它,所以当有人在<div>上方盘旋时,背景图像会变为其他图像。问题是,当您的鼠标第一次悬停在<div>上时,背景图像会在加载时闪烁,并且您在几毫秒内看不到任何图像。

如何删除此闪烁?如何在用户实际悬停在<div>之前加载悬停图像,以便立即产生效果。

我更改<div>背景的代码非常简单:

#someID{
    background-image: *image source*;
}
#someID:hover{
    background-image: *Another image source*
}

我知道有一个解决方案,将两个所需的图像放在一个图像中,然后播放背景位置,但这不是一个选项,因为我总是将背景图像设置为:

image-size: 100% 100%;

4 个答案:

答案 0 :(得分:5)

在window.load()函数中,

  • 确保所有图像都已加载到页面上 仅供参考 - 您可能希望将每个图像的CSS位置设置为绝对值,顶部:0px和左:0px,所有这些都在父div中,其位置为:relative,具有一定的宽度和高度。

  • 将display:none设置为不应显示为DC_指出的

  • 使用jquery的hover methodclick method点击 图片。在你选择的方法函数中,fadeOut()当前的imag和 fadeIn()具有display:none的图像。

答案 1 :(得分:3)

您可以在DOM中的某个位置放置一个图像标记,引用您要预加载的图像,并为其指定样式display:none; visibility: hidden;。您也可以尝试使用JavaScript预加载解决方案,但它不会那么可靠。

答案 2 :(得分:1)

当CSS更改并重新加载时会发生闪烁。你看到的闪烁是重写CSS所需的微秒过渡。

我建议您将转场分层放在另一个背景之上。闪烁实际上#someID元素在瞬间完全透明。

伪代码:

#underLayer {
     background-image: *image source*;
}

#someID {
    background-image: *image source*;
}

/* On change for #someID */
#someID:hover {
    background-image: *image source*;
}
<!-- first div acts as a base layer to show underneath during transition flicker -->
<div id="underLayer">
    <div id="someID"> This div changes on hover</div>
</div>

答案 3 :(得分:0)

我有一个非常类似的问题。我相信你会发现它与此有关:cubiq.org/you-shall-not-flicker

简单的解决方案(来自文章):-webkit-transform:translate3d(0,0,0)