ホームページ  >  記事  >  ウェブフロントエンド  >  js イメージ読み込みの 2 つの効果のコード例

js イメージ読み込みの 2 つの効果のコード例

零下一度
零下一度オリジナル
2017-05-15 09:47:281512ブラウズ

この記事では、主に js画像読み込みエフェクトのサンプルコード (遅延読み込み + ウォーターフォール読み込み) を紹介します。これは、必要な友達は参照してください

主に 2 種類の画像読み込みエフェクトを実行します

。 1 つは、ページ上に多くの画像がある場合に読み取りバー効果を備えた読み込みプロンプトを提供することです (正しく読み込まれていることを確認するために、1 秒の読み込み間隔が設定されています)

もう 1 つは、位置に基づいて画像を読み込むことですスライダーのプリロードにより、ユーザーが気付かないうちにウォーターフォールローディング効果が得られます

遅延ロード

主なアイデア:

  1. 正しいアドレスは HTML の img タグ に保存されますsrc 属性を使用して、すべての画像の背景として循環する読み込み画像を設定します。js で各画像を順番に読み取り、src 内のアドレスを src に置き換え、画像が正常に読み込まれるたびに背景を削除します。進行状況バーもそれに応じて変化します。

  2. 読み込みが失敗した場合は、画像読み込みエラーが表示されます。

  3. HTML の構造は非常にシンプルで、すべての img をラップする p.picList に、単純なプログレス バー p#loadBar

    <body>
      <p class="picList">
        <img class="lazy" src="pic/compressed/picList1.jg">
        <img class="lazy" src="pic/compressed/picList2.jpg">
        <img class="lazy" src="pic/compressed/picList3.jpg">
        <img class="lazy" src="pic/compressed/picList4.jpg">
        <img class="lazy" src="pic/compressed/picList5.jpg">
        <img class="lazy" src="pic/compressed/picList6.jpg">
        <img class="lazy" src="pic/compressed/picList7.jpg">
        <img class="lazy" src="pic/compressed/picList8.jpg">
        <img class="lazy" src="pic/compressed/picList9.jpg">
        <img class="lazy" src="pic/compressed/picList10.jpg">
      </p>
    
      <p id="loadBar">
        <p id="loadBarMask"></p>
      </p>
    </body>
  4. css を追加します (使用される scss は、コンパイル時にさまざまな互換性のあるプレフィックスを自動的に追加します)
  5. .picList{
      img{
        width: 100px;
        height: 100px;
        position: relative;
    
        /*加载失败时显示灰底文字*/
        &:after{
          content: "( ⊙ o ⊙ )加载失败";
          font-size: 6px;
          font-family: FontAwesome;
          color: rgb(100, 100, 100);
          display: flex;
          justify-content: center;
          align-items: center;
          position: absolute;
          top: 0;
          left: 0;
          width: 100px;
          height: 100px;
          background-color: #ddd;
        }
      }
    }
    
    .lazy{
      background: url(../pic/loading.gif) center no-repeat;
      border: 1px solid black;
    }
    
    #loadBar{
      width: 200px;
      height: 15px;
      background: linear-gradient(90deg,#187103,#81b50b,#187103);
      border: 10px solid white;
    
      position: absolute;
      top: 150px;
      left: 50%;
      margin-left: -100px;
    
      #loadBarMask{
        width: 70%;//这个数值显示没有加载成功的图片
        height: 100%;
        background-color: beige;
        position: absolute;
        right: 0;
      }
    }

    CSS で注意すべき点は 2 つあります:

1 つは、画像の読み込みに失敗したときに表示される灰色の背景のテキストを img の after

疑似クラス

に置くことです。 , gif画像を追加すると背景が削除され、この部分の内容とスタイルが表示されます。

    1 つはプログレスバーのスタイルです。書き方はとてもシンプルで、主にグラデーションのある緑のレイヤーと白のレイヤーを重ねたものです。緑はロードされていることを意味し、白はロードされていないことを意味します。表示するときは、白いレイヤーの幅を直接制御するだけです。
  1. js部分(loadPicPerSecond()を直接実行するだけ)

    var lazyPic = $(&#39;img.lazy&#39;);
    var loadBarMask = $(&#39;#loadBarMask&#39;);
    var picList = $(&#39;.picList&#39;);
    
    var activePic = 0;
    var totalPic = lazyPic.length;
    
    /*每秒加载一张图片*/
    
    function loadPicPerSecond(){
    
      lazyPic.each(function(index){
    
        var self = $(this);
    
        //console.log(self[0].complete);
        /*img标签已经事先写在html中,所以此时的complete状态全部都是true*/
    
        setTimeout(function(){
    
          src[index] = self.attr(&#39;src&#39;);
          self.attr(&#39;src&#39;,src[index]);
          self.removeClass(&#39;lazy&#39;);
    
          //图片获得正确src地址之后,可以执行下面的onload操作
          self[0].onload = function(){
    
            //加载读条loadBar动画
            countPic();
          }
    
          //图片获得的src地址不正确时,执行下面的onerror操作
          self[0].onerror = function(){
            /*this.style.background = &#39;url(pic/compressed/picList18.jpg) center no-repeat&#39;;*/
            countPic();
          }
    
        },1000*index);
    
      })
    
    }
    
    /*根据onload的执行情况来计算当前的图片加载进度.每onload一次,activePic就增加1*/
    
    function countPic(){
    
      activePic++;
    
      var leftPic = totalPic - activePic;
      var percentPic = Math.ceil(leftPic/totalPic*100);//没有加载的图片百分比,和loadBarMask的宽度占比配合
    
      console.log("已加载"+(100-percentPic)+"%");
    
      loadBarMask.css("width",percentPic+"%");
    
      if(percentPic==0){
        $(&#39;#loadBar&#39;).hide();
      }
    }
  2. 2番目のウォーターフォール読み込み

メインアイデア:

ロードされた画像の最後の画像が表示されたとき、ウィンドウのスクロール状況を監視するウィンドウに入ろうとしているときは、次の画像の読み込みを開始します。

すべての画像アドレスが

json
    データにすでに存在していると仮定し、毎回 10 個の画像アドレスを読み取り、ロードして、既存のウォーターフォール フローの最後に挿入します。
  1. すべての写真が読み込まれるまでこれを繰り返します。
  2. HTMLは前と同じで、srcを通常のアドレスとして書くだけです。 CSSも全く同じです。

  3. jsの部分
  4. var lazyPic = $(&#39;img.lazy&#39;);
    var loadBarMask = $(&#39;#loadBarMask&#39;);
    var picList = $(&#39;.picList&#39;);
    
    var scrollTop,
      clientHeight,
      scrollHeight;
    
    var threshold = 200; //最后一张图片距离窗口200px的时候开始加载图片
    
    var src = [];
    
    var activePic = 0;
    var totalPic = lazyPic.length;
    
    //待加载的图片数据
    var dirtSrc = "pic/compressed/picList";
    var picData = {imgSrc:[
      dirtSrc + "20.jpg",
      dirtSrc + "21.jpg",
      dirtSrc + "22.jpg",
      dirtSrc + "23.jpg",
      dirtSrc + "24.jpg",
      dirtSrc + "25.jpg",
      dirtSrc + "26.jpg",
      dirtSrc + "27.jpg",
      dirtSrc + "28.jpg",
      dirtSrc + "29.jpg",
      dirtSrc + "30.jpg",
      dirtSrc + "31.jpg",
      dirtSrc + "32.jpg",
      dirtSrc + "33.jpg",
      dirtSrc + "34.jpg",
      dirtSrc + "35.jpg",
      dirtSrc + "36.jpg",
      dirtSrc + "37.jpg",
      dirtSrc + "38.jpg",
      dirtSrc + "39.jpg",
      dirtSrc + "40.jpg",
      dirtSrc + "41.jpg",
      dirtSrc + "42.jpg",
      dirtSrc + "43.jpg",
      dirtSrc + "44.jpg",
      dirtSrc + "45.jpg",
      dirtSrc + "46.jpg",
      dirtSrc + "47.jpg",
      dirtSrc + "48.jpg",
      dirtSrc + "49.jpg",
    ]};
    
    //加载次数计数器
    var scrollIndex = 0;
    
    $(function(){
    
      /*监听窗口滚动情况*/
      $(window).on(&#39;scroll&#39;,function(){
    
        scrollTop = $(window).scrollTop();//$(window).scrollTop()==document.body.scrollTop
        clientHeight = $(window).height();
        scrollHeight = picList.last().height();//picList.last()[0].clientHeight
    
        /*目标与窗口的距离达到阈值时开始加载*/
        if(scrollHeight-clientHeight-scrollTop < threshold){
          scrollPic(10);
        }
      })
    })
    
    /*根据滚动程度加载图片,每次加载perAmount张*/
    
    function scrollPic(perAmount = 10){
    
      var totalAmount = perAmount * (scrollIndex+1);
    
       //考虑到最后一次加载的时候,剩余的图片数量有可能达不到限定的每次加载的数量,这时候需要更改totalAmount的值
      if(totalAmount>picData.imgSrc.length){
        totalAmount = picData.imgSrc.length;
      }
      for(scrollIndex;scrollIndex<totalAmount;scrollIndex++){
        var oimg = new Image();
        oimg.src = picData.imgSrc[scrollIndex];
        picList.append(oimg);
      }
    
    }

    最も緊急なのはscrollTopと

    objects
  5. の高さの値です。いつもはっきりと覚えているわけではないので、jsと
jquery

に従って書き留めました。直接将来的に。数値関係を把握した後は、条件が満たされている限りローディングをトリガーできます。

【関連推奨事項】

1. 特別な推奨事項

:

「php Programmer Toolbox」V0.1バージョンのダウンロード

2.

3 php.cn Dugu Jiijian (3) - JavaScript ビデオ チュートリアル

以上がjs イメージ読み込みの 2 つの効果のコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。