国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js實現圖片加載淡入淡出效果

2019-11-19 16:53:05
字體:
來源:轉載
供稿:網友

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

HTML代碼

首先是圖片標記的寫法:

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

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

CSS代碼

所有具有data-src屬性的圖片,我們將其初始顯示狀態為不可見,通過透明度來調節:

img { opacity: 1; transition: opacity 0.3s;}img[data-src] { opacity: 0;}

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

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'); };});

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

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

下面是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) {  // 其他標準瀏覽器使用dispatchEvent方法  var evt = document.createEvent('HTMLEvents');  // initEvent接受3個參數:  // 事件類型,是否冒泡,是否阻止瀏覽器的默認行為  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標簽可見并且加載未完成    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);  }) }};

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍南县| 双辽市| 仁化县| 开原市| 安新县| 邢台县| 三原县| 乃东县| 慈利县| 青海省| 涞水县| 石阡县| 东乡族自治县| 广州市| 清远市| 太原市| 永春县| 贵阳市| 高青县| 斗六市| 韶关市| 隆回县| 大埔区| 河津市| 宜春市| 喜德县| 都兰县| 大厂| 昌都县| 威宁| 大渡口区| 海阳市| 延庆县| 惠东县| 浏阳市| 阿城市| 宜章县| 霍山县| 龙口市| 外汇| 晋中市|