欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

HTML代碼

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

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

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

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ù):
  // 事件類型,是否冒泡,是否阻止瀏覽器的默認(rèn)行為
  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)文章

  • 光標(biāo)的帖子總結(jié)(Range的使用)

    光標(biāo)的帖子總結(jié)(Range的使用)

    光標(biāo)的帖子總結(jié)(Range的使用)...
    2006-07-07
  • JavaScript制作年歷的示例代碼

    JavaScript制作年歷的示例代碼

    本文主要介紹了JavaScript制作年歷的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2012-05-05
  • JS的事件循環(huán)執(zhí)行機制詳解

    JS的事件循環(huán)執(zhí)行機制詳解

    JS執(zhí)行是單線程的,它是基于事件循環(huán)的,那么本篇博文就來分享一下關(guān)于JS的事件循環(huán)執(zhí)行機制,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)
    2023-05-05
  • 使用js畫圖之畫切線

    使用js畫圖之畫切線

    這篇文章主要介紹了使用js繪制幾何圖形系列教程中的畫切線篇,非常方便我們好好熟悉理解javascript,推薦給大家
    2015-01-01
  • 對js eval()函數(shù)的一些見解

    對js eval()函數(shù)的一些見解

    下面小編就為大家?guī)硪黄獙s eval()函數(shù)的一些見解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 非主流的textarea自增長實現(xiàn)js代碼

    非主流的textarea自增長實現(xiàn)js代碼

    今天稍微研究了下textarea隨輸入內(nèi)容自動增長的功能,通過google參考了一些實現(xiàn)方式
    2011-12-12
  • JS判斷不同分辨率調(diào)用不同的CSS樣式文件實現(xiàn)思路及測試代碼

    JS判斷不同分辨率調(diào)用不同的CSS樣式文件實現(xiàn)思路及測試代碼

    最近看一個網(wǎng)站,發(fā)現(xiàn)顯示器不同的分辨率,樣式文件調(diào)用的也不一樣,于是很好奇研究并寫了一個,經(jīng)測試感覺還不錯,感興趣的你可以來看看哦
    2013-01-01
  • JS閉包與延遲求值用法示例

    JS閉包與延遲求值用法示例

    這篇文章主要介紹了JS閉包與延遲求值,結(jié)合簡單實例分析了JS針對運算量較大的情況下閉包與延遲求值的實現(xiàn)技巧,需要的朋友可以參考下
    2016-12-12
  • 使用canvas實現(xiàn)魔法攝像頭的示例代碼

    使用canvas實現(xiàn)魔法攝像頭的示例代碼

    我們用手機的攝像頭自拍,很容易實現(xiàn)簡單的自拍效果,如復(fù)古、黑白等等,其實我們使用web端的JavaScript也是可以實現(xiàn)的,接下來就帶領(lǐng)小伙伴實現(xiàn)一個魔法攝像頭,并且提供了截圖下載功能,需要的朋友可以參考下
    2023-08-08
  • JS實現(xiàn)判斷有效的數(shù)獨算法示例

    JS實現(xiàn)判斷有效的數(shù)獨算法示例

    這篇文章主要介紹了JS實現(xiàn)判斷有效的數(shù)獨算法,結(jié)合實例形式分析了javascript數(shù)獨判斷的原理及相關(guān)算法實現(xiàn)、使用操作技巧,需要的朋友可以參考下
    2019-02-02

最新評論