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 相关文章推荐
javascript html 静态页面传参数
Apr 10 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
Jul 23 Javascript
jquery结合CSS使用validate实现漂亮的验证
Jan 29 Javascript
jQuery源码解读之removeAttr()方法分析
Feb 20 Javascript
js获取form的方法
May 06 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
Aug 26 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
Sep 30 Javascript
Angularjs全局变量被作用域监听的正确姿势
Feb 06 Javascript
JavaScript鼠标特效大全
Sep 13 Javascript
Vue2.0使用过程常见的一些问题总结学习
Apr 10 Javascript
vue中uni-app 实现小程序登录注册功能
Oct 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中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
JavaScript 动态生成方法的例子
2009/07/22 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
wxPython窗口中文乱码解决方法
2014/10/11 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python 数据结构之旋转链表
2017/02/25 Python
Python实现PS图像抽象画风效果的方法
2018/01/23 Python
pytorch查看通道数 维数 尺寸大小方式
2020/05/26 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
高一数学教学反思
2014/02/07 职场文书
电视节目策划方案
2014/05/16 职场文书
高中同学会活动方案
2014/08/14 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
mysql 获取相邻数据项
2022/05/11 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL