zoukankan      html  css  js  c++  java
  • 二、瀑布流数据加载后的布局处理(瀑布流的封装) Confi

    html代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>瀑布流第二步封装函数</title>
    <style>
    	*{margin:0px;padding:0px;}
    	#main .pin{
    		225px;
    		height:auto;
    		padding:15px 0px 0px 15px;
    		float:left;
    	}
    
    	#main .pin .box{
    		205px;
    		height:auto;
    		padding:10px;
    		background:#FFF;
    		border:1px solid #CCC;
    		box-shadow:0px 0px 6px #CCC;
    		border-radius:5px;
    	}
    	#main .pin .box img{
    		205px;
    	}
    </style>
    <!-- 页面拖拽插件 -->
    <script type="text/javascript" src="./js/drag.js"></script>
    <!-- 瀑布流封装 -->
    <script type="text/javascript" src="./js/water.js"></script>
    </head>
    <body>
    
    	<div id="main">
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/0.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/1.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/2.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/3.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/4.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/5.jpg">
    			</div>
    		</div>
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/6.jpg">
    			</div>
    		</div>
    		
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/7.jpg">
    			</div>
    		</div>
    		
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/8.jpg">
    			</div>
    		</div>
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/4.jpg">
    			</div>
    		</div>
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/7.jpg">
    			</div>
    		</div>
    		
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/8.jpg">
    			</div>
    		</div>
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/9.png">
    			</div>
    		</div>
    		
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/0.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/1.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/2.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/5.jpg">
    			</div>
    		</div>
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/4.jpg">
    			</div>
    		</div>
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/0.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/1.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/5.jpg">
    			</div>
    		</div>
    
    		<div class="pin"><!--每一个小块-->
    			<div class="box">
    				<img src="./img/3.jpg">
    			</div>
    		</div>
    	</div>
    	
    </body>
    </html>
    

      water.js代码

    /**
     * 
     */
    window.onload = function(){
    	//0调用函数
    	
    	//定义json数据
    	var data = [{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'},{'src':'5.jpg'}];
    	window.onscroll = function(){
    		if(checkscrollsite()){
    
    		//创建父节点
    			var oParent = document.getElementById('main');
    			for(i in data){
    				//alert(data[i].src);
    				//创建父级的元素节点
    				var oPin = document.createElement('div');
    				oPin.className = 'pin';
    				oParent.appendChild(oPin);
    				var oBox = document.createElement('div');
    				oBox.className = 'box';
    				oPin.appendChild(oBox);
    				var oImg = document.createElement('img');
    				oImg.src = './img/'+data[i].src;
    				oBox.appendChild(oImg);
    			}
    			waterfall('main','pin');
    		}
    		
    	}
    }
    	/**
    	parent 父级   id
    	pin     具体瀑布流块,class类名
    	*/
    	function waterfall(parent,pin) {
    	//2.定义父级
    	var oParent = document.getElementById(parent);
    	//9.调用函数并定义
    	var aPin = getClassObj(oParent,pin);
    	//alert(aPin.length);
    	var iPinW = aPin[0].offsetWidth;
    	//alert(iPinW);
    	//10.计算页面可以放下多少个图片
    	var num = Math.floor(document.documentElement.clientWidth/iPinW);
    	//alert(num);
    	//11.设置父级居中的样式
    	oParent.style.cssText = ''+num*iPinW+'px;margin:0 auto;';
    	
    	//12准备一个数组
    	var compareAarr = [];
    	//17定义一个字符串
    	//var str = '';
    	//13
    	for(var i=0;i<aPin.length;i++){
    		//22设置第一行的数量
    		if(i<num){
    			
    		
    		//获取每个图品的offsetHeight值
    		compareAarr[i] = aPin[i].offsetHeight;
    		//17获取高度的索引
    		//str += i+'=>'+aPin[i].offsetHeight+'\n';
    		//23
    		}else{
    			//取数组中的最小高度  compareAarr
    			var minH = Math.min.apply({},compareAarr);
    			//获取最小的key值
    			var minKey = getMinKey(compareAarr,minH);
    			//定位超出宽度多的那个
    			aPin[i].style.position = 'absolute';
    			//取超出的那个图片的top值
    			aPin[i].style.top = minH + 'px';
    			//设置超出那个图片的left值
    			aPin[i].style.left = aPin[minKey].offsetLeft + 'px';
    			//超出最后一个在加一 重新计算最低minH
    			compareAarr[minKey] += aPin[i].offsetHeight;
    		}
    	}
    	
    	//14 取数组中的最小高度  compareAarr
    	//var minH = Math.min.apply({},compareAarr);
    	//19获取最小的key值
    	//var minKey = getMinKey(compareAarr,minH);
    	//alert(minKey);
    	//alert(minH);
    	//15定位超出宽度多的那个
    	//aPin[num].style.position = 'absolute';
    	//16取超出的那个图片的top值
    	//aPin[num].style.top = minH + 'px';
    	//20设置超出那个图片的left值
    	//aPin[num].style.left = aPin[minKey].offsetLeft + 'px';
    	//21超出最后一个在加一 重新计算最低minH
    	//compareAarr[minKey] += aPin[num].offsetHeight;
    	//alert(compareAarr);
    	//var minH = Math.min.apply({},compareAarr);
    	//var minKey = getMinKey(compareAarr,minH);
    	//aPin[num+1].style.position = 'absolute';
    	//aPin[num+1].style.top = minH + 'px';
    	//aPin[num+1].style.left = aPin[minKey].offsetLeft + 'px';
    	
    	//实现图片的拖拽
    	for(var i=num;i<aPin.length;i++){
    		//绝对定位
    		aPin[i].style.position = 'absolute';
    		drag(aPin[i]);
    	}
    }
    	
    	/**
    	 * 检测根据浏览器的高度加载图片
    	 */
    	function checkscrollsite(){
    		var oParent = document.getElementById('main');
    		
    		var aPin = getClassObj(oParent,'pin');
    		//最后图片的高度
    		var lastPinH =aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);
    		//最后滚动条的高度
    		var srcollTop = document.documentElement.scrollTop || document.body.scrollTop;
    		//
    		var documentH = document.documentElement.clientHeight;
    		//if(lastPinH<srcollTop+documentH){
    		//	return true;
    		//}else{
    		//	return false;
    		//}
    		return lastPinH<srcollTop+documentH?true:false;
    	}
    	/**
    		获取数组组最小的键值
    		arr数组
    		minH最小键值
    	*/
    	//18定义一个函数   获取数组(compareAarr)中对应的最小的那个高的值(minH)
    	function getMinKey(arr,minH){
    		for(key in arr){
    			if(arr[key] == minH){
    				return key;
    			}
    		}
    	}
    	
    	/**
    		通过class选择元素
    		parent父级
    		className类名
    	*/
    	//3.定义一个函数
    	function getClassObj(parent,className){
    		//4.定义匹配父级下面所有的元素
    		var obj = parent.getElementsByTagName('*');
    		//5.定义一个数组
    		var result = [];
    		//6.循环obj
    		for(var i=0;i<obj.length;i++){
    			if(obj[i].className == className){
    				//7.pushu进result中
    				result.push(obj[i]);
    			}
    		}
    		//8
    		return result;
    	}
    	
    

      drag.js代码

    //拖拽方法
    var zIndex = 1;
    function drag(obj, vW){
        var obj = obj;
    	var vW = vW?vW:document.documentElement.clientWidth; 
        var disX = 0;        
        var disY = 0;
        obj.onmousedown = function(ev){          
            var oEvent = ev || event;                        
            disX = oEvent.clientX - obj.offsetLeft;                      
            disY = oEvent.clientY - obj.offsetTop;                        
            obj.style.zIndex = zIndex;                       
            zIndex++;
            if (obj.setCapture) {                        
                obj.onmousemove = fnMove;                                    
                obj.onmouseup = fnUp;                                    
                obj.setCapture();                                    
            }       
            else {       
                document.onmousemove = fnMove;
                document.onmouseup = fnUp;           
            }
           function fnUp(){
               this.onmousemove = null;
               this.onmouseup = null;
                if (this.releaseCapture)             
                    this.releaseCapture();
           }
           function fnMove(ev){
               var oEvent = ev || event;
               var l = oEvent.clientX - disX;
               var t = oEvent.clientY - disY;
               var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
               var w = vW- obj.offsetWidth;
               var h = document.documentElement.clientHeight - obj.offsetHeight + scrollTop;
               if (l < 10)             
                    l = 0;
               if (l > w - 10)             
                    l = w;            
                if (t < 10)             
                    t = 0;
                if (t > h - 10)            
                    t = h;
               obj.style.left = l + 'px';
               obj.style.top = t + 'px';
            }
           return false;
       }    
    }
    

      实现效果图:

  • 相关阅读:
    python学习之路-day1-python基础1
    JSON.NET基本使用
    tortoiseSVN 设置ignore
    一个简单的身份证校验
    一个HttpWebRequest工具类
    linq to NHibernate
    python-plot and networkx绘制网络关系图
    DDoS攻击及防御措施
    白帽子原则
    认识特洛伊木马
  • 原文地址:https://www.cnblogs.com/heyubingfeng/p/3010415.html
Copyright © 2011-2022 走看看