• 面向对象div拖拽


    HTML

    <div id="div"></div>
    

    CSS

    #div{
    	 50px;
    	height: 50px;
    	background: red;
    	position: absolute;
    	left: 0;
    	top: 0;
    }
    

    JS

    /*oDiv.onmousedown=function(ev){
        var ev=ev||event;
               
        var disX=ev.clientX-this.offsetLeft;
        var disY=ev.clientY-this.offsetTop;
             
        //设置全局捕获
        //所有的onmousemove或者onmouseup都被oImg截获,然后作用在oImg身上
        if(oDiv.setCapture){
            oDiv.setCapture();
        }
             
        document.onmousemove=function(ev){
            var ev=ev||event;
                 
            var L=ev.clientX-disX;
            var T=ev.clientY-disY;
                 
            //限制拖拽范围
            //横向
            if(L<0){
                L=0;
            }else if(L>document.documentElement.clientWidth-oDiv.offsetWidth){
                L=document.documentElement.clientWidth-oDiv.offsetWidth;
            }
            //纵向
            if(T<0){
                T=0;
            }else if(T>document.documentElement.clientHeight-oDiv.offsetHeight){
                T=document.documentElement.clientHeight-oDiv.offsetHeight;
            }
                 
            oDiv.style.left=L+'px';
            oDiv.style.top=T+'px';
        }
             
        document.onmouseup=function(){
            document.onmousemove=null;
            //释放全局捕获
            if(oDiv.releaseCapture){
                oDiv.releaseCapture();
            }
        }
             
        //清除默认事件
        return false;
    }*/
    
    //过程改为面向对象
    //函数就是方法
    //onload中创建对象
     
    //全局变量就是属性
    /*var oDiv=null;
    var disX=0;
    var disY=0;
    init();
    function init(){
    	oDiv=document.getElementById('div');
    	oDiv.onmousedown=fnDown;
    }
    function fnDown(ev){
    	var ev=ev||event;     
        disX=ev.clientX-this.offsetLeft;
        disY=ev.clientY-this.offsetTop;
             
        //设置全局捕获
        //所有的onmousemove或者onmouseup都被oImg截获,然后作用在oImg身上
        if(oDiv.setCapture){
            oDiv.setCapture();
        }
             
        document.onmousemove=fnMove;
             
        document.onmouseup=fnUp
             
        //清除默认事件
        return false;
    }
    function fnMove(ev){
    	var ev=ev||event;     
        var L=ev.clientX-disX;
        var T=ev.clientY-disY;
                 
        //限制拖拽范围
        //横向
        if(L<0){
            L=0;
        }else if(L>document.documentElement.clientWidth-oDiv.offsetWidth){
            L=document.documentElement.clientWidth-oDiv.offsetWidth;
        }
        //纵向
        if(T<0){
            T=0;
        }else if(T>document.documentElement.clientHeight-oDiv.offsetHeight){
            T=document.documentElement.clientHeight-oDiv.offsetHeight;
        }
                 
        oDiv.style.left=L+'px';
        oDiv.style.top=T+'px';
    }
    function fnUp(){
    	document.onmousemove=null;
        //释放全局捕获
        if(oDiv.releaseCapture){
            oDiv.releaseCapture();
        }
    }*/
    
    //改面向对象
    function Drag(id){
    	this.oDiv=document.getElementById(id);
    	this.disX=0;
    	this.disY=0;
    }
    Drag.prototype.init=function(){
    	var This=this;
    //	alert(this.oDiv);
    	this.oDiv.onmousedown=function(ev){
    		var ev=ev||window.event;
    		This.fnDown(ev);
    		//清除默认事件
        	return false;
    	};
    }
    
    Drag.prototype.fnDown=function(ev){
    	var This=this;
        this.disX=ev.clientX-this.oDiv.offsetLeft;
        this.disY=ev.clientY-this.oDiv.offsetTop;
             
        //设置全局捕获
        //所有的onmousemove或者onmouseup都被oImg截获,然后作用在oImg身上
        if(this.oDiv.setCapture){
            this.oDiv.setCapture();
        }
             
        document.onmousemove=function(ev){
        	var ev=ev||window.event;   
        	This.fnMove(ev);
        };
        document.onmouseup=function(ev){
        	var ev=ev||window.event;   
        	This.fnUp(ev);
        };
    }
    Drag.prototype.fnMove=function(ev){    
        this.L=ev.clientX-this.disX;
        this.T=ev.clientY-this.disY;
                 
        //限制拖拽范围
        //横向
        if(this.L<0){
            this.L=0;
        }else if(this.L>document.documentElement.clientWidth-this.oDiv.offsetWidth){
            this.L=document.documentElement.clientWidth-this.oDiv.offsetWidth;
        }
        //纵向
        if(this.T<0){
            this.T=0;
        }else if(this.T>document.documentElement.clientHeight-this.oDiv.offsetHeight){
            this.T=document.documentElement.clientHeight-this.oDiv.offsetHeight;
        }
                 
        this.oDiv.style.left=this.L+'px';
        this.oDiv.style.top=this.T+'px';
    }
    Drag.prototype.fnUp=function(){
    	document.onmousemove=null;
        //释放全局捕获
        if(this.oDiv.releaseCapture){
            this.oDiv.releaseCapture();
        }
    }
    
    var dl=new Drag('div');
    dl.init();
    

      

  • 相关阅读:
    计算机图形学——几何变换的数学基础
    算法设计与分析——多边形游戏(动态规划)
    算法设计与分析——凸多边形最优三角剖分(动态规划)
    计算机图形学——反走样
    Android 5.0 API
    Android 6.0 API
    Android 7.0 新增功能和api
    Android 8.0 功能和 API
    Android P 功能和 API
    解决华为手机无法输出Debug级别log的问题
  • 原文地址:https://www.cnblogs.com/yangxue72/p/8385582.html
Copyright © 2020-2023  润新知