js實(shí)現(xiàn)圖片加載淡入淡出效果
本文實(shí)例為大家分享了js圖片加載淡入淡出效果展示的具體代碼,供大家參考,具體內(nèi)容如下
HTML代碼
首先是圖片標(biāo)記的寫(xiě)法:
<img data-src="/path/to/image.jpg" alt="">
需要將圖片的地址放到 data-src 屬性里,而src值填寫(xiě)默認(rèn)的一張圖片。
CSS代碼
所有具有data-src屬性的圖片,我們將其初始顯示狀態(tài)為不可見(jiàn),通過(guò)透明度來(lái)調(diào)節(jié):
img { opacity: 1; transition: opacity 0.3s; } img[data-src] { opacity: 0; }
這樣寫(xiě)的作用是什么?等當(dāng)圖片加載時(shí),你就能看的效果了。
JavaScript代碼
我們最終會(huì)將 data-src 屬性去掉,換成src屬性,但這是圖片加載成功后的動(dòng)作:
[].forEach.call(document.querySelectorAll('img[data-src]'), function(img) { img.setAttribute('src', img.getAttribute('data-src')); img.onload = function() { img.removeAttribute('data-src'); }; });
相比起其它各種的圖片延遲加載技術(shù),這種方法非常的簡(jiǎn)單,它幾乎不要求其它任何條件,可以用在任何地方,使用起來(lái)非常靈活。
當(dāng)然,簡(jiǎn)單有簡(jiǎn)單的好壞,也會(huì)因?yàn)楹?jiǎn)單而不足。它不具有圖片圖片滾動(dòng)到可視窗口內(nèi)再加載的功能。最終使用哪種技術(shù),還是要看場(chǎng)景而定。
下面是lazyload.js
var lazyLoad = { init: function() { var that = this; that.onerrorImgUrl = "data-error"; //圖片加載失敗用什么圖片替換 that.srcStore = "data-src"; //圖片真實(shí)地址存放的自定義屬性 that.class = "lazy-img"; //惰性加載的圖片需要添加的class that.sensitivity = 50; //該值越小,惰性越強(qiáng)(加載越少) 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個(gè)參數(shù): // 事件類(lèi)型,是否冒泡,是否阻止瀏覽器的默認(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)簽可見(jiàn)并且加載未完成 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); }) } };
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
對(duì)js eval()函數(shù)的一些見(jiàn)解
下面小編就為大家?guī)?lái)一篇對(duì)js eval()函數(shù)的一些見(jiàn)解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08非主流的textarea自增長(zhǎng)實(shí)現(xiàn)js代碼
今天稍微研究了下textarea隨輸入內(nèi)容自動(dòng)增長(zhǎng)的功能,通過(guò)google參考了一些實(shí)現(xiàn)方式2011-12-12JS判斷不同分辨率調(diào)用不同的CSS樣式文件實(shí)現(xiàn)思路及測(cè)試代碼
最近看一個(gè)網(wǎng)站,發(fā)現(xiàn)顯示器不同的分辨率,樣式文件調(diào)用的也不一樣,于是很好奇研究并寫(xiě)了一個(gè),經(jīng)測(cè)試感覺(jué)還不錯(cuò),感興趣的你可以來(lái)看看哦2013-01-01使用canvas實(shí)現(xiàn)魔法攝像頭的示例代碼
我們用手機(jī)的攝像頭自拍,很容易實(shí)現(xiàn)簡(jiǎn)單的自拍效果,如復(fù)古、黑白等等,其實(shí)我們使用web端的JavaScript也是可以實(shí)現(xiàn)的,接下來(lái)就帶領(lǐng)小伙伴實(shí)現(xiàn)一個(gè)魔法攝像頭,并且提供了截圖下載功能,需要的朋友可以參考下2023-08-08JS實(shí)現(xiàn)判斷有效的數(shù)獨(dú)算法示例
這篇文章主要介紹了JS實(shí)現(xiàn)判斷有效的數(shù)獨(dú)算法,結(jié)合實(shí)例形式分析了javascript數(shù)獨(dú)判斷的原理及相關(guān)算法實(shí)現(xiàn)、使用操作技巧,需要的朋友可以參考下2019-02-02