> 웹 프론트엔드 > JS 튜토리얼 > 이미지 사전 로딩을 구현하는 js

이미지 사전 로딩을 구현하는 js

王林
풀어 주다: 2020-05-17 09:21:23
앞으로
3712명이 탐색했습니다.

이미지 사전 로딩을 구현하는 js

미리 로드되는 내용:

페이지가 열리면 이미지가 미리 로드되어 로컬에 캐시되며, 이미지가 많은 웹페이지(Baidu Gallery, Taobao Jingdong 등)를 탐색할 때 필요할 때 직접 렌더링됩니다. , 더 나은 사용자 경험을 가질 수 있습니다.

이미지 미리 로드

var img=new Image();
    img.addEventListener("load",loadHandler);
    img.src="./img/1.jpg";
    document.body.appendChild(img);
    console.log(img.width);

    function loadHandler(e){
      console.log(img.width);//当前图片的原始宽度
    }
로그인 후 복사

위 코드에서 이미지가 로드되지 않고 인쇄된 이미지의 너비가 인쇄되면 이미지 너비는 이미지가 로드된 후에만 0입니다. 렌더링을 위해 DOM 트리에 기록되며, 로드 이벤트의 콜백 함수를 트리거한 후에만 이미지 너비를 인쇄할 수 있습니다.

여러 이미지를 로드할 때 사전에 로컬로 캐시해야 합니다. 이미지:

첫 번째:load preload

사진 100개를 로드하고 사진 이름은 1.jpg~100.jpg입니다(아래 동일).

var num=1;
    var list=[];
    loadImage();
    function loadImage(){
      var img=new Image();
      img.addEventListener("load",loadHandler);
      img.src="./img/"+num+".jpg";
    }
    function loadHandler(e){
      list.push(this.cloneNode());//复制当前图片元素
      num++;
      if(num>100){console.log(list);return;}
      this.src="./img/"+num+".jpg"; //修改地址继续后触发load事件
    }
로그인 후 복사

위 코드의 의미는 다음과 같습니다.

1.

2. 이미지에 대한 추가 이벤트 리스너 로드를 제공합니다.

3. 로드된 이미지를 새 이미지에 복사하고

4. num이 100보다 크면 실행을 중지하고 배열을 인쇄합니다.

5. 이미지의 주소를 변경하면 로드가 다시 시작되므로 계속해서 loadHandler 함수를 입력합니다. 로딩이 완료될 때까지 계속 로딩하세요.

두 번째 유형: 생성기 함수는 사전 로드를 구현합니다.

1. 생성기 함수를 실행하고

2.Promise에서 이미지를 생성합니다. image 로드 가능 여부, 로드는 Promise의 콜백 함수

4를 성공적으로 실행합니다. 다시 시작 함수를 한 번 실행하고

함수에서 Promise의 함수를 반복적으로 실행합니다. ().value는 이미지가 로드될 때까지입니다.

세 번째 방법: async/await는 이미지를 미리 로드합니다.

function loadImage(src){
    return new Promise(function(resolve,reject){
      let img=new Image();
      img.onload=function(){ 
        resolve(img);//加载时执行resolve函数
      }
      img.onerror=function(){ 
        reject(src+'这个地址错误');//抛出异常时执行reject函数
      }
      img.src=src;
    })
  }
  function* fn(){
    for(let i=1;i<100;i++){
      yield loadImage("./img/"+i+".jpg");
    }
  }
  let s=fn();
  let value=s.next().value; 
  resume();
  function resume(){
    value.then(img=>{
      console.log(img);//打印加载的图片标签
      value=s.next().value;
      if(value)resume();
    });
  }
로그인 후 복사

이 방법은 async 및 wait를 사용하여 비동기를 차단 동기화로 변환하는 ES6 방법입니다. 1, fn 이 함수 async를 사용하여 이 함수가 비동기 함수임을 나타냅니다

2. 이 함수에서 Wait를 사용할 수 있습니다. Wait의 기능은 비동기를 동기 대기로, 비동기를 차단 대기로 바꾸는 것입니다. .모든 비동기가 완료되면 계속해서 뒤로 실행됩니다

4. 비동기 함수의 wait 뒤에는 Promise 객체만 올 수 있습니다


5. 비동기 함수가 실행된 후에는 Promise 객체가 반환됩니다

추천합니다. 튜토리얼:
js 소개 튜토리얼

위 내용은 이미지 사전 로딩을 구현하는 js의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jb51.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿