1. 程式人生 > >原生js實現瀑布流以及載入效果——李帥醒部落格

原生js實現瀑布流以及載入效果——李帥醒部落格

今天教大家使用原生js實現瀑布流以及載入效果,下回再教大家使用使用原生JS實現響應式瀑布流佈局,還是先從簡單的入手!

1、首先列數是固定的,不同的是高度,隨機產生。

2、一排結束後,如第6個元素,是新增再上一排最短的位置,所以要做一個大小高度判斷。

3、每次滾動條觸發事件,載入新的元素(判斷滾動條到底部,需要用到DOM的三個屬性值,即scrollTop、clientHeight、scrollHeight)。

應用場景:瀑布流主要應用在圖片展示頁面上。如果有一大批圖片需要展示,原始圖片尺寸不一致,又希望每張圖片都能不剪裁,完整顯示,那麼就要給圖片規定一個寬度,解放它們的高度。利用網頁高度不限這個特性,充分利用頁面的空間,儘可能的展示多的圖片。瀑布流的實現方法挺多,但能做到響應式列數變化,自由佈局的並不多。如UC新聞頁面,百度圖片手機頁面、蘑菇街。

CSS頁面:

*{
			margin: 0px;
			padding: 0px;
			box-sizing:border-box;
		}
		body{
			margin: 0px auto;
			width: 1100px;
		}
		ul{
			margin-top: 10px;
			list-style: none;
			width: 200px;
			padding: 3px 3px 0px 3px;
			float: left;
			margin-left: 5px;
		}
		li{
			width: 190px;
			background: yellow;
			padding: 3px;
			margin-bottom: 3px;
			border-radius: 5px;
			box-shadow: 10px 10px 10px #666;
		}
	</style>
HTML頁面:
<body>
	<ul></ul>	
	<ul></ul>	
	<ul></ul>	
	<ul></ul>	
	<ul></ul>	
</body>
SJ頁面程式碼:
<script type="text/javascript">
	uls=document.querySelectorAll("ul");
	var num=1;
	function statr(){
		for(var i=0;i<30;i++){
			//把4個ul的高度放到一個數組中
			var ArrHeight=[uls[0].offsetHeight,uls[1].offsetHeight,uls[2].offsetHeight,uls[3].offsetHeight,uls[4].offsetHeight];
			var index=mini(ArrHeight);	
			CreateLi(uls[index],num++);
		}
	}
	statr();
	//觸發滾動事件,繼續建立
	window.onscroll=function(){
		// html總高度-視覺化視窗高度=body的滾動高度,所以當滾動快要到達底部,還沒有到達的時候,再去執行函式,建立新的ul
		//相容新寫法
		var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
		var	clientHeight=document.documentElement.clientHeight||document.body.clientHeight||window.innerHeight;
		if(document.documentElement.offsetHeight-clientHeight<=scrollTop){
			statr();
		}
	}
	//建立li
	function CreateLi(ul,num){
		var li=document.createElement("li");
		li.style.height=rand()+"px";
		li.innerHTML=num;
		li.style.background=randomColor();
		ul.appendChild(li);
	}
	//獲取最小高度
	function mini(arr){
		var miniHeight=arr[0];
		for(var i=0;i<arr.length;i++){
			if(arr[i]<miniHeight){
				miniHeight=arr[i];	
			}			
		}
	//每次返回的都是最短ul的下標			
		return arr.indexOf(miniHeight);
	}
	//隨機高度
	function rand() {
        return parseInt(Math.random() * 300) + 100;
    }
    //顏色隨機
    function randomColor(){
		var color = "rgb("
		var r = parseInt(Math.random()*256);
		var g = parseInt(Math.random()*256);
		var b = parseInt(Math.random()*256);
		color = color+r+","+g+","+b+")";
		return color;	
	}
</script>