2011-04-11 2 views
0

여러 개의 배경 이미지가있는 여러 div가 있고 코드에 아래 표시된 것처럼 미리로드 할 수 있습니다. 일부 문서에서는 이러한 배경 이미지를 모두 사용하지 않으므로 문서에 사용되지 않는 경우에도 항상로드되는 많은 수의 배경 이미지를 미리 정의하는 대신 문서에 나타나는 인스턴스 만 미리로드하는 것이 좋습니다.jQuery - 문서에서 사용되는 미리 정의 된 CSS 배경 이미지 만로드 하시겠습니까?

이미지를로드하는이 코드는 있지만 사용중인 경우에만로드 할 이미지와 같습니다.

$(document).ready(function() 
{ 
    var img = document.createElement('img'); 

    img.onload = function() 
    { 
     console.log("%o finished loading", this); 
     //Set mouseover/mouseout event here 
    }; 

    img.src = 'image.png', 'image2.png', 'image3.png'; // i realized that i have no idea how to add more images 
}); 
+0

내 경험으로 볼 때 실제로 배경 이미지가 실제로 문서에 표시 될 때까지 다운로드되지 않습니다. 내 문제는 미리 다운로드하는 방법 이었지만 다른 방법은 아닙니다. 적어도 그것은 크롬과 파이어 폭스를 의미합니다. –

답변

1

난 당신이 동적으로 데이터베이스 또는 당신이보고있는 문서에 관련된 배열을 전달하여 중 하나를 사용하여 자바 스크립트로 이미지의 배열을 공급하는 것이 좋습니다 것입니다. 이 같은 문서에서 호출 한 후

var BuildImages = function(imgs) 
{ 
    for(var i = 0; i < imgs.length; i++) 
    { 
    var img = document.createElement('img'); 

    img.load(function(e) 
    { 
     console.log("%o finished loading", this); 
     //Set mouseover/mouseout event here 
    }); 

    img.src = imgs[i]; 
    } 
} 

을 그리고 :

$(document).ready(BuildImages(new Array('image.png', 'image2.png', 'image3.png'))); 

//// UPDATE

var buildImages = function(divsclassname, imgs) 
{ 
    var i = 0; 
    // Loop through all divs with the class name you pass into this function 
    $('.'+divsclassname).each(function(e) 
    { 
    // Check for has-image 
    if(!$(this).hasClass('has-image')) 
    { 
     // If not found then set the background image and add class 
     $(this).css('background-image', imags[i]).addClass('has-image'); 
    } 
    i++; 
    }); 
} 

을 여전히

그래서 당신은 다음과 같은 기능을 사용할 수 있습니다 div의 클래스 이름을 설정하는 것과 동일한 방식으로 함수를 호출하십시오.

$(document).ready(function(e) 
{ 
    // Define your images in an array 
    var images = new Array('image.png', 'image2.png', 'image3.png'); 

    // pas in the images and the classname of the divs you want to have bg images 
    buildImages('yourdivsclassname', images)); 
}); 
+0

각 문서에 자신의 미리 정의 된 코드를주는 것은 슬프게도이 경우에는 효과가 없으며 CSS 백그라운드 이미지이기 때문에 잘 작동하지 않습니다. ** if ** 문을 사용하여로드하는 방법은 무엇입니까? if 요소에 특정 css 값 = preload가 있습니까? – Joonas

+0

아 맞아. 예. img 요소를 만들 필요가 없습니다. div를 통해 루프를 돌릴 수 있고 클래스 값이 'preload'또는 'hasImage'가 아니면 div.css ('background-image', imgs [i]))를 수행 할 수 있습니다. 및 div.addClass ('hasImage'); –

+0

여전히 자바 스크립트 기술은 눈이 가리는 슛을 단지 내게 허용하기 때문에 다소 복잡해집니다 :) .. 당신은 저에게 작은 예제처럼 저를 쓸 수 있습니까? jquery 코드를 편집하는 것은 다소 할 수있는 일입니다^^ ___^ – Joonas