이 글의 예시는 참고용으로 js 폭포 흐름 레이아웃 학습 자료를 공유합니다.
특징: 동일한 너비와 다른 높이.
구현 방법: Javascript/Jquery/CSS3 다중 열 레이아웃.
샘플 웹사이트: Huaban.com --> 카테고리
1. JS는 폭포 흐름을 구현합니다.
index.html: 페이지 구조
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>瀑布流布局</title> <link rel="stylesheet" href="styles/layout.css"> </head> <body> <div id="main"> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/0.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/1.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/2.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/3.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/4.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/5.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/6.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/7.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/8.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/9.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/10.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/11.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/12.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/13.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/14.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/15.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/16.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/17.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/18.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/19.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/20.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/21.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/22.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/23.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/24.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/25.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/26.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/27.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/28.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/29.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/30.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/31.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/32.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/33.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/34.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/35.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/36.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/37.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/38.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/39.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/40.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/41.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/42.jpg" class="lazy" alt=""></div></div> <div><div><img src="/static/imghwm/default1.png" data-src="../waterFall/pic/43.jpg" class="lazy" alt=""></div></div> </div> <script src="scripts/waterfall.js"></script> </body> </html>
레이아웃 .css: 페이지 요소 스타일
*{ pdding:0; margin:0; } div#main{ position: relative; } div.box{ padding:15px 0 0 15px; float: left; } div.pic{ padding:10px; border:1px solid #ccc; border-radius:5px; box-shadow: 0 0 5px #ccc; } .pic img{ height:auto; width:165px; }
waterfall.js
window.onload=function(){ waterFall('main','box'); //模拟后台相应数据json var dataInt={ "data": [ {"src":"0.jpg"}, {"src":"1.jpg"}, {"src":"2.jpg"}, {"src":"3.jpg"}, {"src":"4.jpg"}, {"src":"5.jpg"}, {"src":"6.jpg"} ] } window.onscroll=function(){ if(checkScrollSlide){ //将数据块渲染到当前页面的尾部 var oParent=document.getElementById("main"); for(var i=0;i<dataInt.data.length;i++){ var oBox=document.createElement("div"); oBox.className="box"; oParent.appendChild(oBox); var oPic=document.createElement("div"); oPic.className="pic"; oBox.appendChild(oPic); var img=document.createElement("img"); img.setAttribute("src",dataInt.data[i]); img.src="pic/"+dataInt.data[i].src; oPic.appendChild(img); } dataInt=null;//清空数据块,防止无限加载 waterFall('main','box');//对页面新元素进行布局渲染 } } } function waterFall(parent,box){ //将main下的class为box的所有元素取出来 var oParent=document.getElementById(parent); var oBoxs=getByClass(oParent,box); console.log(oBoxs.length); //计算整个页面显示的列数(页面宽/box宽) var oBoxW=oBoxs[0].offsetWidth; // console.log(oBoxW); var cols=Math.floor(document.documentElement.clientWidth/oBoxW); // console.log(cols); //设置main的宽 oParent.style.cssText="width:"+oBoxW*cols+"px;margin:0 auto;" var hArr=[];//存放每列高度的数组 for(var i=0;i<oBoxs.length;i++){ if(i<cols){ hArr.push(oBoxs[i].offsetHeight); }else{ var minH=Math.min.apply(null,hArr);//获取当前数组最小高度值 // console.log(minH); var index=getMinhIndex(hArr,minH);//获取数组最小高度的索引 //console.log(index); oBoxs[i].style.position="absolute";//将之后的图片依次绝对定位 oBoxs[i].style.top=minH+"px"; oBoxs[i].style.left=index*oBoxW+"px";//计算新图片所在的位置并赋值 hArr[index]+=oBoxs[i].offsetHeight;//变化数组列的高度值,因为加上了一张图片 } //console.log(hArr); } } //根据class获取元素 function getByClass(parent,clsName){ var boxArr=new Array(),//用来存储获取到的所有class为box的元素 oElements=parent.getElementsByTagName("*"); for(var i=0;i<oElements.length;i++){ if(oElements[i].className==clsName){ boxArr.push(oElements[i]); } } return boxArr; } function getMinhIndex(arr,val){ for(var i=0;i<arr.length;i++){ if(arr[i]==val){ return i; } } } //检测是否具备滚动条加载数据块条件 function checkScrollSlide(){ var oParent=document.getElementById("main"); var oBoxs=getByClass(oParent,"box"); var lastBoxH=oBoxs[oBoxs.length-1].offsetTop+Math.floor(oBoxs[oBoxs.length-1].offsetHeight/2); var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;//混杂模式和标准模式下的scrollTop获取 //console.log(scrollTop); var height=document.body.clientHeight||document.documentElement.clientHeight;//混杂模式和标准模式下的浏览器窗口高度获取 return (lastBoxH<scrollTop+height)?true:false;//检测最后一个box高度是否小于滚动高度+窗口高度,返回布尔值 }
2. JQuery
$( window ).on( "load", function(){ waterfall('main','pin'); var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]}; window.onscroll=function(){ if(checkscrollside()){ $.each( dataInt.data, function( index, value ){ var $oPin = $('<div>').addClass('pin').appendTo( $( "#main" ) ); var $oBox = $('<div>').addClass('box').appendTo( $oPin ); $('<img alt="JS 폭포 흐름 레이아웃에 대해 자세히 알아보기" >').attr('src','./images/' + $( value).attr( 'src') ).appendTo($oBox); }); waterfall(); }; } }); /* parend 父级id pin 元素id */ function waterfall(parent,pin){ var $aPin = $( "#main>div" ); var iPinW = $aPin.eq( 0 ).width();// 一个块框pin的宽 var num = Math.floor( $( window ).width() / iPinW );//每行中能容纳的pin个数【窗口宽度除以一个块框宽度】 //oParent.style.cssText='width:'+iPinW*num+'px;ma rgin:0 auto;';//设置父级居中样式:定宽+自动水平外边距 $( "#main" ).css({ 'width:' : iPinW * num, 'margin': '0 auto' }); var pinHArr=[];//用于存储 每列中的所有块框相加的高度。 $aPin.each( function( index, value ){ var pinH = $aPin.eq( index ).height(); if( index < num ){ pinHArr[ index ] = pinH; //第一行中的num个块框pin 先添加进数组pinHArr }else{ var minH = Math.min.apply( null, pinHArr );//数组pinHArr中的最小值minH var minHIndex = $.inArray( minH, pinHArr ); $( value ).css({ 'position': 'absolute', 'top': minH + 15, 'left': $aPin.eq( minHIndex ).position().left }); //数组 最小高元素的高 + 添加上的aPin[i]块框高 pinHArr[ minHIndex ] += $aPin.eq( index ).height() + 15;//更新添加了块框后的列高 } }); } function checkscrollside(){ var $aPin = $( "#main>div" ); var lastPinH = $aPin.last().get(0).offsetTop + Math.floor($aPin.last().height()/2);//创建【触发添加块框函数waterfall()】的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载) var scrollTop = $( window ).scrollTop()//注意解决兼容性 var documentH = $( document ).height();//页面高度 return (lastPinH < scrollTop + documentH ) ? true : false;//到达指定高度后 返回true,触发waterfall()函数 }
3. CSS 다중 열 레이아웃
.container{ -webkit-column-width:160px; -moz-column-width:160px; -webkit-column-gap:5px; -moz-column-gap:5px; } /*数据块 砖块*/ .container div{width:160px; margin:4px 0;}
[css3과 js 구현 방법 비교]
--css3 방법--
1: 계산이 필요하지 않으며 브라우저가 자동으로 계산하며 열 너비를 1개만 설정하면 고성능
2: 브라우저 너비에 따라 열 너비가 변경되고 사용자 경험이 좋지 않습니다.
3: 이미지가 세로 순서로 정렬되어 이미지 표시 순서가 혼란스럽습니다.
4 이미지 로딩에는 여전히 js가 필요합니다. >--js 방법--
js로 구현한 워터폴 흐름은 위와 같은 단점은 없으나 성능이 상대적으로 좋지 않습니다!

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
