JavaScript로 이미지를 미리로드하는 빠르고 쉬운 방법을 찾고 있습니다. 중요한 경우 jQuery를 사용하고 있습니다.
나는 이것을 여기에서 보았다 ( http : //nettuts.com … ) :
function complexLoad(config, fileNames) {
for (var x = 0; x < fileNames.length; x++) {
$("<img>").attr({
id: fileNames[x],
src: config.imgDir + fileNames[x] + config.imgFormat,
title: "The " + fileNames[x] + " nebula"
}).appendTo("#" + config.imgContainer).css({ display: "none" });
}
};
그러나, 그것은 내가 원하는 것에 대해 약간 이상하게 보입니다!
나는 이것을 수행하는 jQuery 플러그인이 있다는 것을 알고 있지만 모두 조금 크다 (크기). 이미지를 빠르고 쉽고 빠르게 미리로드하는 방법 만 있으면됩니다.
답변
빠른 및 쉬운 :
function preload(arrayOfImages) {
$(arrayOfImages).each(function(){
$('<img/>')[0].src = this;
// Alternatively you could use:
// (new Image()).src = this;
});
}
// Usage:
preload([
'img/imageName.jpg',
'img/anotherOne.jpg',
'img/blahblahblah.jpg'
]);
또는 jQuery 플러그인을 원하는 경우 :
$.fn.preload = function() {
this.each(function(){
$('<img/>')[0].src = this;
});
}
// Usage:
$(['img1.jpg','img2.jpg','img3.jpg']).preload();
답변
다음은 실제로 이미지를 DOM에로드하고 기본적으로 숨기는 첫 번째 응답의 수정 된 버전입니다.
function preload(arrayOfImages) {
$(arrayOfImages).each(function () {
$('<img />').attr('src',this).appendTo('body').css('display','none');
});
}
답변
JavaScript 이미지 객체를 사용하십시오 .
이 기능을 사용하면 모든 사진을로드 할 때 콜백을 트리거 할 수 있습니다. 그러나 하나 이상의 리소스가로드되지 않은 경우 콜백을 트리거하지 않습니다. onerror
콜백 및 증분 loaded
값 을 구현 하거나 오류를 처리하여 쉽게 해결할 수 있습니다 .
var preloadPictures = function(pictureUrls, callback) {
var i,
j,
loaded = 0;
for (i = 0, j = pictureUrls.length; i < j; i++) {
(function (img, src) {
img.onload = function () {
if (++loaded == pictureUrls.length && callback) {
callback();
}
};
// Use the following callback methods to debug
// in case of an unexpected behavior.
img.onerror = function () {};
img.onabort = function () {};
img.src = src;
} (new Image(), pictureUrls[i]));
}
};
preloadPictures(['http://foo/picture.bar', 'http://foo/picture.bar', 'http://foo/picture.bar', 'http://foo/picture.bar'], function(){
console.log('a');
});
preloadPictures(['http://foo/picture.bar', 'http://foo/picture.bar', 'http://foo/picture.bar', 'http://foo/picture.bar'], function(){
console.log('b');
});
답변
JP, 솔루션을 확인한 후에도 페이지로드와 함께 이동하기 전에 이미지를 미리로드하지 않는 Firefox에서 여전히 문제가 발생했습니다. sleep(5)
서버 측 스크립트 에 일부 를 넣어서 이것을 발견했습니다 . 나는 이것을 해결하는 것처럼 당신을 기반으로 다음과 같은 솔루션을 구현했습니다.
기본적으로 jQuery 프리로드 플러그인에 콜백을 추가하여 모든 이미지가 올바르게로드 된 후 호출되도록했습니다.
// Helper function, used below.
// Usage: ['img1.jpg','img2.jpg'].remove('img1.jpg');
Array.prototype.remove = function(element) {
for (var i = 0; i < this.length; i++) {
if (this[i] == element) { this.splice(i,1); }
}
};
// Usage: $(['img1.jpg','img2.jpg']).preloadImages(function(){ ... });
// Callback function gets called after all images are preloaded
$.fn.preloadImages = function(callback) {
checklist = this.toArray();
this.each(function() {
$('<img>').attr({ src: this }).load(function() {
checklist.remove($(this).attr('src'));
if (checklist.length == 0) { callback(); }
});
});
};
관심이 없다면 내 맥락에서 다음과 같이 사용하고 있습니다.
$.post('/submit_stuff', { id: 123 }, function(response) {
$([response.imgsrc1, response.imgsrc2]).preloadImages(function(){
// Update page with response data
});
});
바라건대 이것은 Google 에서이 페이지를 방문하는 사람이 Ajax 호출에서 이미지를 미리로드하는 솔루션을 찾는 데 도움이되기를 바랍니다.
답변
이 한 줄의 jQuery 코드는 DOM 요소 img를 표시하지 않고 작성하고로드합니다.
$('<img src="img/1.jpg"/>');
답변
$.fn.preload = function (callback) {
var length = this.length;
var iterator = 0;
return this.each(function () {
var self = this;
var tmp = new Image();
if (callback) tmp.onload = function () {
callback.call(self, 100 * ++iterator / length, iterator === length);
};
tmp.src = this.src;
});
};
사용법은 매우 간단합니다.
$('img').preload(function(perc, done) {
console.log(this, perc, done);
});
답변
이것을 처리하는 작은 플러그인이 있습니다.
waitForImages 라고 img
하며 CSS의 이미지를 참조하여 요소 또는 요소 를 처리 할 수 있습니다 ( 예 🙂 div { background: url(img.png) }
.
CSS에서 참조한 이미지를 포함하여 모든 이미지 를로드하려는 경우 다음 과 같이하십시오.
$('body').waitForImages({
waitForAll: true,
finished: function() {
// All images have loaded.
}
});