JavaScript 적응 폭 폭포 흐름 구현 ideas_javascript 기술

WBOY
풀어 주다: 2016-05-16 17:41:41
원래의
1038명이 탐색했습니다.

이런 레이아웃은 낯설지 않습니다. 2011년 핀터레스트 설립 이후 중국 인터넷에서는 화반닷컴(Huaban.com), 메이리숴(Meilishuo) 등 폭포수 흐름 레이아웃을 사용하는 국내 웹사이트가 빠르게 확산되고 있습니다. , 등. 사실 중국 인터넷에서는 해외에서 인기 있는 일부 모델을 흉내내는 것(물론 모방이나 표절이라고도 할 수 있죠, 하하!!) 은 항상 좋은 생각이었습니다.

자, 이제 본론으로 들어가겠습니다. 여기에서는 주로 폭포 흐름의 구현 방법인 절대 위치 지정(CSS) javascript ajax json을 소개합니다. 쉽게 말하면 스크롤 로딩을 하지 않으면 절대 위치 지정(CSS) 자바스크립트인데, 스크롤을 할 때 더 많은 콘텐츠를 로딩할 때 Ajax와 json을 사용합니다.

구현 아이디어는 다음과 같습니다:

1. 페이지의 너비와 페이지에 데이터 블록을 배치할 수 있는 열 수를 계산합니다(위 그림과 같이 6개의 열이 있음).

2. 각 데이터 블록의 높이 크기를 배열에 기록합니다(모든 이미지가 로드될 때까지 기다려야 합니다. 그렇지 않으면 이미지의 높이를 알 수 없습니다).

3. 첫 번째 행의 상단 위치가 동일하므로 절대 위치 지정을 사용하여 페이지의 첫 번째 행을 먼저 채운 다음 배열을 사용하여 각 열의 전체 높이를 기록합니다.

4. 계속해서 절대 위치 지정을 사용하여 가장 짧은 열 뒤에 다른 데이터 블록을 배치한 다음 열 높이를 업데이트합니다.

5. 브라우저 창 크기가 변경되면 위의 1~4단계를 다시 수행하여 재정렬합니다(페이지 너비에 따라 열 수가 변경되므로 재정렬해야 함).

6. 스크롤 바를 아래로 스크롤하면 새로운 데이터가 로드되어 가장 짧은 열 위치에 배치된 후 열 높이가 업데이트됩니다.

아이디어는 있고, 그것을 코드로 어떻게 구현하느냐가 문제입니다. 물론, 위의 6단계를 읽고 구현 방법을 이미 알고 있다면 다음 내용을 자세히 읽을 필요는 없습니다.

먼저 페이지에 기본 HTML과 CSS를 작성합니다(편의상 CSS는 외부에 링크되지 않습니다). 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.





瀑布流布局








위 코드는 처음에 20개의 데이터 블록을 로드하는 것을 볼 수 있습니다. CSS에서 불투명도는 0으로 정의되어 있으며 데이터 블록이 배출되기 전에 이를 숨기는 것이 목적입니다. 여기에서는 약간의 경험을 위해 css3을 사용합니다. 업그레이드; 또 다른 요점은 페이지 하단에 데이터가 로드 중임을 나타내는 ID가 "loading"인 DIV를 볼 수 있다는 것입니다. JS를 사용하여 위의 아이디어를 구현해 보겠습니다(6단계).

1. 페이지 너비와 페이지에 데이터 블록을 배치할 수 있는 열 수를 계산합니다.

코드 복사 코드는 다음과 같습니다.



설명이 매우 명확하므로 이 단계를 설명하지 않아도 쉽게 이해할 수 있습니다.

2. 각 데이터 블록의 높이 치수를 배열에 기록합니다.

코드를 복사합니다 코드는 다음과 같습니다.




데이터 블록에 그림이 포함되어 있고 그림의 크기가 제공되지 않으므로 그림의 높이를 얻으려면 그림이 로드될 때까지 기다려야 합니다. window.onload 중에 흐름 메서드를 호출할 수 있습니다. 코드는 다음과 같습니다.



코드 복사
코드는 다음과 같습니다.



3. 페이지의 첫 번째 행을 먼저 채우려면 절대 위치 지정을 사용하세요. 첫 번째 행의 높이가 동일하고 배열을 사용하여 각 열의 전체 높이를 기록합니다.


코드 복사
코드는 다음과 같습니다.




현재까지는 브라우저에서 효과를 미리 볼 수 있습니다.

자, 아이디어의 네 번째 단계인 다른 데이터 블록 배치를 시작하겠습니다.

4. 계속해서 절대 위치 지정을 사용하여 가장 짧은 열 위치에 다른 데이터 블록을 배치한 다음 열 높이를 업데이트합니다.


코드 복사 코드는 다음과 같습니다.


이 단계에서는 브라우저로 이동하여 효과를 다시 확인할 수 있습니다. 전체 폭포 흐름의 프로토타입이 나왔습니다:




5. 브라우저 창의 크기가 변경되면 위의 1~4단계를 다시 수행하여 재정렬하세요

이 단계도 매우 편리합니다. 창 크기를 변경할 때 흐름 메서드를 다시 실행하면 됩니다.

코드 복사
코드는 다음과 같습니다.





이 단계에는 많은 코드가 포함됩니다. 간단하게 요약하면 몇 가지 메서드(scroll(), _addItem(), _request(), _appendhtml())가 더 있다는 것입니다.

주로 스크롤()을 살펴보세요. 여기서 _addItem() 및 _requeat()는 scroll()에 의해 호출되고 _appendhtml()은 _addItem()에 의해 호출됩니다.

이 단계의 전체 과정은 페이지가 데이터의 가장 짧은 열의 맨 아래로 스크롤되면 새 데이터를 로드하라는 ajax 요청이 발행되고, 데이터의 모든 이미지가 로드된 후 추가됩니다. 그 다음에는 데이터 항목의 높이가 lenArr 배열에 기록되고, 새로 추가된 데이터 항목은 각 항목이 가장 짧은 열 뒤에 배치된다는 규칙에 따라 적절한 위치에 배치 및 배열됩니다. 로딩 이미지가 아래쪽 위치로 이동됩니다.

위의 전체 아이디어를 요약하면 언급할 만한 4곳이 있습니다. :

1. 브라우저 창을 확대/축소할 때 성능 손실을 줄이기 위해 재정렬을 수행하기 전에 확대/축소가 완료될 때까지 기다려야 합니다. 위의 아이디어는 이를 처리하기 위해 setTimeout을 사용하는 것입니다. .

2. 새로운 데이터를 불러오기 위해 페이지를 아래로 스크롤할 때, 새로운 데이터만 정리하면 됩니다.

3. 위의 아이디어에서는 새 데이터를 로드할 때 이미지가 로드될 때까지 기다려야 높이를 알 수 있지만 실제 프로젝트에서는 서버에서 높이 값을 제공하는 것이 가장 좋습니다.

4. 스크롤이 새 데이터 로드를 트리거할 때 이벤트가 여러 번 트리거되는 것을 피하세요. 위의 아이디어는 onscroll 이벤트를 비우고 로드가 완료된 후 이벤트를 복원하는 것입니다.

끝 부분에 전체 코드 첨부:
flow.html

코드 복사 코드는 다음과 같습니다.
 




瀑布流布局





인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿