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 相关文章推荐
Firefox 无法获取cssRules 的解决办法
Oct 11 Javascript
项目实践之javascript技巧
Dec 06 Javascript
jquery tools之tooltip
Jul 25 Javascript
javascript天然的迭代器
Oct 29 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
Aug 28 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 Javascript
JQ实现新浪游戏首页幻灯片
Jul 29 Javascript
Angular.Js中ng-include指令的使用与实现
May 07 Javascript
javascript显示动态时间的方法汇总
Jul 06 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
Aug 22 Javascript
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
超详细的5个Shell脚本实例分享(值得收藏)
Aug 15 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
PHP 上传文件大小限制
2009/07/05 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
pandas分批读取大数据集教程
2020/06/06 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
Aosom西班牙:家具在线商店
2020/06/11 全球购物
环保倡议书500字
2014/05/15 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
个人整改措施书面材料
2014/10/24 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers