最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js實現(xiàn)圖片加載淡入淡出效果

 更新時間:2021年09月17日 09:20:08   作者:櫻花爛漫0927  
這篇文章主要為大家詳細介紹了js實現(xiàn)圖片加載淡入淡出效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了js圖片加載淡入淡出效果展示的具體代碼,供大家參考,具體內(nèi)容如下

HTML代碼

首先是圖片標(biāo)記的寫法:

<img data-src="/path/to/image.jpg" alt="">

需要將圖片的地址放到 data-src 屬性里,而src值填寫默認的一張圖片。

CSS代碼

所有具有data-src屬性的圖片,我們將其初始顯示狀態(tài)為不可見,通過透明度來調(diào)節(jié):

img {
 opacity: 1;
 transition: opacity 0.3s;
}

img[data-src] {
 opacity: 0;
}

這樣寫的作用是什么?等當(dāng)圖片加載時,你就能看的效果了。

JavaScript代碼

我們最終會將 data-src 屬性去掉,換成src屬性,但這是圖片加載成功后的動作:

[].forEach.call(document.querySelectorAll('img[data-src]'), function(img) {
 img.setAttribute('src', img.getAttribute('data-src'));
 img.onload = function() {
  img.removeAttribute('data-src');
 };
});

相比起其它各種的圖片延遲加載技術(shù),這種方法非常的簡單,它幾乎不要求其它任何條件,可以用在任何地方,使用起來非常靈活。

當(dāng)然,簡單有簡單的好壞,也會因為簡單而不足。它不具有圖片圖片滾動到可視窗口內(nèi)再加載的功能。最終使用哪種技術(shù),還是要看場景而定。

下面是lazyload.js

var lazyLoad = {
 init: function() {
  var that = this;
  that.onerrorImgUrl = "data-error"; //圖片加載失敗用什么圖片替換
  that.srcStore = "data-src"; //圖片真實地址存放的自定義屬性
  that.class = "lazy-img"; //惰性加載的圖片需要添加的class
  that.sensitivity = 50; //該值越小,惰性越強(加載越少)
  minScroll = 5,
  slowScrollTime = 200;

  document.addEventListener("scroll", function() {
   that.changeimg();
  });

  setTimeout(function() {
   that.trigger();
  }, 100);

 },
 scanImage: function() {
  var that = this;
  var imgList = [];
  var allimg = [].slice.call(document.querySelectorAll('img.' + that.class + ''));
  allimg.forEach(function(ele) {
   if (!that.isLoadedImageCompleted(ele)) {
    imgList.push(ele);
   }
  });

  that.imglistArr = imgList;
 },
 isLoadedImageCompleted: function(ele) {
  return (ele.getAttribute('data-loaded') == '1')
 },
 trigger: function() {
  var that = this;
  eventType = that.isPhone && "touchend" || "scroll";
  that.fireEvent(document, eventType);
  //$(window).trigger(eventType);
 },
 fireEvent: function(element, event) {
  // 其他標(biāo)準(zhǔn)瀏覽器使用dispatchEvent方法
  var evt = document.createEvent('HTMLEvents');
  // initEvent接受3個參數(shù):
  // 事件類型,是否冒泡,是否阻止瀏覽器的默認行為
  evt.initEvent(event, true, true);
  return !element.dispatchEvent(evt);
 },
 changeimg: function() {
  function loadYesOrno(img) {
   var windowPageYOffset = window.pageYOffset,
    windowPageYOffsetAddHeight = windowPageYOffset + window.innerHeight,
    imgOffsetTop = img.getBoundingClientRect().top + window.pageYOffset;
   return imgOffsetTop >= windowPageYOffset && imgOffsetTop - that.sensitivity <= windowPageYOffsetAddHeight;
  }

  function loadImg(img, index) {

   var imgUrl = img.getAttribute(that.srcStore);

   img.setAttribute("src", imgUrl);

   img.onload || (img.onload = function() {
     img.classList.remove(that.class);
     img.setAttribute('data-loaded', 1)
     img.removeAttribute('data-src');
     //$(this).removeClass(that.class).getAttribute('data-loaded',1),
     that.imglistArr[index] = null;
     img.onerror = img.onload = null;
    },
    img.onerror = function() {
     img.src = img.getAttribute(that.onerrorImgUrl);
     img.classList.remove(that.class);
     img.classList.add("lazy-err");
     img.setAttribute('data-loaded', 0);
     //$(this).removeClass(that.class).getAttribute('data-loaded',0),
     that.imglistArr[index] = null,
      img.onerror = img.onload = null
    });

   var newImgStack = [];
   that.imglistArr.forEach(function(ele) {

    //img標(biāo)簽可見并且加載未完成
    if (!that.isLoadedImageCompleted(ele)) {
     newImgStack.push(ele);
    }
   });
   that.imglistArr = newImgStack;
  }

  var that = this;
  that.scanImage();
  that.imglistArr.forEach(function(val, index) {

   if (!val) return;
   var img = val;
   if (!loadYesOrno(img) || that.isLoadedImageCompleted(img)) return;

   if (!img.getAttribute(that.srcStore)) return;

   loadImg(img, index);
  })

 }
};

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript中捕獲與冒泡詳解及實例

    JavaScript中捕獲與冒泡詳解及實例

    這篇文章主要介紹了JavaScript中捕獲與阻止捕獲、冒泡與阻止冒泡詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • js中async函數(shù)結(jié)合promise的小案例淺析

    js中async函數(shù)結(jié)合promise的小案例淺析

    這篇文章主要介紹了js中async函數(shù)結(jié)合promise的小案例淺析,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • js遍歷map javaScript遍歷map的簡單實現(xiàn)

    js遍歷map javaScript遍歷map的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄猨s遍歷map javaScript遍歷map的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 詳談js遍歷集合(Array,Map,Set)

    詳談js遍歷集合(Array,Map,Set)

    下面小編就為大家?guī)硪黄斦刯s遍歷集合(Array,Map,Set)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • javascript輕松控制表格列樣式的腳本代碼

    javascript輕松控制表格列樣式的腳本代碼

    javascript輕松控制表格列樣式的腳本代碼通過遍歷table表格元素并動態(tài)設(shè)置其class屬性,實現(xiàn)表格樣式動態(tài)控制的功能,需要的朋友可以參考一下
    2007-12-12
  • JS打斷點的六種常用姿勢你用過幾種

    JS打斷點的六種常用姿勢你用過幾種

    JS斷點調(diào)試,即是在瀏覽器開發(fā)者工具中為JS代碼添加斷點,讓JS執(zhí)行到某一特定位置停住,方便開發(fā)者對該處代碼段的分析,這篇文章主要介紹了JS打斷點的六種常用姿勢的相關(guān)資料,需要的朋友可以參考下
    2025-04-04
  • JavaScript 實現(xiàn)鼠標(biāo)拖動元素實例代碼

    JavaScript 實現(xiàn)鼠標(biāo)拖動元素實例代碼

    這篇文章主要介紹了JavaScript 實現(xiàn)鼠標(biāo)拖動元素實例代碼,需要的朋友可以參考下
    2014-02-02
  • js實現(xiàn)刷新頁面后回到記錄時滾動條的位置【兩種方案可選】

    js實現(xiàn)刷新頁面后回到記錄時滾動條的位置【兩種方案可選】

    本文主要介紹了頁面的div中有滾動條,js實現(xiàn)刷新頁面后回到記錄時滾動條的位置的兩種方案,需要的朋友可以看下
    2016-12-12
  • javascript運行機制之執(zhí)行順序理解

    javascript運行機制之執(zhí)行順序理解

    這篇文章主要介紹了javascript運行機制之執(zhí)行順序理解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • JavaScript工具庫之Lodash詳解

    JavaScript工具庫之Lodash詳解

    這篇文章主要介紹了JavaScript工具庫之Lodash詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06

最新評論

合作市| 鄂伦春自治旗| 吉隆县| 报价| 仁化县| 萝北县| 漾濞| 温宿县| 富裕县| 海城市| 东城区| 三原县| 宁陕县| 琼中| SHOW| 会宁县| 宁蒗| 达州市| 吉林市| 宜川县| 吉首市| 淳安县| 双牌县| 涿州市| 彭泽县| 乐平市| 岳阳县| 清远市| 磐石市| 海城市| 石渠县| 光山县| 木兰县| 图们市| 东兰县| 田阳县| 织金县| 滨州市| 新乡县| 安西县| 喀喇|