js瀑布流滾動無限載入(路徑需要修改)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>原生js實現瀑布流</title>
<style type="text/css">
body{
overflow: scroll;
height: 1000px;
}
*{
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: 0 0 5px #ccc;
}
.pic img{
width: 165px;
height: auto;
}
</style>
</head>
<body>
<div id="main">
<div class="box">
<div class="pic">
<img src="images/1.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/2.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/3.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/4.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/5.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/6.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/7.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/8.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/9.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/10.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/9.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/8.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/7.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/6.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/5.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/4.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/3.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/2.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/1.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/5.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/6.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/7.jpg">
</div>
</div>
<div class="box">
<div class="pic">
<img src="images/8.jpg">
</div>
</div>
</div>
<script type="text/javascript">
window.onload=function(){
waterfall('main','box');
var dataInt={"data":[{"src":'1.jpg'},{"src":'2.jpg'},{"src":'3.jpg'},{"src":'4.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 oImg=document.createElement('img');
oImg.src="images/"+dataInt.data[i].src;
oPic.appendChild(oImg);
}
waterfall('main','box');
}
}
}
function waterfall(parent,box){
//將main下的所有class為box的元素取出來
var oParent=document.getElementById(parent);
var oBoxs=getByClass(oParent,box);
//計算整個頁面的顯示雷氏(頁面/box的寬)
var oBoxW=oBoxs[0].offsetWidth;
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);
var index=getMinhIndex(hArr,minH);
oBoxs[i].style.position="absolute";
oBoxs[i].style.top=minH+'px';
oBoxs[i].style.left=oBoxW*index+'px';
hArr[index]+=oBoxs[i].offsetHeight;
}
}
}
//根據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 in arr){
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;
var height=document.body.clientHeight || document.documentElement.clientHeight;
return (lastBoxH<scrollTop+height)?true:false;
}
</script>
</body>
</html>
相關文章
- js下拉滾動條瀑布流載入資料程式碼例項JS
- 移動端無限滾動載入 js實現原理JS
- jQuery無限載入瀑布流錯位解決淺談jQuery
- [譯] 使用 Angular 和 RxJS 實現的無限滾動載入AngularJS
- Xamarin.Forms: 無限滾動的ListView(懶載入方式)ORMView
- “無限滾動載入”適用於你的產品嗎?
- Vxe UI vxe-table 4.8+ 實現無限載入+虛擬滾動、行與列的無限載入UI
- PHP+InfiniteScroll網頁無限滾動載入資料例項PHP網頁
- Vue 無限滾動元件Vue元件
- [譯] Angular: 使用 RxJS Observables 來實現簡易版的無限滾動載入指令AngularJS
- 滾動優化(無限滾動載入、滾動元素內有大量dom,造成卡頓問題的優化方案)優化
- 基於 Vue.js 的移動端元件庫mint-ui實現無限滾動載入更多Vue.js元件UI
- 走近Fusion元件——無限滾動元件
- Framework7 無限滾動Framework
- javascript無限迴圈滾動JavaScript
- 原生JS利用transform實現banner的無限滾動JSORM
- AJAX+json+jquery實現預載入瀑布流佈局JSONjQuery
- 無限滾動HTML UL結構HTML
- 設計無限滾動下拉載入,實踐高效能頁面真諦
- 小程式:無限自動滾動的Gallery
- 關於頁面無限滾動思路
- js無縫滾動JS
- js使用waterfall橫向載入瀑布流,一行程式碼完成JS行程
- iOS開發之UIScrollView無限滾動iOSUIView
- 無限滾動的最佳實踐經驗
- 安卓中如何實現無限滾動列表安卓
- vue 滾動載入Vue
- 圖片預載入和懶載入(附上一個小demo瀑布流)
- [譯] 使用響應式程式設計來實現簡易版的無限滾動載入程式設計
- 瀑布流元件初探-Vue.js元件Vue.js
- 使用RecycleView實現無限滾動的日曆View
- 使用 laravel8 + ajax 實現無限滾動Laravel
- 原生 js 實現瀑布流佈局、React 版本的瀑布流佈局元件JSReact元件
- js-字幕無縫滾動JS
- vue.js無縫滾動Vue.js
- Oracle直接路徑載入Oracle
- 10行程式碼實現頁面無限滾動行程
- 修改VS中的NuGet包下載路徑