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

首頁 > 編程 > JavaScript > 正文

詳解照片瀑布流效果(js,jquery分別實現與知識點總結)

2019-11-19 18:10:43
字體:
來源:轉載
供稿:網友

看了網上的瀑布流教程,自己跟著寫了遍,然后總結了下知識點

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="jquery-1.8.3.min.js"/></script> <script type="text/javascript" src="script2.js"/></script> <title></title> <style type="text/css">  *{padding: 0;margin:0;}  #main{   margin-top: 10px;   position: relative;   }  .pin{   margin:0;   padding:0 0 5px 3px;   float:left;  }  .box{   padding: 10px 5px 0 5px;   border:1px solid #ccc;   box-shadow: 0 0 6px #ccc;   border-radius: 5px;  }  .box img{   border:0;   margin:0;   width:200px;   height:auto;  } </style> </head> <body> <div id="main">  <div class="pin">   <div class="box">    <img src="images/1.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/2.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/3.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/4.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/5.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/6.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/7.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/8.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/9.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/1.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/2.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/3.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/4.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/5.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/6.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/7.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/8.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/9.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/1.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/2.jpg"/>   </div>  </div>  <div class="pin">   <div class="box">    <img src="images/3.jpg"/>   </div>  </div> </div> </body> </html> 

用js實現部分:

window.onload=function(){    waterfall('main','box');   var dataimg={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'},{'src':'5.jpg'},{'src':'6.jpg'},{'src':'7.jpg'},{'src':'8.jpg'},{'src':'9.jpg'}]};     window.onscroll=function()   {    if(checkscrollside())    {     var main= document.getElementById('main');     for(var i=0;i<dataimg.data.length;i++)     {      var pin=document.createElement('div');      pin.className='pin';          main.appendChild(pin);         var box=document.createElement('div');      box.className='box';      pin.appendChild(box);      var img=document.createElement('img');      img.src='images/'+dataimg.data[i].src;      box.appendChild(img);     }     waterfall('main','box');    };   } }    function $$(clsName,ele) {  //如果當前瀏覽器支持通過類名獲取元素,直接返回  if(document.getElementsByClassName)  {   return(ele||document).getElementsByClassName(clsName);  }  else  {   //盡量把這些量存放在變量中,否則   //例如循環不用len,而用nodes.length,會每一次循環都遍歷一次   var nodes=(ele||document).getElementsByTagName("*"),   eles=[],   len=nodes.length   i,   j,   currNode,   clsNames,   clsLen;   for(i=0;i<len;i++)   {    currNode=nodes[i];    clsNames=currNode.className.split(' ');    clsLen=clsNames.length;    for(j=0;j<clsLen;j++)    {     if(clsNames[j]==clsName)     {   eles.push(currNode);       break;     }    }   }   return eles;  } } //知識點一:js中通過屬性offset--等,但padding,margin等只能獲取在內聯html中有的樣式, //因此,下面這個函數是獲取css樣式的通用函數。 var getStyle = function(dom, attr) {  return dom.currentStyle ? dom.currentStyle[attr] : getComputedStyle(dom, false)[attr]; }  function waterfall(parent,box){   var main=document.getElementById(parent);   var boxes=$$(box,main);    var pins=$$('pin',main);   //console.log(boxes.length);    var pinw=pins[0];   var boxw=boxes[0].offsetWidth+parseInt(getStyle(pinw,'paddingLeft'));   console.log(boxes[0].clientWidth);   //console.log(boxw+','+main.clientWidth+','+main.offsetWidth+','+getStyle(boxes[0],'margin'));   var cols=Math.floor(document.documentElement.clientWidth/boxw);    console.log(cols);   main.style.width=cols*boxw+'px';   var boxesh=[];   for(var i=0;i<boxes.length;i++){    if(i<cols){     boxesh.push(boxes[i].offsetHeight+parseInt(getStyle(pinw,'paddingBottom')));    }    else{     var minh=Math.min.apply(null,boxesh);     var index=getMinIndex(boxesh,minh);     boxes[i].style.position='absolute';     boxes[i].style.top=minh+'px';     boxes[i].style.left=index*boxw+'px';     boxesh[index]+=boxes[i].offsetHeight+parseInt(getStyle(pinw,'paddingLeft'));    }   }  }   function getMinIndex(arr,val){   for(var i=0;i<arr.length;i++){    if(arr[i]==val)     return i;   }  }   function checkscrollside(){  var main=document.getElementById('main');  var aPin=$$('pin',main);  console.log(aPin.length);  var lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);  var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;  var documentH=document.documentElement.clientHeight;//頁面高度  return (lastPinH<scrollTop+documentH)?true:false; } 

用jQuery實現部分:

//知識點一:jquery事件綁定 $(window).on('load',function(){  waterfall();  var dataimg={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'},{'src':'5.jpg'},{'src':'6.jpg'},{'src':'7.jpg'},{'src':'8.jpg'},{'src':'9.jpg'}]};  $(window).on('scroll',function(){   if(checkScrollSlide()){    //知識點二:數組遍歷    //知識點三:value參數是DOM對象    $.each(dataimg.data,function(key,value){     //知識點四:創建DOM元素,不需要createElement('div');     //知識點五:為元素綁定class,不再是className='';     //知識點六:往元素中填充元素,不再是obj.appendChild(obj);     //知識點七:屬性的獲取和設置,可以直接用attr (注意這是針對jquey對象的方法);     var oBox=$('<div>').addClass('pin').appendTo($('#main'));     var oPic=$('<div>').addClass('box').appendTo($(oBox));     $('<img>').attr('src','images/'+value.src).appendTo($(oPic));    })    waterfall();   }  }) })  function waterfall(){  var $boxs=$('#main>.pin');  //知識點八:jquery中的outerWidth(false)方法==js中的offsetWidth屬性  //innerWidth()==clientWidth;  //width()==width;  var w=$boxs.eq(0).outerWidth(false);  //console.log(w);  var cols=Math.floor($(window).width()/w);  //知識點九:jquery可以直接css(),js是obj,style.margin: ect;  $('#main').width(cols*w).css('margin','10px auto');  var hArr=[];  //注意,這兒value是DOM對象  $boxs.each(function(index,value){   var h=$boxs.eq(index).outerHeight(false);   if(index<cols){    hArr.push(h);   }else{    var minH=Math.min.apply(null,hArr);    //知識點十:jquey中直接封裝了一個數組中找取某個值對應下標的方法    var minHIndex=$.inArray(minH,hArr);    $(value).css({     'position':'absolute',     'top':minH+'px',     'left':minHIndex*w+'px',    });    hArr[minHIndex]+=$boxs.eq(index).outerHeight(false);   }  })  //console.log(hArr); }  function checkScrollSlide(){  //知識點十一:可以直接last()方法獲取最后一個元素  var $lastBox=$('#main>div').last();  //知識點十二:js中的一系列offsetTop等屬性,變成了jquey中的offset().top ect;  var lastBoxDis=$lastBox.offset().top+Math.floor($lastBox.outerHeight(false)/2);  var scrollTop=$(window).scrollTop();  var documentH=$(window).height();  return (lastBoxDis<scrollTop+documentH)?true:false; } 

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美噜噜久久久xxx| 91系列在线播放| 国产成人精品免高潮在线观看| 亚洲精品一区二区在线| 日韩在线免费av| 亚洲全黄一级网站| 国产视频精品在线| 中文日韩在线视频| 岛国精品视频在线播放| 国产精品91在线| 国产一区二区丝袜| 国产精品va在线播放我和闺蜜| 亚洲无限乱码一二三四麻| 久久久久国产精品免费网站| 久久久成人精品视频| 欧美精品一二区| 精品网站999www| 国产精品毛片a∨一区二区三区|国| 国产精品情侣自拍| 久久久精品国产一区二区| 中文字幕av一区二区三区谷原希美| 亚洲乱码av中文一区二区| 亚洲精品国产精品自产a区红杏吧| 2019亚洲男人天堂| 色爱av美腿丝袜综合粉嫩av| 久久久999国产| 中文字幕免费精品一区| 色与欲影视天天看综合网| 亚洲新声在线观看| 日韩免费在线看| 亚洲影院污污.| 欧洲成人午夜免费大片| 精品国偷自产在线| 国产欧美一区二区三区在线| 亚洲第一色中文字幕| 久久天天躁狠狠躁夜夜躁| 日韩视频免费大全中文字幕| 欧美日韩成人网| 亚洲精品国产拍免费91在线| 久久国产精品久久精品| y97精品国产97久久久久久| 高跟丝袜欧美一区| 国产成人精品日本亚洲专区61| 成人性生交大片免费看视频直播| 亚洲精品456在线播放狼人| 自拍偷拍亚洲精品| 久久伊人精品视频| 亚洲欧洲午夜一线一品| 日韩欧美主播在线| 日韩av中文字幕在线免费观看| 久久久久久91香蕉国产| 成人免费网站在线| 国产精品99蜜臀久久不卡二区| 91禁国产网站| 亚洲网址你懂得| 成人欧美一区二区三区黑人孕妇| 91av在线视频观看| 欧美精品免费在线观看| 日韩人在线观看| 国产精品久久久精品| 精品久久中文字幕久久av| 亚洲精品中文字幕女同| 久久久久久久999| 在线观看不卡av| 国产z一区二区三区| 久久免费在线观看| 亚洲xxxx在线| 亚洲欧美激情精品一区二区| 久久久久成人网| 亚洲最大av网站| 自拍偷拍亚洲欧美| 97精品一区二区视频在线观看| 国产一区二区三区免费视频| 国产精品网站入口| 神马久久久久久| 欧美尺度大的性做爰视频| 亚洲成人精品视频| 日韩在线观看免费全| 日韩欧美在线视频| 亚洲欧美日韩天堂| 久久精品91久久久久久再现| 久久香蕉精品香蕉| 欧美一区二区三区图| 成人信息集中地欧美| 91九色单男在线观看| 国产精品日韩欧美大师| 国产精品美女免费视频| 欧美精品久久一区二区| 疯狂蹂躏欧美一区二区精品| 亚洲一区中文字幕| 欧美激情亚洲一区| 国产亚洲日本欧美韩国| 国产精欧美一区二区三区| 色噜噜狠狠色综合网图区| 久久久久久久久亚洲| 欧美一区二三区| 日韩av网址在线| 国产精品久久婷婷六月丁香| 在线观看中文字幕亚洲| 欧美性在线观看| 宅男66日本亚洲欧美视频| 最新日韩中文字幕| 高清欧美一区二区三区| 91免费看片网站| 国内精品400部情侣激情| 欧美最猛性xxxxx(亚洲精品)| 91久久在线观看| 国产一区二区三区四区福利| 欧美电影免费观看电视剧大全| 日韩久久午夜影院| 亚洲成人久久网| 亚洲在线第一页| 最近2019年好看中文字幕视频| 国产精品福利网站| 都市激情亚洲色图| 在线观看视频亚洲| 在线看福利67194| 奇米成人av国产一区二区三区| 日本精品久久中文字幕佐佐木| 亚洲韩国欧洲国产日产av| 欧美成人第一页| 国产成人免费91av在线| 国产精品视频内| 青青草精品毛片| 亚洲综合第一页| 色偷偷噜噜噜亚洲男人的天堂| 国产精品免费一区二区三区都可以| 久久国产精品久久国产精品| 北条麻妃一区二区三区中文字幕| 欧洲亚洲女同hd| 日韩网站在线观看| 亚洲精品有码在线| 久久99热精品这里久久精品| 亚洲人成在线观看| 91精品久久久久久久久久另类| 在线不卡国产精品| 日韩精品中文字幕久久臀| 最近中文字幕日韩精品| 隔壁老王国产在线精品| 国产精品成人免费视频| 亚洲激情第一页| 成人网在线免费看| 在线成人中文字幕| 国产97在线亚洲| 91亚洲国产成人精品性色| 亚洲最大av在线| 国产成人精品视| 亚洲激情在线观看视频免费| 亚洲女人天堂色在线7777| 国产精品视频永久免费播放| 亚州av一区二区| 国产欧美婷婷中文| 福利微拍一区二区| 欧美另类极品videosbestfree| 2020国产精品视频| 欧美亚州一区二区三区| 欧美午夜女人视频在线| 欧美性xxxxx极品娇小| 992tv成人免费影院| 欧美黄色成人网| 美女999久久久精品视频| 亚洲国产欧美日韩精品| 日韩免费高清在线观看| 51色欧美片视频在线观看|