This article mainly introduces jspicturesLoading effect example code (delayed loading + waterfall flow loading), which is of great practical value. Friends who need it can refer to it
Mainly do two kinds of image loading effects
One is when there are many pictures on the page, a loading prompt with a reading effect (in order to verify the correct loading, 1 second is set The loading interval of the clock)
The other is to preload the image according to the position of the slider, so as to achieve the loading effect of waterfall flow without the user noticing it
One delayed loading
Main idea:
<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>
.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; } }
var lazyPic = $('img.lazy'); var loadBarMask = $('#loadBarMask'); var picList = $('.picList'); 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('src'); self.attr('src',src[index]); self.removeClass('lazy'); //图片获得正确src地址之后,可以执行下面的onload操作 self[0].onload = function(){ //加载读条loadBar动画 countPic(); } //图片获得的src地址不正确时,执行下面的onerror操作 self[0].onerror = function(){ /*this.style.background = 'url(pic/compressed/picList18.jpg) center no-repeat';*/ 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){ $('#loadBar').hide(); } }
Second waterfall flow loading
var lazyPic = $('img.lazy'); var loadBarMask = $('#loadBarMask'); var picList = $('.picList'); 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('scroll',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); } }
Object, I always can’t remember clearly, so follow js and jquery is all written down and can be used directly in the future. After figuring out the numerical relationship, the loading can be triggered as long as the conditions are met.
【Related Recommendations】Special Recommendation:"php Programmer Toolbox" V0.1 version Download
2.Free js online video tutorial#3.
php.cn Dugu Jiujian (3) - JavaScript video tutorialThe above is the detailed content of Example codes for two effects of js image loading. For more information, please follow other related articles on the PHP Chinese website!