用面向对象写一个拖拽,并实现继承

思路:先用面过过程的方法将要实现的效果实现出来,然后按照以下步骤将拆分成面向对象  

  //面向过程的程序改写成面向对象程序不能有函数嵌套
  //将window.onload初始化整个程序改为构造函数初始化整个对象
  //将面向过程中的变量改为属性
  //将面向过程中的函数改为方法

index.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>面向对象拖拽</title>
  <style>
    #div1{width: 200px;height: 200px;background: red;position: absolute;}
    #div2{width: 200px;height: 200px;background: green;position: absolute;}
  </style>
  <script src="drag.js"></script>
  <script src="limitDrag.js"></script>
  <script>
    window.onload = function(){
      new Drag("div1");
      new limitDrag("div2");
    }
  </script>
</head>
<body>
  <div id="div1"></div>
  <div id="div2"></div>
</body>
</html>

 

Drag.js文件

function Drag(id){
  this.disX = 0;
  this.disY = 0;
  var _this = this;
  this.oDiv = document.getElementById(id);
  this.oDiv.onmousedown = function(e){
    _this.fnDown(e);
    return false;
  };
}

Drag.prototype.fnDown = function(e){
  var _this = this;
  var e = e || window.event;
  this.disX = e.clientX-this.oDiv.offsetLeft;
  this.disY = e.clientY-this.oDiv.offsetTop;
  document.onmousemove = function(e){
    _this.fnMove(e);
  };
  document.onmouseup = function(){
    _this.fnUp();
  };
}

Drag.prototype.fnMove = function(e){
  var e = e || window.event;
  this.oDiv.style.left = e.clientX-this.disX + 'px';
  this.oDiv.style.top = e.clientY-this.disY + 'px';
}

Drag.prototype.fnUp = function(e){
  document.onmousemove = null;
  document.onmouseup = null;
}

 

limitDrag.js文件,用来实现拖拽继承

function limitDrag(id){
  Drag.call(this,id)
}
for(var i in Drag.prototype){
  limitDrag.prototype[i] = Drag.prototype[i];
}

//新继承出来的拖拽可以实现自己的单独的功能
limitDrag.prototype.fnMove = function(e){
  var e = e || window.event;
  var l = e.clientX-this.disX;
  var t = e.clientY-this.disY;
  if(l<0){
    l=0;
  }else if(l>document.documentElement.clientWidth - this.oDiv.offsetWidth){
    l=document.documentElement.clientWidth - this.oDiv.offsetWidth
  }
  this.oDiv.style.left = l + 'px';
  this.oDiv.style.top = t + 'px';
}

转载于:https://www.cnblogs.com/cjw-jxd/p/7466558.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以用面向对象的方式来实现全局。下面是一个简单的实现: ```javascript // 定义一个 Drag 类 class Drag { constructor(element) { this.element = element; this.dragging = false; this.offsetX = 0; this.offsetY = 0; // 绑定事件处理函数 this.element.addEventListener('mousedown', this.handleMouseDown.bind(this)); document.addEventListener('mousemove', this.handleMouseMove.bind(this)); document.addEventListener('mouseup', this.handleMouseUp.bind(this)); } handleMouseDown(event) { this.dragging = true; this.offsetX = event.clientX - this.element.offsetLeft; this.offsetY = event.clientY - this.element.offsetTop; } handleMouseMove(event) { if (this.dragging) { this.element.style.left = event.clientX - this.offsetX + 'px'; this.element.style.top = event.clientY - this.offsetY + 'px'; } } handleMouseUp(event) { this.dragging = false; } } // 使用 Drag 类创建一个实例,并传入需要的元素 const dragElement = document.getElementById('drag-element'); const drag = new Drag(dragElement); ``` 这个实现中,我们定义了一个 Drag 类,它接受一个需要的元素作为参数。在构造函数中,我们初始化了一些状态变量,然后绑定了三个事件处理函数: - `handleMouseDown`:当鼠标按下时,记录下当前的偏移量。 - `handleMouseMove`:当鼠标移动时,如果正在,则通过偏移量计算出元素应该出现的位置,并将元素移动到该位置。 - `handleMouseUp`:当鼠标松开时,停止。 最后,我们创建了一个 Drag 类的实例,并传入需要的元素。这样就可以实现全局了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值