javascript完美拖拽的实现方法


Posted in Javascript onSeptember 29, 2013

HTML代码:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="style.css" />
<script type="text/javascript" src="drag.js"></script>
<script type="text/javascript" src="demo.js"></script>
</head>
<body>
    <div id="login">
        <h2>网站登录</h2>
        <div class="user">
            用户名:<input type="text" name="user" class="txt" />
        </div>
        <div class="pass">
            密 码:<input type="password" name="pass" class="txt" />
        </div>
        <div class="submit">
            <input type="submit" value="登录" class="button" />
        </div>
    </div>
</body>
</html>

CSS代码:
body, h2 {
    margin:0;
    padding:0;
}
#login {
    width:350px;
    height:250px;
    border:1px solid #ccc;
    position:absolute;
    left:512px;
    top:300px;
}
#login h2 {
    font-size:14px;
    text-align:center;
    height:30px;
    line-height:30px;
    background:#f60;
    color:white;
    cursor:move;
    margin-bottom:30px;
    letter-spacing:1px;
}
#login .user, #login .pass {
    text-align:center;
    font-size:12px;
    height:60px;
    line-height:40px;
}
#login .txt {
    width:200px;
    border:1px solid #ccc;
    background:#fff;
    height:30px;
    line-height:30px;
}
#login .submit {
    text-align:right;
}
#login .button {
    width:100px;
    height:30px;
    background:#06f;
    border:none;
    cursor:pointer;
    margin:10px 30px;
    color:white;
    letter-spacing:1px;
    font-weight:bold;
}

拖拽核心代码:
function drag(obj) {
    if (typeof obj === 'string') {
        var obj = document.getElementById(obj);
    } else {
        var obj = obj;
    }
    function fixEvent(event) {
        event.target = event.srcElement;
        event.preventDefault = fixEvent.preventDefault;
        return event;
    }
    fixEvent.preventDefault = function () {
        this.returnValue = false;
    };
    obj.onmousedown = mousedown;
    function mousedown(e) {
        var e = e || fixEvent(window.event);
        var disX = e.clientX - obj.offsetLeft;
        var disY = e.clientY - obj.offsetTop;
        if (e.target.tagName === 'H2') {
            document.onmousemove = move;
            document.onmouseup = up;
        } else {
            document.onmousemove = null;
            document.onmouseup = null;            
        }
        function move(e) {
            var e = e || fixEvent(window.event);
            var left = e.clientX - disX;
            var top = e.clientY - disY;
            if (obj.setCapture) {
                obj.setCapture();
            }
            if (left < 0) {
                left = 0;
            } else if (left > document.documentElement.clientWidth - obj.offsetWidth) {
                left = document.documentElement.clientWidth - obj.offsetWidth;
            }
            if (top < 0) {
                top = 0;
            } else if (top > document.documentElement.clientHeight - obj.offsetHeight) {
                top = document.documentElement.clientHeight - obj.offsetHeight;
            }
            obj.style.left = left + 'px';
            obj.style.top = top + 'px';
            return false;
        };
        function up() {
            if (obj.releaseCapture) {
                obj.releaseCapture();
            }
            document.onmousemove = null;
            document.onmouseup = null;
        }
    };
}

调用代码:
window.onload = function () {
    var login = document.getElementById('login');
    drag(login);
};

欢迎批评指正!!!
Javascript 相关文章推荐
代码触发js事件(click、change)示例应用
Dec 13 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
May 14 Javascript
被遗忘的javascript的slice() 方法
Apr 20 Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 Javascript
JavaScript数组迭代方法
Mar 03 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
Oct 18 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
vue+koa2实现session、token登陆状态验证的示例
Aug 30 Javascript
Vue.extend 编程式插入组件的实现
Nov 18 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
uniapp实现横向滚动选择日期
Oct 21 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 #Javascript
js中的scroll和offset 使用比较的实例与分析
Sep 29 #Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
Sep 29 #Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
Sep 29 #Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
Sep 29 #Javascript
jquery事件与函数的使用介绍
Sep 29 #Javascript
Jquery选中或取消radio示例
Sep 29 #Javascript
You might like
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
php格式化金额函数分享
2015/02/02 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
书法兴趣小组活动总结
2014/07/07 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
仙境之桥观后感
2015/06/16 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
卖车协议书范文
2016/03/23 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python
mysql数据库如何转移到oracle
2022/12/24 MySQL