>웹 프론트엔드 >JS 튜토리얼 >jquery는 이미지 preloading_jquery를 구현합니다.

jquery는 이미지 preloading_jquery를 구현합니다.

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 15:23:241201검색

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') &#63; '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\(['"]&#63;([^")]+)/.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 이미지 사전 로딩에 대한 자세한 연구입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.