1. HTML 템플릿 만들기
먼저 div 컨테이너를 사용하여 모든 콘텐츠를 보관한 다음 div 상자를 사용하여 그림을 배치하고 마지막으로 div box_border를 그림 프레임으로 사용하는 것이 아이디어입니다
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>瀑布流</title> </head> <body> <div class="container" id="container"> <div class="box_border" id="box_border"> <div class="box" id="box1"> <img src="/static/imghwm/default1.png" data-src="image/01.jpg" class="lazy" alt="JavaScript_javascript 기술을 기반으로 폭포 흐름 효과(순환 점근) 구현" > </div> <!--把Box复制多份,这里因为代码重复省略了--> </div> </div> </body> </html>
효과: (CSS 속성이 설정되지 않아 수직으로 배치됨)
2. CSS를 통해 간단하게 스타일을 설정합니다
주로 가로 배치, 액자 색상, 테두리 등을 설정합니다.
/* 边界不留空,背景黑灰 */ body{ margin: 0px; background: darkgray; } /* 总布局设置为相对布局 */ .container{ position: relative; } /* 设置box属性 */ .box{ padding: 5px; float: left; } /*设置图片边框阴影和圆角 */ .box_border{ padding: 5px; border: 1px solid #cccccc; box-shadow: 0px 0px 5px #ccc; border-radius: 5px; } /*设置图片格式*/ .box_border img{ width: 150px; height: auto; }
효과: (모든 것이 테두리에 포함됩니다)
3.JS는 각 행에 배치되는 사진 수를 제어합니다
위 CSS 레이아웃 후에는 브라우저 창의 크기가 변경되고 내부 사진 수도 변경됩니다. 이제 JS를 사용하여 각 행의 사진 수를 수정해야 화면에 좋은 결과를 얻을 수 있습니다. 다양한 크기
/* 用于加载其他函数 */ window.onload = function(){ setImgLocation("container"); } /* 设置图片个数 */ function setImgLocation(parent){ var cparent = document.getElementById(parent);//得到父节点 var childArray = getChildNodes(cparent);//得到图片数量 var imgWidth = childArray[0].offsetWidth;//获取照片宽度 var screenWidth = document.documentElement.clientWidth;//获取浏览器宽度 var count = Math.floor(screenWidth/imgWidth);//每行的个数 cparent.style.cssText = "width:"+count*imgWidth+"px;margin: 0 auto;";//设置其宽度并居中 } /* 获取全部图片的个数 */ function getChildNodes(parent){ var childArray =[];//定义一个数组存放图片box var tempNodes = parent.getElementsByTagName("*");//获取父节点下的所有节点 //循环添加class为box的节点 for(var i = 0;i<tempNodes.length;i++){ if(tempNodes[i].className == "box"){ childArray.push(tempNodes[i]); } } return childArray;//返回所有的子节点 }
렌더링: 화면 크기에 따라 표시되는 숫자가 다릅니다
4.JS는 정적 폭포 흐름을 구현합니다
먼저 정적 레이아웃을 구현하세요. 즉, 브라우저가 아래로 당겨도 자동으로 새 사진을 새로 고치지 않습니다.
순열 알고리즘 구현은 매우 간단합니다
1. 이미지 첫 번째 행의 높이를 모두 배열로 저장합니다
2. 첫 번째 행에 있는 그림의 최소 높이와 해당 위치를 계산합니다
3. 첫 번째 줄 다음의 첫 번째 사진을 이 위치에 배치하세요
4. 위치의 높이를 두 이미지의 합으로 재설정합니다
5. 남은 모든 사진을 2번 반복합니다
코드:
/* 用于加载其他函数 */ window.onload = function(){ setImgLocation("container"); } /* 设置图片个数及位置排列 */ function setImgLocation(parent){ var cparent = document.getElementById(parent);//得到父节点 var childArray = getChildNodes(cparent);//得到图片数量 var imgWidth = childArray[0].offsetWidth;//获取照片宽度 var screenWidth = document.documentElement.clientWidth;//获取浏览器宽度 var count = Math.floor(screenWidth/imgWidth);//每行的个数 cparent.style.cssText = "width:"+count*imgWidth+"px;margin: 0 auto;";//设置其宽度并居中 //定义数组,存放第一行照片高度 var imgHArray = []; //循环遍历图片 for(var i=0;i<childArray.length;i++){ //如果图片在第一行则获取高度 if(i<count){ imgHArray[i] = childArray[i].offsetHeight; }else//否则把最小高度的填充剩余图片 { var minHeight = Math.min.apply(null,imgHArray);//获取最小高度 var minIndex = getMinIndex(minHeight,imgHArray);//获取最小高度对应的下标 childArray[i].style.position = "absolute";//设置要填充的图片盒子为绝对布局,否则不能更换位置 childArray[i].style.top = minHeight+"px";//设置要填充图片距顶高度 childArray[i].style.left = childArray[minIndex].offsetLeft+"px";//设置要填充图片距左高度 imgHArray[minIndex] += childArray[i].offsetHeight;//填充后把当前位置高度设为两个图片相加 //开始下一轮循环 } } } /* 获取最小高度对应的下标 */ function getMinIndex(minHeight,imgHArray){ for(var i in imgHArray){ if(imgHArray[i] == minHeight){ return i; } } } /* 获取全部图片的个数 */ function getChildNodes(parent){ var childArray =[];//定义一个数组存放图片box var tempNodes = parent.getElementsByTagName("*");//获取父节点下的所有节点 //循环添加class为box的节点 for(var i = 0;i<tempNodes.length;i++){ if(tempNodes[i].className == "box"){ childArray.push(tempNodes[i]); } } return childArray;//返回所有的子节点 }
효과:
5.js는 동적 로딩을 구현합니다
동적 로딩은 스크롤 막대가 아래쪽으로 미끄러지지 않는다는 것을 의미합니다. 동적 로딩을 해결하려면 다음 두 가지 문제를 고려해야 합니다.
1. 언제 로딩되나요?
슬라이딩 거리 + 브라우저 높이>마지막 사진과 상단 사이의 거리
2. 로딩 방법
새 노드를 생성하여 생성된 노드를 추가하세요.
최종 코드:
/* 用于加载其他函数 */ window.onload = function() { var cparent = document.getElementById("container");//得到父节点 setImgLocation(cparent); //设置加载的图片 var data = ["image/01.jpg", "image/02.jpg", "image/03.jpg", "image/04.jpg", "image/05.jpg", "image/06.jpg", "image/07.jpg", "image/08.jpg", "image/09.jpg", "image/11.jpg", "image/12.jpg", "image/13.jpg", "image/14.jpg", "image/15.jpg", "image/16.jpg", "image/17.jpg"]; //滑动监听 window.onscroll = function () { if (checkLoad(cparent)) { for (var i = 0; i < data.length; i++) { //创建新的节点 var div1 = document.createElement("div"); div1.className = "box"; var div2 = document.createElement("div"); div2.className = "box_border"; var img = document.createElement("img"); img.className = ".box_border img"; img.src = data[i]; div2.appendChild(img); div1.appendChild(div2); cparent.appendChild(div1); } setImgLocation(cparent);//创建节点后重新排列 } } } /* 检查是否应该加载 */ function checkLoad(cparent){ var childArray = getChildNodes(cparent);//得到图片个数 var lastImgHight = childArray[childArray.length-1].offsetTop;//得到最后一张图片距离顶部高度 var scrollHeight = document.documentElement.scrollTop||document.body.scrollTop;//获得滑动距离(浏览器兼容性真烦人) var browserHeight = document.documentElement.clientHeight;//获得浏览器高度 if(lastImgHight < scrollHeight+browserHeight){//判断是否加载 return true; }else { return false; } } /* 设置图片个数及位置排列 */ function setImgLocation(cparent){ var childArray = getChildNodes(cparent);//得到图片数量 var imgWidth = childArray[0].offsetWidth;//获取照片宽度 var browserWidth = document.documentElement.clientWidth;//获取浏览器宽度 var count = Math.floor(browserWidth/imgWidth);//每行的个数 cparent.style.cssText = "width:"+count*imgWidth+"px;margin: 0 auto;";//设置其宽度并居中 //定义数组,存放第一行照片高度 var imgHArray = []; //循环遍历图片 for(var i=0;i<childArray.length;i++){ //如果图片在第一行则获取高度 if(i<count){ imgHArray[i] = childArray[i].offsetHeight; }else//否则把最小高度的填充剩余图片 { var minHeight = Math.min.apply(null,imgHArray);//获取最小高度 var minIndex = getMinIndex(minHeight,imgHArray);//获取最小高度对应的下标 childArray[i].style.position = "absolute";//设置要填充的图片盒子为绝对布局,否则不能更换位置 childArray[i].style.top = minHeight+"px";//设置要填充图片距顶高度 childArray[i].style.left = childArray[minIndex].offsetLeft+"px";//设置要填充图片距左高度 imgHArray[minIndex] += childArray[i].offsetHeight;//填充后把当前位置高度设为两个图片相加 //开始下一轮循环 } } } /* 获取最小高度对应的下标 */ function getMinIndex(minHeight,imgHArray){ for(var i in imgHArray){ if(imgHArray[i] == minHeight){ return i; } } } /* 获取全部图片的个数 */ function getChildNodes(parent){ var childArray =[];//定义一个数组存放图片box var tempNodes = parent.getElementsByTagName("*");//获取父节点下的所有节点 //循环添加class为box的节点 for(var i = 0;i<tempNodes.length;i++){ if(tempNodes[i].className == "box"){ childArray.push(tempNodes[i]); } } return childArray;//返回所有的子节点 }
효과:

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

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 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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