zoukankan      html  css  js  c++  java
  • 分享一个通过面向对象方式完成的拖拽功能

    研究了两天的JS面向对象了,然后根据视频完成了一个简单的拖拽功能。下面的代码其实很简单,唯一需要注意的就是 this ,感觉JS中的this还是很奇妙很有意思的,接下来学习就研究this指针好啦 。


    下面是拖拽的代码

    Drag.js

    function Drag(id){
    
        var _this = this;
    
        this.divX = 0;
        this.divY = 0;
    
        this.oDiv = document.getElementById(id);
    
        this.oDiv.onmousedown = function(ev){
            _this.fnMouseDown(ev);
        }
    }
    
    Drag.prototype.fnMouseDown = function(ev){
    
        var _this = this;
    
        var oEvent = ev||event;
    
        this.divX = oEvent.clientX - this.oDiv.offsetLeft;
        this.divY = oEvent.clientY - this.oDiv.offsetTop;
    
        document.onmousemove = function(ev){
            _this.fnMouseMove(ev);
    
            return false;//取消选中
        };
    
        document.onmouseup = function(){
            _this.fnMouseUp();
        }
    
    }
    
    Drag.prototype.fnMouseMove = function(ev){
        var oEvent = ev||event;
    
        this.oDiv.style.left = oEvent.clientX - this.divX+'px';
        this.oDiv.style.top = oEvent.clientY- this.divY+'px';
    }
    
    Drag.prototype.fnMouseUp = function(){
        document.onmousemove = null;
        document.onmousedown = null;
    }

    LimitDrag.js //限制范围的拖拽

    /**
     * Created by Administrator on 2015/12/29 0029.
     */
    function LimitDrag (id){
        Drag.call(this,id);
    }
    
    for(var i in Drag.prototype){
        LimitDrag.prototype[i] = Drag.prototype[i];
    }
    
    //重写 MouseMove 函数
    
    LimitDrag.prototype.fnMouseMove = function(ev){
    
        var oEvent = ev||event;
    
        var left = oEvent.clientX - this.divX;
        var top = oEvent.clientY - this.divY
    
        if(left<0){
            left = 0;
        }else if(left >document.documentElement.clientWidth - this.oDiv.offsetWidth){
            left= document.documentElement.clientWidth - this.oDiv.offsetWidth;
        }
    
        if(top<0){
            top = 0;
        }else if(top > document.documentElement.clientHeight - this.oDiv.offsetHeight){
            top =  document.documentElement.clientHeight - this.oDiv.offsetHeight
        }
    
        this.oDiv.style.left = left+'px';
        this.oDiv.style.top = top+'px';
    
    }


    HTML

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/Drag.js"></script>
        <script src="js/LimitDrag.js"></script>
        <script>
    
            window.onload = function () {
                new Drag('div1');
                new LimitDrag('div2')
            }
    
        </script>
        <style>
            #div1{
                  200px;
                 height: 200px;
                 background-color: yellow;
                 position: absolute;
             }
    
            #div2{
                 200px;
                height: 200px;
                background-color: blue;
                position: absolute;
            }
    
        </style>
    </head>
    <body>
    
        <div id="div1">Drag</div>
        <div id="div2">LimitDrag</div>
    
    </body>
    </html>



  • 相关阅读:
    SQL Server2000的ROWGUID 列
    数据库主键设计之思考
    SQL Server 索引结构及其使用(四)
    一些基础表单的验证 函数
    JS加密编码算法
    textarea自动增高并隐藏滚动条
    HTML之打开/另存为/打印/刷新/查看原文件等按钮的代码
    Code Snippets
    jQuery验证框架
    Jquery 扩展验证
  • 原文地址:https://www.cnblogs.com/laobeiV5/p/5106644.html
Copyright © 2011-2022 走看看