最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年01月01日 13:47:37   作者:normol  
本篇文章主要介紹了照片瀑布流效果,實現(xiàn)圖片自動加載的瀑布流效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

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

<!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實現(xiàn)部分:

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 
 { 
  //盡量把這些量存放在變量中,否則 
  //例如循環(huán)不用len,而用nodes.length,會每一次循環(huán)都遍歷一次 
  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等只能獲取在內(nèi)聯(lián)html中有的樣式, 
//因此,下面這個函數(shù)是獲取css樣式的通用函數(shù)。 
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實現(xiàn)部分:

//知識點一: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()){ 
   //知識點二:數(shù)組遍歷 
   //知識點三:value參數(shù)是DOM對象 
   $.each(dataimg.data,function(key,value){ 
    //知識點四:創(chuàng)建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中直接封裝了一個數(shù)組中找取某個值對應下標的方法 
   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; 
} 

 以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 小程序多文件上傳 Tdesign的過程

    小程序多文件上傳 Tdesign的過程

    眾所周知,小程序文件上傳還是有點麻煩的,其實主要還是小程序?qū)Φ慕涌谟兄T多的不便,比如說,文件不能批量提交,只能一個個的提交,小程序的上傳需要專門的接口,現(xiàn)在給大家分享小程序多文件上傳 Tdesign的方法,感興趣的朋友一起看看吧
    2023-11-11
  • SyntaxHighlighter自動識別并加載腳本語言

    SyntaxHighlighter自動識別并加載腳本語言

    SyntaxHighlighter是一個使用JavaScript編寫的支持多種編程語言語法高亮的JS插件,很多大型網(wǎng)站或博客都在使用?,F(xiàn)在給大家介紹一下如何讓它自動識別加載我們添加的代碼語言
    2017-02-02
  • JavaScript ES6 Module模塊詳解

    JavaScript ES6 Module模塊詳解

    這篇文章主要介紹了ES6新特性之模塊Module用法,簡要說明了模塊Module的概念、功能并結合實例形式分析了模塊Module的使用方法與相關注意事項,需要的朋友可以參考下
    2021-10-10
  • JS 新增Cookie 取cookie值 刪除cookie 舉例詳解

    JS 新增Cookie 取cookie值 刪除cookie 舉例詳解

    cookie很實用的一個功能,可以判斷某個狀態(tài),下面與大家分享下JS 如何新增Cookie 取cookie值 刪除cookie,感興趣的朋友可以參考下
    2014-10-10
  • js設置組合快捷鍵/tabindex功能的方法

    js設置組合快捷鍵/tabindex功能的方法

    本文主要介紹用js設置tabindex功能和js設置組合快捷鍵的方法,很簡單,這樣可以增強用戶體驗,方法就在下面
    2013-11-11
  • VScode中配置JavaScript編譯環(huán)境的方法

    VScode中配置JavaScript編譯環(huán)境的方法

    這篇文章主要介紹了VSCODE中配置JavaScript編譯環(huán)境的方法,方式一 使用Node.js做為解釋器運行JS代碼 Node.js的安裝和配置,方式二使用VSCODE插件Code Runner運行JS代碼,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • js 自制滾動條的小例子

    js 自制滾動條的小例子

    js 自制滾動條的小例子,需要的朋友可以參考一下
    2013-03-03
  • 微信小程序?qū)崿F(xiàn)圖片上傳功能實例(前端+PHP后端)

    微信小程序?qū)崿F(xiàn)圖片上傳功能實例(前端+PHP后端)

    這篇文章主要給大家介紹了關于微信小程序?qū)崿F(xiàn)圖片上傳功能的相關內(nèi)容,文中詳細介紹了前端+PHP后端的示例代碼,對大家的理解和學習具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • fabric.js實現(xiàn)diy明信片功能

    fabric.js實現(xiàn)diy明信片功能

    這篇文章主要為大家詳細介紹了fabric.js實現(xiàn)diy明信片功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • js使瀏覽器窗口最大化實現(xiàn)代碼(適用于IE)

    js使瀏覽器窗口最大化實現(xiàn)代碼(適用于IE)

    點擊最大化按鈕后,瀏覽器的內(nèi)容填充滿顯示器,瀏覽器窗口的邊框被擠出顯示器。而該js的最大化效果是瀏覽器的邊框在顯示器內(nèi)顯示,具體實現(xiàn)如下,感興趣的朋友可以參考下
    2013-08-08

最新評論

托里县| 砀山县| 津南区| 紫阳县| 黄山市| 夹江县| 岢岚县| 漾濞| 武平县| 尉氏县| 从江县| 武冈市| 吴堡县| 崇左市| 吉隆县| 三亚市| 六盘水市| 永兴县| 元阳县| 昌乐县| 甘南县| 金塔县| 贡觉县| 石首市| 洞口县| 乌海市| 玛沁县| 鄱阳县| 平凉市| 千阳县| 浮梁县| 色达县| 灵石县| 临武县| 无为县| 广元市| 平潭县| 会东县| 军事| 惠安县| 息烽县|