Html / JavaScript预加载图片

时间:2014-01-14 08:52:50

标签: javascript html css flicker

我有一个带有一些img链接的页面。当图像处于hover状态时,我会更改页面内div的背景。 javascript代码如下:

function hover(element) {
  if(element.id=="first"){
      element.setAttribute('src', './images/first_active_2.png');
      back.style.backgroundImage = 'url(./images/1.png)';
      text.src = './images/text_first_active.png';
  }
  if(element.id=="second"){
      element.setAttribute('src', './images/second_active_2.png');
      back.style.backgroundImage = 'url(./images/3.png)';
      text.src = './images/text_second_active.png';
  }
}

function unhover(element) {
  if(element.id=="first"){
    element.setAttribute('src', './images/first_inactive_2.png');
    text.src = './images/text_first_inactive.png';
  }
  if(element.id=="second"){
    element.setAttribute('src', './images/second_inactive_2.png');
    text.src = './images/text_second_inactive.png';
  }
}

和html代码:

<div id="back"/>
  <a>
    <img id="first" src="images/first_inactive_2.png" onmouseover="hover(this);" onmouseout="unhover(this);" />
  </a>
  <a>
    <img id="second" src="images/second_inactive_2.png" onmouseover="hover(this);" onmouseout="unhover(this);"/>
  </a>

一切都很好,但事实上有时候背景图片会闪烁。我想我必须预先加上两个images/1.pngimages/2.png,但我不知道如何正确地做到这一点。是否有正确的方法让图像不闪烁?

3 个答案:

答案 0 :(得分:2)

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

这可能是在window.load或dom:ready事件的某处,这样你可以预加载图像。

答案 1 :(得分:0)

几周前我遇到过类似的问题。您可以使用'onload'事件预加载图像:

var tmpNewImg = new Image();
tmpNewImg.onload = function () {
  var yourDiv = document.getElementById('picture');
  yourDiv.style.backgroundImage = 'url(' + this.src + ')';
}

tmpNewImg.src = '/your/background/image.jpg';

这有助于解决我的问题。但在这种情况下我没有测试代码。

答案 2 :(得分:0)

:hover伪元素中使用css :afterpreload悬停图片:

div {
    background: url(http://keddr.com/wp-content/uploads/2013/12/google.png);
    width:300px;
    height: 200px;
    background-size: 100% 100%;
}

div:after {
    content: '';
    font: 0/0 a;
}

div:hover,
div:after {
    background-image: url(http://hi-news.ru/wp-content/uploads/2013/11/0111.jpg);
}