继承实现拖拽实例

一个页面有两个元素,都有拖拽,一个有边界限定,一个没有边界限定
// 注意:
// 因为利用事件监听绑定和删除事件
// 所以得有事件处理函数的名字
// 因为需要给事件处理函数加名字
// 所以要将事件处理函数单独封装
// 因为单独封装
// 所以导致事件处理函数中的this不再指向实例
// 因为时间处理函数中的this不再指向实例
// 所以需要使用bind方法改变this指向
// 因为bind每次执行会返回新函数
// 所以需要提前将要改变this指向的函数使用bind处理好

class Drag{
    constructor(ele){
        this.ele = ele;

        this.m = this.move.bind(this);
        this.u = this.up.bind(this);

        this.addEvent();
    }
    addEvent(){
        this.ele.addEventListener("mousedown",this.down(this))
    }
    down(that){
        return function(e){
            that.x = e.offsetX;
            that.y = e.offsetY;
            // console.log(that)
            document.addEventListener("mousemove",that.m)
            document.addEventListener("mouseup",that.u)
        }
    }
    move(e){
        this.ele.style.left = e.clientX - this.x + "px";
        this.ele.style.top = e.clientY - this.y + "px";
    }
    up(){
        document.removeEventListener("mousemove",this.m)
        document.removeEventListener("mouseup",this.u)
    }
}

class SmallDrag extends Drag{
    constructor(ele){
        super(ele);
    }
    move(e){
        var l = e.clientX - this.x;
        var t = e.clientY - this.y;

        if(l<0) l=0;
        if(t<0) t=0;
        if(l > document.documentElement.clientWidth - this.ele.offsetWidth){
            l = document.documentElement.clientWidth - this.ele.offsetWidth
        }

        this.ele.style.left = l + "px";
        this.ele.style.top = t + "px";
    }
}

// 一个页面有两个元素,都有拖拽,一个有边界限定,一个没有边界限定

var obox1 = document.querySelector(".box1");
var obox2 = document.querySelector(".box2");

new Drag(obox1);

new SmallDrag(obox2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值