게 으 른 로드 와 폭포 흐름 배치
원리: img 태그 의 src 링크 를 같은 그림 (빈 그림) 으로 설정 하고 실제 그림 주 소 를 img 태그 의 사용자 정의 속성 (예 를 들 어 data - src) 에 저장 합 니 다.js 가 이 그림 요소 가 시각 창 에 들 어 가 는 것 을 들 었 을 때 속성 에 있 는 주 소 를 src 속성 에 저장 하여 게 으 른 로 딩 효 과 를 얻 을 것 입 니 다.
이렇게 하면 페이지 가 한꺼번에 서버 에 대량의 요청 에 응답 하여 서버 응답 이 느 리 고 페이지 가 끊 기거 나 붕괴 되 는 문 제 를 방지 할 수 있다.
폭포 흐름 구조의 실현 원 리 를 약술 하 다.
폭포 흐름 구 조 는 pinterest. com 사이트 에서 최초 로 만 들 었 다. 그 원 리 는 먼저 한 줄 에 몇 개의 요 소 를 수용 할 수 있 는 지 계산 한 다음 에 각 열 에 있 는 모든 요소 의 높이 와 최소 자 를 찾 고 새로운 요 소 를 이 열 에 추가 한 다음 에 모든 열 에 있 는 요소 의 합 을 계속 찾 아 이 열 에 추가 하 는 것 이다. 이렇게 순환 하면모든 요소 가 요구 에 따라 배열 할 수 있 을 때 까지;
나무통 구조의 실현 원리 약술 (선택 가능)
레 퍼 런 스
함수 명 은 배럴 로 나무통 을 뜻 합 니 다.그리고 어떤 속성 과 방법 이 있 는 지 확인 해 야 합 니 다.사고 절 차 를 이해 하 는 전제 에서 어떤 속성, 방법 과 그들의 역할 이 필요 한 지 구상 할 수 있다.
속성:
각 줄 그림 의 높이 고정: rowHeight, 줄 높이
고정 용기 가 있 습 니 다: DOM 대상, 용기 이름 은. ct 입 니 다.줄 용기 와 그림 용기 도 있어 야 하지만 이 두 용기 의 내용 수량 이 고정 되 지 않 아 레이아웃 할 때 만 듭 니 다.
줄 용기 너비: width, ct 너비 가 져 오기
각 줄 의 그림 을 저장 하 는 배열: imgArr [].불 러 온 그림 을 이 배열 에 눌 러 서 줄 이 폭 을 초과 하 는 지 판단 합 니 다.
방법:
소재 이미지 보유: getImgUrls () 방법 으로 이미지 링크 를 가 져 오 거나 데이터베이스 에서 그림 을 가 져 옵 니 다.여 기 는 방문 을 통 해서...https://placeholder.com/ 사이트 에서 코드 를 가 져 옵 니 다. 구체 적 으로 다음 과 같이 그림 정 보 를 불 러 옵 니 다. loadImg () 방법 으로 그림 정 보 를 불 러 옵 니 다. 렌 더 링 그림 대기 열: render () 는 그림 의 비례 크기 를 바 꾸 고 한 줄 에 몇 개의 그림 을 놓 을 수 있 는 지 계산 합 니 다. layot () 는 크기 를 바 꾼 그림 을 페이지 에 놓 습 니 다.append 는 대응 하 는 DOM 요소 노드 에 있 습 니 다.구체 적 인 관 계 는 앞의 부자 관계 에 대응 하면 된다.
어떻게 요소 가 사용자 의 시야 에 나타 나 는 것 을 판단 합 니까?
사용자 의 시야 에 새로운 그림 이 들 어 올 때 만 두 가지 상황 을 판단 합 니 다. (1) 창, 창 스크롤 과 요소 가 창 상단 의 오프셋 높이 를 가 져 오고 요소 가 창 시각 범위 에 나타 나 는 지 계산 합 니 다.
function isShow($el){
var winH = $(window).height(),//
scrollH = $(window).scrollTop(),//
top = $el.offset().top;//
if(top < scrollH + winH){
return true;//
}else{
return false;//
}
}
( ) , ;
$(window).on('scroll', function(){//
checkShow();
})
checkShow();
function checkShow(){//
$('img').each(function(){//
var $cur = $(this);
if(!!isloaded($cur)){return;}//
if (isShow($cur)) {
setTimeout(function(){
showImg($cur);
},300)//
};
});
}
(3) 요소 가 표 시 될 때 이전의 기본 사진 을 data - src 의 사진 으로 바 꿉 니 다.
function showImg($el){
$el.attr('src', $el.attr('data-src'));
$cur.data('isloaded',true);
}
브 라 우 저가 맨 아래로 굴 러 가 는 것 을 어떻게 판단 합 니까?
, DOM ,
scrollTop Y 。
clientHeight 。
scrollHeight
// Y
function getScrollTop(){
var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0;
if(document.body){
bodyScrollTop = document.body.scrollTop;
}
if(document.documentElement){
documentScrollTop = document.documentElement.scrollTop;
}
scrollTop = (bodyScrollTop - documentScrollTop > 0) ? bodyScrollTop : documentScrollTop;
return scrollTop;
}
//
function getScrollHeight(){
var scrollHeight = 0, bodyScrollHeight = 0, documentScrollHeight = 0;
if(document.body){
bodyScrollHeight = document.body.scrollHeight;
}
if(document.documentElement){
documentScrollHeight = document.documentElement.scrollHeight;
}
scrollHeight = (bodyScrollHeight - documentScrollHeight > 0) ? bodyScrollHeight : documentScrollHeight;
return scrollHeight;
}
//
function getWindowHeight(){
var windowHeight = 0;
if(document.compatMode == "CSS1Compat"){
windowHeight = document.documentElement.clientHeight;
}else{
windowHeight = document.body.clientHeight;
}
return windowHeight;
}
function touchedBottom(){
if(getScrollTop() + getWindowHeight() == getScrollHeight()){
console.log("you are in the bottom!");
return true;
}else{
return false;
}
};
과정 중의 그림 게 으 름 로드 효 과 를 실현 하 다.
git 미리 보기:https://ouyangbeibei.github.io/project/layout.md/lazyLoad.md/lazyLoad.html
과정 에서 폭포 흐름 의 구조 효 과 를 실현 하 다.
jsbin 미리 보기:http://jsbin.com/dicafopefu/edit?html,output
폭포 흐름 뉴스 사 이 트 를 실현 하고 GitHub 프로젝트 주소 와 프로젝트 미리 보기 링크 조회 효 과 를 답장 합 니 다.
퀘 스 트 요구:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.