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 相关文章推荐
在jQuery中 关于json空对象筛选替换
Apr 15 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
解读JavaScript中 For, While与递归的用法
May 07 Javascript
js 获取浏览器版本以此来调整CSS的样式
Jun 03 Javascript
如何用js判断dom是否有存在某class的值
Feb 13 Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 Javascript
Node.js自定义实现文件路由功能
Sep 22 Javascript
vue-router beforeEach跳转路由验证用户登录状态
Dec 26 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 Javascript
vue在路由中验证token是否存在的简单实现
Nov 11 Javascript
微信小程序自定义弹出层效果
May 26 Javascript
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
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的5个入手程序
2006/11/23 PHP
php 高效率写法 推荐
2010/02/21 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
CI框架Session.php源码分析
2014/11/03 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
解析Python中的二进制位运算符
2015/05/13 Python
Python中List.count()方法的使用教程
2015/05/20 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
Python生成随机数组的方法小结
2017/04/15 Python
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
python 深度学习中的4种激活函数
2020/09/18 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
会计岗位描述
2014/02/22 职场文书
洗手间标语
2014/06/23 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server