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 相关文章推荐
LazyLoad 延迟加载(按需加载)
May 31 Javascript
JS中的数组的sort方法使用示例
Jan 22 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
JavaScript插件化开发教程 (一)
Jan 27 Javascript
jQuery定义背景动态切换效果的方法
Mar 23 Javascript
js调用百度地图及调用百度地图的搜索功能
Sep 07 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
Mar 05 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
Apr 13 Javascript
bootstrap 路径导航 分页 进度条的实例代码
Aug 06 Javascript
JS实现可用滑块滑动的缓动图代码
Sep 01 Javascript
Vue 构造选项 - 进阶使用说明
Aug 14 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
YB217、YB235、YB400浅听
2021/03/02 无线电
德生9700DX电路分析
2021/03/02 无线电
php下MYSQL limit的优化
2008/01/10 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
PHP 错误处理机制
2015/07/06 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
实现PHP搜索加分页
2016/10/12 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
python中append实例用法总结
2019/07/30 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
Python json格式化打印实现过程解析
2020/07/21 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
铁路工务反思材料
2014/02/07 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
「月刊Action」2022年5月号封面公开
2022/03/21 日漫