<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>drag-demo</title>
    <style type="text/css">
    #one{width: 100px;height: 100px;background: #66CCCC;color:#FFFFFF;}
    </style>
    <script type="text/javascript">
    window.onload=function(){
        dragone('one');
    };

    // 版本一:仅仅只实现拖拽,忽略其他问题
    function dragone(domName){
        //获取需要拖到元素的dom对象
        var dom = document.getElementById(domName);
        //当这个dom元素按下的时候
        dom.onmousedown=function(e){
            /*
            浏览器兼容性判断主要是为了兼容ie8,其他的ie7、ie6没测试,不知道
             */
   
            e = e || window.event;
            /*
            设置该dom元素为绝对定位absolute
            只有设置为position:absolute才能实现left(距离页面左边)和top(距离页面顶部)设置,下面有说明
             */
            dom.style.position = 'absolute';
            /*
            e.clientX:获取鼠标按下点的位置在页面上的X(横向即水平)值
            这里假如是:e.clientX=10
            e.clientY:获取鼠标按下点的位置在页面上的Y(纵向即垂直)值
            这里假如是:e.clientY=20
            dom.offsetLeft:获取该元素距离页面左边的距离
            这里假如是:dom.offsetLeft = 5
            dom.offsetTop:获取该元素距离页面顶部的距离
            这里假如是:dom.offsetTop = 6

            这里如果不理解可以使用画图工具进行理解
            diffX:即5 = 10 - 5,计算出的5就是鼠标按下的x点距离该元素内部左边的值
            diffY:即14 = 20 - 6,计算出的14就是鼠标按下的y点距离该元素内部顶部的值
             */
            var diffX = e.clientX-dom.offsetLeft;           
            var diffY = e.clientY-dom.offsetTop;
            //当元素被点下并在界面上移动的时候
            document.onmousemove=function(e){
                e = e || window.event;//浏览器兼容
                /*
                dom.style.left和dom.style.top即距离页面左边、顶部的距离
                即用移动后的鼠标按下x,y值-之前按下点的距离内部左边、距离顶部的值
                得到的值即是移动后的元素距离页面的x,y的距离,重新赋值一下给dom元素即可
                 */
                dom.style.left = e.clientX-diffX+'px';//设置移动时left值
                dom.style.top = e.clientY-diffY+'px';//设置移动时top值
            };
            //鼠标松开的时候
            document.onmouseup=function(e){
                //去除页面移动、松开事件
                //去除后该元素下次再次被点击拖动时,这两个事件又会被绑定上的,无需担心
                document.onmousemove = null;
                document.onmouseup = null;
            };
        };
    }
    </script>
</head>
<body>
    <div id="one">版本一</div>
</body>
</html>

#附图一张,理解拖动原理


js拖拽效果实现的更多相关文章

  1. React.js实现原生js拖拽效果及思考

    一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...

  2. js拖拽效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 再谈React.js实现原生js拖拽效果

    前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...

  4. js拖拽效果的实现及原理

    元素拖拽分成3个步骤:按下鼠标,移动鼠标,松开鼠标. 拖拽原理:按下拖拽元素后开始监听文档中鼠标移动事件,然后再监听鼠标松开事件:鼠标移动时,元素div要随着鼠标一起移动,需要计算元素div位移的距离 ...

  5. js拖拽效果的实现

    1.最基础的写法 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> < ...

  6. js拖拽效果详细讲解

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. js div浮动层拖拽效果代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)

    转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm   这篇文章主要介绍了JS实现漂亮的窗口 ...

  9. js实现本地图片文件拖拽效果

    如何拖拽图片到指定位置,具体方法如下 在从本地上传图片的时候,如果使用拖拽效果,想想应该是更加的高大上,下面直接上js代码 完整代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

随机推荐

  1. x01.TodoList:Asp.Net 5 初探

    ASP.NET 5 是比较新的,除了汤姆的博文,学习资料并不多.而学习没有例子上手,是比较痛苦的. 1.运行 vs2015,新建项目,选择 Asp.Net 5 WebApp 模板,默认运行即可.对照汤 ...

  2. Hibernate入门笔记

    相关基础概念请从其它教材简单了解,这里仅记录下第一个Hibernate程序的实现步骤. 环境说明: java开发工具:eclipse MARS.2 Release(4.5.2) hibernate版本 ...

  3. Transient的作用

    1:transient的作用及其使用方法 当一个对象实现类Serilizable接口,那么这个类就可以被序列化,java的这种序列化的模式为开发者提供了很多的便利. 然而在实际开发中,我们常常遇到这样 ...

  4. Weekly Traning Farm 16

    先安利一下这套比赛,大概是doreamon搞的,每周五晚上有一场,虽然没人做题目质量挺高的 http://codeforces.com/group/gRkn7bDfsN/contests(报名前要先报 ...

  5. Fabio

    Fabio 安装和简单使用 Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用 ...

  6. hihocoder -1121-二分图的判定

    hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...

  7. Android开发之应用程序的安装

    这里介绍的是用XUtils下载apk文件,然后进行安装. 首先用HttpUtils下载文件(记得获取SD卡的读写权限和联网的权限): /** * 下载Apk */ private void downL ...

  8. Beta版本冲刺总汇

    DAY ONE: http://www.cnblogs.com/aruba/p/6149032.html posted @ 2016-12-09 12:37 DAY TWO: http://www.c ...

  9. Python为8bit深度图像应用color map

    图片中存在着色版的概念,二维矩阵的每个元素的值指定了一种颜色,因此可以显示出彩色. 迁移调色板 下述python代码将VOC数据集中的某个语义分割的图片的调色板直接应用在一个二维矩阵代表的图像上 #l ...

  10. Android Stdio 调试Smali

    一 安装插件 1)Android stdio 安装插件 二 反编译smali 1)java -jar baksmali-2.1.2.jar app-debug.apk -o test/src2)and ...