JavaScript面向对象编程高级1

以下案例是通过JavaScript的面向对象编程实现拖拽:

首先:应用面向过程实现,便于修改和对比

一、面向过程实现过程

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
      
        #div1{
            width: 200px;height: 200px;background: yellow;position: absolute;
        }
    </style>
</head>
<body>
<script>
    //面向过程的拖拽
    window.onload=function(){
        var oDiv=document.getElementById('div1');
        oDiv.οnmοusedοwn=function(ev)
        {
            var onEvent=ev||event;
            var disX=onEvent.clientX-oDiv.offsetLeft;
            var disY=onEvent.clientY-oDiv.offsetTop;
         /*   alert(disX);//167
            alert(disY);//117*/
            document.onmousemove=function(ev)
            {
                var oEvent=ev||event;
                oDiv.style.left=oEvent.clientX-disX+'px';
                oDiv.style.top=oEvent.clientY-disY+'px';
            };
            document.onmoseup=function()
            {
                document.onmousemove=null;
                document.onmouseup=null;
            };
        };
    };
</script>
<div id="div1"></div>
</body>
</html>

二、面向过程转化

    //面向过对象的拖拽
     第一步:去掉函数嵌套
     第二步:提取一部分局部局部变量为全局变量
    

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        #div1{width: 200px;height: 200px;background: yellow;position: absolute;}
    </style>
</head>
<body>
<script>
    var oDiv=null;
    var disX=0;
    var disY=0;
    window.onload=function(){
        oDiv=document.getElementById('div1');
        oDiv.onmousedown=fnDown;
    };
    function fnDown(ev)
    {
        var onEvent=ev||event;
        disX=onEvent.clientX-oDiv.offsetLeft;
        disY=onEvent.clientY-oDiv.offsetTop;
        document.onmousemove=fnMove;
        document.onmoseup=fnMoveup;
    };
    function fnMove(ev)
    {
        var oEvent=ev||event;
        oDiv.style.left=oEvent.clientX-disX+'px';
        oDiv.style.top=oEvent.clientY-disY+'px';
    };
    function  fnMoveup()
    {
        document.onmousemove=null;
        document.onmouseup=null;
    };
</script>
<div id="div1"></div>
</body>
</html>

三、应用面向对象实现

 //面向过对象的拖拽
     第一步:将onload变为构造函数
    第二步:将全局的div做一个属性
    

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        #div1{width: 200px;height: 200px;background: yellow;position: absolute;}
    </style>
</head>
<body>
<script>
    //初始化对象
    window.onload=function()
    {
        new Drag('div1');
    };
//    var oDiv=null;
/*var disX=0;//作为属性
var disY=0;//作为属性*/
   
  function Drag(id){
      var _this=this;
      this.disX=0;//作为属性
      this.disY=0;//作为属性
        this.oDiv=document.getElementById(id);
//        this.oDiv.οnmοusedοwn=this.fnDown;
      this.oDiv.οnmοusedοwn=function(ev)
      {
          _this.fnDown(ev);
      }
    };
Drag.prototype.fnDown=function(ev)//将以下函数用原型修改变成一个方法
   // function fnDown(ev)
    {
        var _this=this;
        var onEvent=ev||event;
        this.disX=onEvent.clientX-this.oDiv.offsetLeft;
        this.disY=onEvent.clientY-this.oDiv.offsetTop;
//        document.οnmοusemοve=this.fnMove;
    document.onmousemove=function(ev)
    {
          _this.fnMove(ev);
    }
       // document.onmoseup=this.fnMoveup;
       document.onmouseup=function(ev)
       {
           _this.fnMoveup(ev);
       }
    };
    Drag.prototype.fnMove=function (ev)
    {
        var oEvent=ev||event;
        this.oDiv.style.left=oEvent.clientX-this.disX+'px';
        this.oDiv.style.top=oEvent.clientY-this.disY+'px';
    };
   Drag.prototype.fnMoveup=function ()
    {
        document.onmousemove=null;
        document.onmouseup=null;
    };
</script>
<div id="div1"></div>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值