js 그림 로드 효과 인 스 턴 스 코드(로드 지연+폭포 흐름 로드)
하 나 는 페이지 그림 이 많 을 때 읽 기 효과 가 있 는 로 딩 알림 입 니 다.(올 바른 로 딩 을 검증 하기 위해 1 초 동안 로 딩 간격 을 설정 하 였 습 니 다)
또 하 나 는 슬라이더 의 위치 에 따라 그림 을 미리 불 러 오고 사용자 가 눈치 채 지 못 한 상태 에서 폭포 흐름 의 로드 효 과 를 실현 하 는 것 이다.
로드 지연
주요 사고방식:
<body>
<div class="picList">
<img class="lazy" data-src="pic/compressed/picList1.jg">
<img class="lazy" data-src="pic/compressed/picList2.jpg">
<img class="lazy" data-src="pic/compressed/picList3.jpg">
<img class="lazy" data-src="pic/compressed/picList4.jpg">
<img class="lazy" data-src="pic/compressed/picList5.jpg">
<img class="lazy" data-src="pic/compressed/picList6.jpg">
<img class="lazy" data-src="pic/compressed/picList7.jpg">
<img class="lazy" data-src="pic/compressed/picList8.jpg">
<img class="lazy" data-src="pic/compressed/picList9.jpg">
<img class="lazy" data-src="pic/compressed/picList10.jpg">
</div>
<div id="loadBar">
<div id="loadBarMask"></div>
</div>
</body>
css(사용 하 는 scss,컴 파일 시 자동 으로 호 환 접두사 추가)
.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;
}
}
css 에서 주의해 야 할 부분 은 두 가지 가 있 습 니 다.
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('data-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();
}
}
이 폭포 흐름 로드주요 사고방식:
js 부분
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);
}
}
급 한 것 은 바로 scrollTop,height 의 값 을 추출 하 는 대상 입 니 다.항상 기억 이 나 지 않 기 때문에 js 와 jquery 에 따라 모두 적 었 습 니 다.나중에 직접 사용 할 수 있 습 니 다.수치 관 계 를 해결 한 후 조건 만 만족 하면 로 딩 을 촉발 하면 됩 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.