如何使用javascript正确切换图像?

时间:2014-04-01 03:21:56

标签: javascript jquery html css

我的页面上有一些复杂的div结构,我想切换一些图像(悬停时),但是我不能直接用css设置悬停,因为我想悬停的图像是在另一个透明图像后面。因此我在顶部创建了透明覆盖。悬停叠加层时,会切换指定的div的背景。

HTML:

<div id="image"></div>
<div id="overlay"></div>

CSS:

#image {
    position: absolute;
    width: 300px;
    height: 300px;
    background: url(myImage.jpg);
}

#overlay {
    position: absolute;
    width: 300px;
    height: 300px;
}

这里是jQuery做切换:

$(function() {
     $("#overlay").hover(function() {
          $("#image").css({
              "background": "url(myNewImage.jpg)"
          });
     }, function() {
          $("#image").css({
              "background": "url(myImage.jpg)"
          });
     });
});

它可以毫无问题地切换图像。问题是图像被切换时会有一个小的延迟,因此片刻(小于秒)你可以看到空白背景(当#image div没有用任何一个图像填充时)。

另一方面,当你使用没有jQuery的普通CSS来切换这样的图像时(就是这样) 在这种情况下是不可能的)然后没有这样的延迟。

那么,使用jQuery,你会如何防止这种延迟发生?或者有更好的方法来解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

您的问题是您通过jQuery加载的图像未预加载。当您切换图像时,图像需要一秒钟才能下载。当您在CSS中有图像URL时,所有这些图像都会与样式表一起下载。问题的解决方案是预加载图像。

答案 1 :(得分:1)

我不是百分百肯定,因为我不知道完整的情况,但是你提供的信息应该可以使用纯CSS:

#overlay:hover #image {
    background: url(anotherImage.jpg);
}

关于显示图片的延迟,您可以使用精灵。将两张图片放在一个文件中(例如在彼此上方),并在悬停时更改背景图像位置。

答案 2 :(得分:1)

您需要设置多个背景图像,因此两个图像都已加载。 在悬停时,切换background-position

类似的东西:

$(function() {
     $("#overlay").hover(function() {
          $("#image").css({
              "background": "url(myNewImage.jpg) top left, url(myImage.jpg) 9999px 9999px"
          });
     }, function() {
          $("#image").css({
              "background": "url(myNewImage.jpg) 9999px 9999px, url(myImage.jpg)  top left"
          });
     });
});
#image {
    position: absolute;
    width: 300px;
    height: 300px;
    background:url(myNewImage.jpg) 9999px 9999px, url(myImage.jpg)  top left;
}