js 实现简单的拖拽

步骤

使用 JavaScript 实现拖拽的步骤:

  • 让元素捕获事件(mousedown, mousemove & mouseup)
  • 单击并不释放,触发 mousedown,标记开始拖拽,并获取元素和鼠标的位置
  • 拖动鼠标,触发 mousemove,不断的获取鼠标的位置,并通过计算重新确定元素的位置
  • 释放师表,触发 mouseup,结束拖拽,确定元素位置并更新

代码1:

demo1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #block {
            width: 200px;
            height: 200px;
            background-color: yellow;
            position: absolute;
        }
    </style>
</head>
<body>
<div id="block"></div>
<script>
    /**
     * 拖动元素
     * @param elementId 元素id
     */
    function drag(elementId) {
        var element = document.getElementById(elementId);
        var position = {
            offsetX: 0, //点击处偏移元素的X
            offsetY: 0, //偏移Y值
            state: 0 //是否正处于拖拽状态,1表示正在拖拽,0表示释放
        };
        //获得兼容的event对象
        function getEvent(event) {
            return event || window.event;
        }
        //元素被鼠标拖住
        element.addEventListener(‘mousedown‘, function (event) {
            //获得偏移的位置以及更改状态
            var e = getEvent(event);
            position.offsetX = e.offsetX;
            position.offsetY = e.offsetY;
            position.state = 1;
        }, false);
        //元素移动过程中
        document.addEventListener(‘mousemove‘, function (event) {
            var e = getEvent(event);
            if (position.state) {
                position.endX = e.clientX;
                position.endY = e.clientY;
                //设置绝对位置在文档中,鼠标当前位置-开始拖拽时的偏移位置
                element.style.position = ‘absolute‘;
                element.style.top = position.endY - position.offsetY + ‘px‘;
                element.style.left = position.endX - position.offsetX + ‘px‘;
            }
        }, false);
        //释放拖拽状态
        element.addEventListener(‘mouseup‘, function (event) {
            position.state = 0;
        }, false);
    }
    drag(‘block‘);
</script>
</body>
</html>

demo2.html

<!DOCTYPE html>
<html lang="en">
<body>
<div id="box" class="box" style="width: 100px;height: 100px; position: absolute;background: red;cursor: move;"></div>
<script>
(function () {
  var dragging = false;
  var boxX, boxY, mouseX, mouseY, offsetX, offsetY;

var box = document.getElementById(‘box‘);

box.onmousedown = down;
  document.onmousemove = move;
  document.onmouseup = up;

function down(e) {
    dragging = true;
    boxX = box.offsetLeft;
    boxY = box.offsetTop;
    mouseX = parseInt(getMouseXY(e).x);
    mouseY = parseInt(getMouseXY(e).y);
    offsetX = mouseX - boxX;
    offsetY = mouseY - boxY;
  }

function move(e) {
    if (dragging) {
      var x = getMouseXY(e).x - offsetX;
      var y = getMouseXY(e).y - offsetY;
      var width = document.documentElement.clientWidth - box.offsetWidth;
      var height = document.documentElement.clientHeight - box.offsetHeight;

x = Math.min(Math.max(0, x), width);
      y = Math.min(Math.max(0, y), height);

box.style.left = x + ‘px‘;
      box.style.top = y + ‘px‘;
    }
  }

function up(e) {
    dragging = false;
  }

function getMouseXY(e) {
    var x = 0, y = 0;
    e = e || window.event;
    if (e.pageX) {
      x = e.pageX;
      y = e.pageY;
    } else {
      x = e.clientX + document.body.scrollLeft - document.body.clientLeft;
      y = e.clientY + document.body.scrollTop - document.body.clientTop;
    }
    return {
      x: x,
      y: y
    };
  }
})()
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/taobr/p/9940421.html

时间: 2024-10-12 21:57:46

js 实现简单的拖拽的相关文章

原生JS实现图标图片拖拽

实现功能: 原生JS实现图标图拖拽,拖拽的过程中不断输出该div的left.top值. 用html5的drag来实现拖拽有兼容性问题,使用拖拽插件代码又很多,而这个拖拽demo代码少,并且兼容所有浏览器,很值得在项目中使用, css样式如下: #div1{ width: 100px; height: 100px; background-color: #4D4D4D; position: absolute; cursor: pointer; -webkit-box-shadow: 3px 3px

4, 简单的拖拽效果

class Main extends egret.DisplayObjectContainer { /** * 入口文件, 最先执行的构造方法 * 这会实例化一个和手机屏幕一样大的舞台 */ public constructor() { super(); this.once( egret.Event.ADDED_TO_STAGE, this.begin, this ); } /** * 入口文件加载成功后执行的方法 * 也是逻辑的开始, 通过触摸移动显示对象 */ private begin(e

jquery监听事件on写法以及简单的拖拽效果

引子——关于jquery的某些写法 我先不对监听事件做解释,我们先来看下jquery的一些写法吧!我们最常用的是jquery的css()方法,相信大家都会用! 假如用css设置一个属性,我们写法如下: $("#haorooms").css("width","100px"); 假如多个属性呢?我们写法如下: $(".demo").css({"height":"100px","ba

WEB前端开发学习----11. JQuery 实现简单的拖拽效果

拖拽效果在网页中很常见.实现起来也不难.记录一下今天实现的简单效果. 拖拽演示 快速拖动时,会出现问题,以后修改. 说白了,就是3个点击事件. 1. 按下鼠标左键, 触发点击事件,此时记录下可以得到鼠标相对于拖动控件的位置(当前鼠标位置-控件位置): 2. 拖动鼠标,触发移动事件,可以计算出鼠标移动的距离(当前鼠标位置-之前算出的相对位置),也就是拖拽控件所移动的距离: 3. 鼠标抬起,结束拖动. 在JQ中,event.pageX    event.pageY可以获取鼠标的位置,相对于文档左上角

js实现鼠标的拖拽效果

拖拽效果在我们上网的过程中是很常见的,大家都应该在电脑上面登陆过qq吧,当这个qq的登陆框弹出来的时候,我们是可以进行拖动的.这就是一个拖拽效果 这是我在慕课网上面看到的,我直接拿过来了,地址http://www.imooc.com/learn/60 这个视频讲的蛮好的,一清二楚,不懂的可以去看看. 首先,理清楚一下总体的思路. 第一步:当鼠标按下弹出框某个区域的时候,可以进行拖拽 第二步:弹出框拖拽进行中 第三部:鼠标松开,弹出框拖动到了某个位置. 先上源代码.这个是慕课网的老师提供的 . <

js仿百度地图拖拽、缩放、添加图层功能(原创)

最近项目中完成的需求,仿百度地图中的功能: 要求:1.底层图可以拖拽.缩放.     2.拖拽一个图标,在底层图上对应位置添加一个标注点,该标注点位置要随底层图移动. 3.添加的标注点,可以拖动,删除. 主要知识点和难点就是各个浏览器的点击.拖拽.缩放事件兼容性,对js运动属性.运动偏移位置的了解,以及js面向对象的应用. 这里跟大家分享一下完成后的代码. html代码主要知识点就是运动元素和底层元素的相对绝对定位,css代码不再贴出: <div id="warp" style=

cookie结合js 实现记住的拖拽

哈喽!!!我胡汉三又回来啦!!!有木有记挂挪啊!咱们今天说一个 cookie结合JS的小案例哦! 话不多说直接上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #drag { width: 200px; height: 200px; text-align: center; line-heig

JS 鼠标事件练习—拖拽效果

拖拽效果 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>拖拽效果</title> <link rel="stylesheet" type="text/css" href="拖拽效果.css"> </head> <body> <div

简单弹窗拖拽

<!doctype html><!--<!DOCTYPE> 声明位于文档中的最前面的位置,处于 <html> 标签之前.此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范.--><html>    <head>        <!--声明当前页面的编码集:charset=gbk,gb2312(中文编码),utf-8国际编码-->        <meta http-equiv="Content-