2

我正在开发一个网站,该网站需要 div 的背景图像在链接悬停时更改。

它的工作方式是:

<a href="index.php" title="Home ">
 <li id="current">
   Home<br \>
   <span class="nav_desc">Text text</span>
 </li>
</a>
<a href="about.php" title="About" id="about-link" 
   onmouseover="hover('about');" 
   onmouseout="hoverClear();">
 <li id="about">
  About<br \>
  <span class="nav_desc">About me</span>
 </li>
</a>
<a href="more.php" title="More" 
   onmouseover="hover('portfolio');" 
   onmouseout="hoverClear();">
 <li id="more">
  More<br \>
  <span class="nav_desc">More More More
  </span>
 </li>
</a>

js:

function hoverClear(){
    $('.navReflect').css("background-image", "url(images/"+page+"/reflect.png)");
}
function hover(hover){
    $('.navReflect').css("background-image", "url(images/"+page+"/reflect-"+hover+".png)");
}

因此,当链接悬停时,它会执行更改 div 背景图像的功能。但问题是当页面第一次加载并且链接第一次悬停时,图像的加载速度很慢。

但是一旦他们加载它就可以无缝运行。我希望这是一个需要加载的问题。那么有没有一种方法可以预先加载图像并且仍然使用相同的方法进行悬停。

4

4 回答 4

6

将您的图像堆叠为一个图像,然后添加一个将图像的背景属性转换为适当偏移量的类。

这不仅将多个图像转换为一个 HTTP 请求,还意味着您不必费心编写代码来预加载图像的悬停状态。

这称为精灵表

于 2011-10-06T11:57:15.060 回答
3

您可以制作精灵图像,即将两个图像合二为一。然后您只需更改背景位置以显示图像的另一部分。例如,如果元素高 20 像素,则将背景位置移动 20 像素:

function hoverClear(){
  $('.navReflect').css("background-position", "0 0");
}

function hover(hover){
  $('.navReflect').css("background-position", "0 -20px");
}

由于它只是一个图像,因此从一开始就加载了替代外观。这也将减少对服务器的请求数量。

您可以像这样将更多图像放在一起。您可以在我的网站右上角看到一个示例,其中一个图像用于两个不同的标志,每个标志处于两个不同的状态。

于 2011-10-06T11:59:08.040 回答
1

预加载图像非常简单,例如:

var img = new Image();
img.src = "/path/to/image.jpg";

这可能在某处的 window.load 或 dom:ready 事件中

于 2011-10-06T11:53:59.453 回答
0

你可以使用这个解决方案。 http://www.gayadesign.com/diy/queryloader-preload-your-website-in-style/

于 2011-10-06T12:05:56.427 回答