zoukankan      html  css  js  c++  java
  • [javascript]一种兼容性比较好的简单拖拽

    作为一个马上要找工作、非计算机专业、热爱前端的大四狗,最近开始疯狂写demo、看书,准备九、十月份的校招。

    晚上用js实现了一个比较简单(low)的拖拽效果,初步测试兼容性还是不错的,于是写一段小博文记录下~大神求轻喷

    面向过程的写法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #box {
                 100px;
                height: 100px;
                background: red;
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div id="box"></div>
        <script>
            window.onload = function (){
                var disX = 0;
                var disY = 0;
                var oBox = document.getElementById("box");
                oBox.onmousedown = function (ev){
                    var oEvent = ev || event;
    
                    oBox.style.cursor = "move";
                    disX = oEvent.clientX - oBox.offsetLeft;
                    disY = oEvent.clientY - oBox.offsetTop;
    
                    document.onmousemove = function (ev){
                        var oEvent = ev || event;
                        var theLeft = oEvent.clientX - disX;
                        var theTop = oEvent.clientY - disY;
                        
                        // 禁止用户从浏览器左框拖出
                        if (theLeft < 0) {
                            theLeft = 0;
                        } else if (theLeft > document.documentElement.clientWidth-
                            oBox.offsetWidth) {
                            theLeft = document.documentElement.clientWidth-
                            oBox.offsetWidth;
                        } else if (theTop < 0) {
                            theTop = 0;
                        } else if (theTop > document.documentElement.clientHeight-
                            oBox.offsetHeight) {
                            theTop = document.documentElement.clientHeight-
                            oBox.offsetHeight;
                        }
                        oBox.style.left = theLeft + 'px';
                        oBox.style.top = theTop + 'px';
                    }
    
                }
    
                document.onmouseup = function (){
                    document.onmousemove =null;
                }
             // 窗口重设大小时的处理方法
                window.onresize = function (){
                    oBox.style.left = document.documentElement.clientWidth/2-oBox.offsetWidth/2 + 'px';
                    oBox.style.top = document.documentElement.clientHeight/2-oBox.offsetHeight/2 + 'px';
                }
                // 兼容firefox 3.6.19
                return false;
            }
        </script>
    </body>
    </html>

     创建一个拖拽对象

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #box,#box2 {
                 100px;
                height: 100px;
                background: red;
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div id="box"></div>
        <div id="box2"></div>
        <script>
            window.onload = function (){
                new Drag("box");
                new Drag("box2");
            }
    
            function Drag(id){
                var _this = this;
                
                this.disX = 0;
                this.disY = 0;
                this.oBox = document.getElementById(id);
    
                
                this.oBox.onmousedown = function (ev){
                    _this.fnDown(ev);
                    
                    // 兼容firefox 3.6.19
                    return false;
                };
    
    
                document.onmouseup = function (){
                    _this.fnUp();
                }
                window.onresize = function (){
                    _this.fnResize();
                };
                // 兼容firefox 3.6.19
                return false;
            }
    
            Drag.prototype.fnDown = function(ev){
    
                var oEvent = ev || event;
                var _this = this;
                this.oBox.style.cursor = "move";
                this.disX = oEvent.clientX - this.oBox.offsetLeft;
                this.disY = oEvent.clientY - this.oBox.offsetTop;
    
                document.onmousemove = function (ev){
                    _this.fnMove(ev);
                };
    
            }
            
            Drag.prototype.fnMove = function(ev){
                var oEvent = ev || event;
                var theLeft = oEvent.clientX - this.disX;
                var theTop = oEvent.clientY - this.disY;
                // 禁止用户从浏览器左框拖出
                if (theLeft < 0) {
                    theLeft = 0;
                } else if (theLeft > document.documentElement.clientWidth-
                    this.oBox.offsetWidth) {
                    theLeft = document.documentElement.clientWidth-
                    this.oBox.offsetWidth;
                } 
                if (theTop < 0) {
                    theTop = 0;
                } else if (theTop > document.documentElement.clientHeight-
                    this.oBox.offsetHeight) {
                    theTop = document.documentElement.clientHeight-
                    this.oBox.offsetHeight;
                }
                this.oBox.style.left = theLeft + 'px';
                this.oBox.style.top = theTop + 'px';
            }
    
            Drag.prototype.fnUp = function (){
                document.onmousemove =null;
            }
    
            
    
            Drag.prototype.fnResize = function(){
                this.oBox.style.left = document.documentElement.clientWidth/2-this.oBox.offsetWidth/2 + 'px';
                this.oBox.style.top = document.documentElement.clientHeight/2-this.oBox.offsetHeight/2 + 'px';
            }
        </script>
    </body>
    </html>
  • 相关阅读:
    实验一
    BZOJ 2564
    P4557 [JSOI2018]战争
    移动自动化-Mac-IOS-appium环境搭建
    Node安装mac版本
    删除N天前文件和空文件
    Python之jsonpath模块
    性能学习
    参数化
    查找测试用例
  • 原文地址:https://www.cnblogs.com/zhongshanblog/p/4652785.html
Copyright © 2011-2022 走看看