jquery를 사용하여 이미지 미리 로드를 구현하면 페이지 로딩 속도와 사용자 경험이 향상됩니다. 이 기사에서는 jquery 이미지 미리 로드의 구현 원리에 대한 자세한 분석을 제공합니다.
이미지 사전 로딩은 언제 사용하나요?
페이지에서 처음 로드할 때 표시되지 않는 이미지를 많이 사용하는 경우 미리 로드해야 합니다.
$.preloadImages = function () { for (var i = 0; i < arguments.length; i++) { $('img').attr('src', arguments[i]); } }; $.preloadImages('img/hover-on.png', 'img/hover-off.png');
웹사이트를 구축할 때 종종 이런 문제가 발생합니다. 페이지에 사진이 너무 많아 페이지 로드 속도가 느려지고 흰색 페이지가 자주 나타나는데 이는 매우 나쁜 사용자 경험입니다. 그렇다면 이 문제를 해결하는 방법은 무엇입니까? 우리가 가장 먼저 생각할 것은 서버 성능을 향상시키고 정적 캐싱 및 기타 수단을 사용하여 이미지 로딩 속도를 높이는 것입니다. 이것은 실제로 좋은 방법이지만 때로는 프런트 데스크에서 몇 가지 솔루션을 찾을 수도 있습니다. 다음으로는 실제 응용프로그램에서 자주 사용되는 js 프리로딩 방법을 소개하겠습니다.
먼저, 이미지를 출력할 때 몇 가지 처리를 수행합니다.56ae0cc9d17e2447cc1493bb51c79777 html을 처리한 후 js 작성을 시작했습니다. 여기서는 jquery 클래스 라이브러리를 사용했습니다.
$('img[data]').load(function(){ var __this__ = $(this); var url = __this__.attr('data'); var src = __this__.attr('src'); if(url ==''|| url == src)//这里判断如果图片实际地址不存在或者已经加载不处理 { return; } var img =newImage();//实例化一个图片的对象 img.src = url;//将要显示的图片加载进来 if(img.complete)//如果图片已经加载存在浏览器缓存中直接处理 { __this__.attr('src',url);//将要显示的图片替换过来 return; } img.onload =function(){//要显示的图片加载完成后做处理 __this__.attr('src',url); } });
예를 통한 설명: Javascript, Jquery는 페이지 이미지 사전 로드 비율 표시를 실현합니다
페이지가 처음 로드될 때 로드 진행률을 표시해야 하는 경우. 주로 사진이 많은 경우를 말합니다:
타사 Jquery 플러그인 jquery.imgpreload.min.js를 사용할 수 있습니다.
내부에서 메소드를 호출하세요: imgpreload 예시는 다음과 같습니다:
var imgNum = 0; var images = []; $(function(){ preloadImg(); }); //里面有两种方式 function preLoadImg() { //第一种方式:通过dom方法获取页面中的所有img,包括<img>标签和css中的background-image /*get all imgs those tag is <img> var imgs = document.images; for (var i = 0; i < imgs.length; i++) { images.push(imgs[i].src); } //get all images in style var cssImages = getallBgimages(); for (var j = 0; j < cssImages.length; j++) { images.push(cssImages[j]); }*/ //第二种方式:把所有该网页上用到的图片文件都预先放入一个数组里 $.imgpreload(['images/bg1.jpg', 'images/bg2.jpg'], function () { //此处是显示进度百分比时需要用到的背景图,这个可以先加载进去 }); //then push all other images in array to load images.push("images/test_1.png"); images.push("images/test_2.png"); images.push("images/test_3.png"); //。。。 images.push("images/test_n.png"); /*这里是真正的图片预加载 preload*/ $.imgpreload(images, { each: function () { /*this will be called after each image loaded*/ var status = $(this).data('loaded') ? 'success' : 'error'; if (status == "success") { var v = (parseFloat(++imgNum) / images.length).toFixed(2); $("#percentShow").html(Math.round(v * 100) + "<sup>%</sup>"); } }, all: function () { /*this will be called after all images loaded*/ $("#percentShow ").html("100<sup>%</sup>"); $("percentShow").fadeOut(1000); $(".main").show(); } }); } //get all images in style(此方法引用其他博客的) function getallBgimages() { var url, B = [], A = document.getElementsByTagName('*'); A = B.slice.call(A, 0, A.length); while (A.length) { url = document.deepCss(A.shift(), 'background-image'); if (url) url = /url\(['"]?([^")]+)/.exec(url) || []; url = url[1]; if (url && B.indexOf(url) == -1) B[B.length] = url; } return B; } document.deepCss = function (who, css) { if (!who || !who.style) return ''; var sty = css.replace(/\-([a-z])/g, function (a, b) { return b.toUpperCase(); }); if (who.currentStyle) { return who.style[sty] || who.currentStyle[sty] || ''; } var dv = document.defaultView || window; return who.style[sty] || dv.getComputedStyle(who, "").getPropertyValue(css) || ''; } Array.prototype.indexOf = Array.prototype.indexOf || function (what, index) { index = index || 0; var L = this.length; while (index < L) { if (this[index] === what) return index; ++index; } return -1; }
이렇게 하면 페이지에 사진이 많고 네트워크 속도가 매우 느린 경우 사용자에게 백분율 프롬프트가 표시됩니다.
이 작업을 수행하기 전에는 모든 로컬 테스트가 매우 빠르게 로드되기 때문에 백분율이 즉시 100%에 도달한 다음 사라지게 됩니다. 그렇게 보이도록 하기 위해 참고용으로 의사 백분율 진행률 표시줄도 작성했습니다.
var t = window.setTimeout("preLoad()", 100); function preLoad() { $("#loading div").animate({ width: step + "px" }, 50).text(step + "%"); step += 1; if (step <= 100) { t = window.setTimeout("preLoad()", 100); } else { clearTimeout(t); $("#loading").fadeOut(1000); $("#preloadImg").fadeOut(1000); $(".main").show(); }
페이지 초기화가 완료된 후 페이지에서 시뮬레이션 비율을 높이는 과정이 있습니다. 100%에 도달하면 진행률 표시줄이 사라지고 메인 페이지가 표시됩니다. 단, 실제와는 아무런 관련이 없습니다. 페이지 로딩.
위 내용은 jquery 이미지 사전 로딩에 대한 자세한 연구입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.