面向对象实例--拖拽

上一节用面向对象的方法写了选项卡,这次我们来讲讲拖拽

面向过程的拖拽

拖拽主要是对位置的定义,绑定监听器监听鼠标移动的位置。

<!DOCTYPE html>
<html>
<head>
    <title>拖拽</title>
    <style type="text/css">
        #div1{
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
        }
    </style>
    <script type="text/javascript">
        window.onload = function() {
            var div = document.getElementById('div1');
            div.onmousedown = function (ev){
                var oEvent = ev||event;
                var disX = oEvent.clientX - div.offsetLeft;
                var disY = oEvent.clientY - div.offsetTop;
                document.onmouseover = function(ev){
                    div.style.left = oEvent.clientX - disX + 'px';
                    div.style.top = oEvent.clientY - disY + 'px'; 
                }
                document.onmouseup = function(){
                    document.onmouseover = null;
                    document.onmouseup = null;
                }
            }
        }
       
    </script>
</head>
<body>
    <div id="div1"></div>
</body>
</html>
面向对象的拖拽
<!DOCTYPE html>
<html>
<head>
    <title>拖拽</title>
    <style type="text/css">
        #div1{
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
        }
    </style>
    <script type="text/javascript">
        window.onload = function() {
            var a = new t();
        }
        function t() {
            var _this = this;
            this.div = document.getElementById('div1');
            this.disX = 0;
            this.disY = 0;
            
            this.div.onmousedown = function() {
                
                _this.mDown();
            }
        }
        t.prototype.mDown = function (ev) {  
               var _this = this;
               var oEvent = ev||event;
               this.disX = oEvent.clientX - this.div.offsetLeft;
               this.disY = oEvent.clientY - this.div.offsetTop;
               document.onmouseover = function() {
                   _this.mOver();
               }
               document.onmouseup = function(){
                   _this.mUp();
               };
        }
        t.prototype.mOver=function  (ev){
            var oEvent = ev||event;
            this.div.style.left = oEvent.clientX - this.disX + 'px';
            this.div.style.top = oEvent.clientY - this.disY + 'px'; 
        }
        t.prototype.mUp = function() {
            document.onmouseover = null;
            document.onmouseup = null;
        }
    </script>
</head>
<body>
    <div id="div1"></div>
</body>
</html>

注意点

  • 因为mouseover和mouseup是嵌套在mousedown里面的,所以需要在mousedown里面再去定义一次this,不然会报错"_this is not defeined"
  • document.onmouseove是针对整个网页的,所以不需要加上this

转载于:https://www.cnblogs.com/huyuzhu/p/6674987.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值