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 面向对象之神奇的prototype
Feb 26 Javascript
电子商务网站上的常用的js放大镜效果
Dec 08 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
jtable列中自定义button示例代码
Nov 21 Javascript
js中reverse函数的用法详解
Dec 26 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
Jun 10 Javascript
JS中的form.submit()不能提交表单的错误原因
Oct 08 Javascript
JavaScript中操作Mysql数据库实例
Apr 02 Javascript
webpack使用 babel-loader 转换 ES6代码示例
Aug 21 Javascript
微信小程序websocket实现聊天功能
Mar 30 Javascript
微信小程序带动画弹窗组件使用方法详解
Nov 27 Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 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模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
理解Javascript_03_javascript全局观
2010/10/11 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
JS常见算法详解
2017/02/28 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python制作Windows系统服务
2017/03/25 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
python保存文件方法小结
2018/07/27 Python
python可视化实现代码
2019/01/15 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
数据库基础的一些面试题
2012/02/25 面试题
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
法定代表人授权委托书
2014/04/04 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
高中军训的心得体会
2014/09/01 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
MySQL去除密码登录告警的方法
2022/04/20 MySQL
Mysql数据库group by原理详解
2022/07/07 MySQL