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 相关文章推荐
SWFObject Flash js调用类
Jul 08 Javascript
客户端 使用XML DOM加载json数据的方法
Sep 28 Javascript
基于mootools 1.3框架下的图片滑动效果代码
Apr 22 Javascript
JS中eval函数的使用示例
Jul 21 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
Oct 11 Javascript
jQuery避免$符和其他JS库冲突的方法对比
Feb 20 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
简介alert()与console.log()的不同
Aug 26 Javascript
js检查是否关闭浏览器的方法
Aug 02 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
Aug 02 Javascript
vue实现二级导航栏效果
Oct 19 Javascript
vue路由跳转传递参数的方式总结
May 10 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
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
PHP PDO操作总结
2014/11/17 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python读取网页内容的方法
2015/07/30 Python
Python实现包含min函数的栈
2016/04/29 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
python Xpath语法的使用
2020/11/26 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
美国网上书店:Barnes & Noble
2018/08/15 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
普罗米修斯教学反思
2014/02/06 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
个人委托书如何写
2014/09/25 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
物业管理交接协议书
2016/03/24 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python