亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

原生JavaScript+LESS實現瀑布流

2019-11-20 13:45:37
字體:
來源:轉載
供稿:網友

HTML(注意包裹關系,方便js調用)

復制代碼 代碼如下:

 <body>
     <div id="main">
         <div class="box">
             <div class="pic">
                 <img src="images/0.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/1.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/2.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/3.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/4.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/2.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/3.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/4.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/5.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/6.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/7.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/3.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/4.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/5.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/3.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/4.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/5.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/6.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/7.jpg" alt="">
             </div>
         </div>
         <div class="box">
             <div class="pic">
                 <img src="images/3.jpg" alt="">
             </div>
         </div>
     </div>
 </body>

LESS(less預編譯)

復制代碼 代碼如下:

 * {
     margin: 0;
     padding: 0;
 }
 #main {
     position: relative;
 
 }
 .box {
     padding:15px 0 0 15px;
     float:left;
 }
 .pic {
     padding: 10px;
     border: 1px solid #ccc;
     border-radius: 5px;
     box-shadow: 0px 0px 5px #ccc;
     img {
         width:165px;
         height:auto;
     }
 }

JavaScript(自己理解的注解)

(函數存在一定瑕疵,僅用于學習理解)

復制代碼 代碼如下:

 window.onload = function () {
     waterfall("main","box");
     //調用自定義函數;作用于main下的每一個box元素;
     var dataInt = { "data":[{"src":"7.jpg"},{"src":"8.jpg"},{"src":"9.jpg"},{"src":"6.jpg"}]}
     //模擬json數據;
     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);
                 //創建box塊
                 var oPic = document.createElement("div");
                 oPic.className = "pic";
                 oBox.appendChild(oPic);
                 //創建pic塊
                 var oImg = document.createElement("img");
                 //創建img元素
                 oImg.src = "images/"+dataInt.data[i].src;
                 //設置圖片引用;
                 oPic.appendChild(oImg);
             };
             waterfall("main","box");
             //將動態生成的數據塊進行流式布局;
         };
     };
 };
 //流式布局主函數,自動調整數據塊的位置;
 function waterfall (parent,box) {
     //將main下的所有box元素取出;"parent"代表父級,box代表box元素;
     var oParent = document.getElementById(parent);
     //將父級元素賦值給變量oParent;
     var oBoxs = getByClass(oParent,box);
     //通過自定義函數,獲取父級下的每一個box元素;得到的是所有box元素的集合;
     //再次將這個得到的box元素的集合賦值給oBoxs;(因為作用域問題,變量不共用);
     // console.log(oBoxs.length);
     //在控制臺中打印出box元素的數量,用于調試;
     var oBoxW = oBoxs[0].offsetWidth;
     //計算出每一列的寬度;offsetWidth包含內邊距在內的寬度;
     // console.log(oBoxW);測試;
     var cols = Math.floor(document.documentElement.clientWidth/oBoxW);
     //計算整個頁面顯示的列數(頁面寬/box的寬);
     oParent.style.cssText = "width:"+oBoxW*cols+"px;margin:0 auto";
     //父元素main的寬度=每一列的寬*列數;并且左右居中;
     var hArr = [];
     //存放每一列高度的數組;
     for (var i = 0; i < oBoxs.length; i++) {
     //遍歷oBoxs數組;
         if (i<cols) {
         //這里符合條件的是第一行的每列的第一個;
             hArr.push(oBoxs[i].offsetHeight);
             //得出每一列的高度放入數組中;
         }else{
         //這里的box元素已經不是第一行的元素了;
             var minH = Math.min.apply(null,hArr);
             //得出第一行的最小高度并賦值給變量;
             // console.log(minH);
             var index = getMinhIndex(hArr,minH);
             //調用自定義函數獲取這個變量的index值;
             oBoxs[i].style.position = "absolute";
             oBoxs[i].style.top = minH+"px";
             oBoxs[i].style.left = oBoxW*index+"px";
             //設置當前元素的位置;
             //當前元素的left值=頂上的元素的index值*每列的寬度;
             //oBoxs[i].style.left = oBoxs[index].offsetLeft+"px";
             //第二種獲取當前元素的left值;
             //此時在第index列添加了一個box元素;
             hArr[index]+=oBoxs[i].offsetHeight;
             //每一列更新后的高度=每一列原來的高度+后來添加的box元素的高度;
         };
     };
 };
 //js原生通過Class獲取元素;
 function getByClass (parent,claName) {
     //通過class獲取元素;(在父級parent的容器下獲取claName的元素;)
     var boxArr = new Array();
     //聲明數組,用來存儲獲取到的所有class為box的元素;
     var oElements = parent.getElementsByTagName("*")
     //聲明變量用來存儲此父元素下的所有子元素(*);
     for (var i = 0; i < oElements.length; i++) {
     //遍歷數組oElements;
         if (oElements[i].className==claName) {
         //如果數組中的某一個元素的calss類與參數claName相同;
             boxArr.push(oElements[i]);
             //則把遍歷到的這個box元素歸類到boxArr數組;
         };
     };
     return boxArr;
     //調用數組后,經過一系列函數,遍歷;將得到的數組返回給調用的函數;
 };
 //獲取數組元素的index值;
 function getMinhIndex (arr,val) {
 //arr是父級數組;val是當前元素;
     for(var i in arr){
     //從0開始遍歷;
         if(arr[i]==val){
         //找到當前元素在數組中對應的index值;
             return i;
             //函數返回值即是當前元素的index值;
         };
     };
 };
 //檢測是否具備了滾動加載數據塊的條件;
 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);
     //最后一個box元素距離頁面頂部的高度(找到最后一個box(oBoxs.lenght-1)的offsetTop)+自身的一半;
     var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
     //瀏覽器滾動條滾動的距離;
     // console.log(scrollTop);
     var height = document.body.clientHeight || document.documentElement.clientHeight;
     //瀏覽器視口的高度;
     // console.log(height);
     return (lastBoxH<scrollTop+height)?true:false;
     //頁面滾動的距離是否大于最后一個box元素的offsetTop;
 };

總結:

用瀑布流來展現照片再好不過了,下面是瀑布流(每一行的長度等于瀏覽器窗口的長度)的一種實現方式,也可以用css3實現,很簡單,谷歌一下你就知道。
我的思路大概是一張一張的圖片插入,當這一行的圖片保持長寬比例不變并且高度低于250時就完成一個了循環,即這一行插入進去了,。
然后進入下一個循環插入下一行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品一区在线观看香蕉| 正在播放欧美视频| 亚洲理论在线a中文字幕| 亚洲xxxx视频| 国产成人小视频在线观看| 日韩美女主播视频| 亚洲成人精品久久久| 国产精品久久久久久久app| 日韩av在线网| 国产精品久久中文| 亚洲自拍高清视频网站| 懂色aⅴ精品一区二区三区蜜月| 狠狠做深爱婷婷久久综合一区| 91国产精品电影| 欧美大片第1页| 久久av资源网站| 国产视频在线观看一区二区| 亚洲女同精品视频| 久久久亚洲影院你懂的| 色诱女教师一区二区三区| 国产极品精品在线观看| 国产综合香蕉五月婷在线| 国产高清在线不卡| 国产最新精品视频| 日韩电影大全免费观看2023年上| 欧美精品在线观看| 欧美一级黄色网| 国产亚洲人成a一在线v站| 97国产精品人人爽人人做| 欧美日韩中文在线观看| 欧美日韩亚洲精品内裤| 中文字幕日韩在线播放| 久久影院中文字幕| 欧美一区视频在线| 两个人的视频www国产精品| 国产精品一久久香蕉国产线看观看| 成人在线视频网站| 热re91久久精品国99热蜜臀| 日韩一区二区福利| 久久综合伊人77777尤物| 欧美成人免费全部观看天天性色| 91免费看片网站| 亚洲国产精品高清久久久| 欧美成人精品不卡视频在线观看| 日韩av第一页| 亚洲最新av网址| 狠狠色狠色综合曰曰| 精品五月天久久| 久久视频国产精品免费视频在线| 亚洲欧美成人在线| 福利微拍一区二区| 久久天天躁日日躁| 欧美亚洲一级片| 国产精品久久久久久久久久99| 自拍偷拍亚洲精品| 国产91精品不卡视频| 国产视频精品在线| 亚洲乱码国产乱码精品精| 超碰91人人草人人干| 久久久精品一区| 78m国产成人精品视频| 色综合男人天堂| 欧美日韩免费观看中文| 奇米影视亚洲狠狠色| 亚洲乱码av中文一区二区| 日韩电影中文字幕av| 亚洲久久久久久久久久久| 国产免费一区二区三区在线能观看| 精品视频中文字幕| 日韩av免费一区| 日本aⅴ大伊香蕉精品视频| 国产精品美女久久久久av超清| 草民午夜欧美限制a级福利片| 国内精品小视频| 亚洲欧洲黄色网| 中国china体内裑精亚洲片| 亚洲欧美www| 国产精品一区二区三| 精品女厕一区二区三区| 色综合亚洲精品激情狠狠| 国产精品久久久久91| 国产在线观看一区二区三区| 美女扒开尿口让男人操亚洲视频网站| 久久久久久久久国产精品| 国产剧情久久久久久| 日韩av一区二区在线| 国产精国产精品| 国产欧美一区二区三区久久人妖| 欧美成人手机在线| 精品久久国产精品| 中文字幕精品www乱入免费视频| 欧美亚洲另类制服自拍| 国产日韩欧美日韩| 91精品国产自产91精品| 精品亚洲va在线va天堂资源站| 91av福利视频| 中文字幕亚洲精品| 久久91亚洲精品中文字幕| 国产精品 欧美在线| 欧美日韩国产在线| 欧美理论电影网| 国产成人中文字幕| 亚洲精品www| 美女性感视频久久久| 国产suv精品一区二区三区88区| 国产精品美女久久久久av超清| 色悠久久久久综合先锋影音下载| 亚洲精品乱码久久久久久金桔影视| 欧美一级大片在线观看| 国产情人节一区| 国产亚洲欧洲高清| 国产色婷婷国产综合在线理论片a| 国产日韩欧美视频在线| 精品国内亚洲在观看18黄| 精品亚洲一区二区| 亚洲欧美国产精品va在线观看| 久久久国产一区二区三区| 欧美在线亚洲在线| 国模精品一区二区三区色天香| 日本道色综合久久影院| 日韩精品在线第一页| 亚洲成人激情在线| 欧美专区在线播放| 欧美亚洲国产日本| 成人免费网站在线| 亚洲国产精品字幕| 国产精品av免费在线观看| 亚洲免费视频观看| 欧美亚洲在线视频| 色狠狠av一区二区三区香蕉蜜桃| 欧美日韩在线看| 精品亚洲一区二区三区四区五区| 成人国产精品久久久久久亚洲| 91嫩草在线视频| 成人情趣片在线观看免费| 久久久久国产精品免费| 亚洲电影免费观看高清完整版| 91久久精品美女| 久久亚洲一区二区三区四区五区高| 精品久久久精品| 69久久夜色精品国产69| 国产女人18毛片水18精品| 亚洲人成电影在线观看天堂色| 国产精品美乳一区二区免费| 久久天天躁狠狠躁夜夜爽蜜月| 久久香蕉国产线看观看av| 欧美精品情趣视频| 欧美色视频日本高清在线观看| 奇门遁甲1982国语版免费观看高清| 91在线观看免费高清| 永久免费毛片在线播放不卡| 欧美日韩一区二区在线播放| 国产成人精品优优av| 国内免费久久久久久久久久久| 国产欧美精品日韩| 97视频免费看| 97在线免费视频| 国产又爽又黄的激情精品视频| 欧美视频第一页| 亚洲bt欧美bt日本bt| 黑人欧美xxxx| 精品国产一区二区三区久久| 久久久国产一区二区三区| 亚洲欧洲午夜一线一品|