实现思路:

  1. 鼠标按下开始拖拽
  2. 记录摁下鼠标时的鼠标位置以及元素位置
  3. 拖动鼠标记下当前鼠标的位置
  4. 鼠标当前位置-摁下时鼠标位置= 鼠标移动距离
  5. 元素位置= 鼠标移动距离+鼠标摁下时元素的位置
            class Drag {
    //构造函数
    constructor(el) {
    this.el = el;
    //鼠标摁下时的元素位置
    this.startOffset = {};
    //鼠标摁下时的鼠标位置
    this.startPoint = {};
    let move = (e) => {
    this.move(e);
    };
    let end = (e) => {
    document.removeEventListener("mousemove", move);
    document.removeEventListener("mouseup", end);
    };
    el.addEventListener("mousedown", (e) => {
    this.start(e);
    document.addEventListener("mousemove", move);
    document.addEventListener("mouseup", end);
    })
    }
    //摁下时的处理函数
    start(e) {
    let { el } = this;
    this.startOffset = {
    x: el.offsetLeft,
    y: el.offsetTop
    }
    this.startPoint = {
    x: e.clientX,
    y: e.clientY
    }
    }
    //鼠标移动时的处理函数
    move(e) {
    let { el, startOffset, startPoint } = this;
    let newPoint = {
    x: e.clientX,
    y: e.clientY
    }
    let dis = {
    x: newPoint.x - startPoint.x,
    y: newPoint.y - startPoint.y,
    }
    el.style.left = dis.x + startOffset.x + "px";
    el.style.top = dis.y + startOffset.y + "px";
    }
    } (function () {
    let box = document.querySelector("#box");
    let dragbox = new Drag(box);
    })()
 

实现一个div的拖拽效果的更多相关文章

  1. js事件处理相关-实现一个div的拖拽

    最终代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

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

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

  3. 拖拽系列一、JavaScript实现简单的拖拽效果

        前端拖拽相关应用汇总 在现实生活中就像男孩子牵着(拖着)女朋友的手穿过马路:从马路的一端走到另一端这种场景很常见: 而在前端开发中拖拽效果也算是前端开发中应用最常见.最普遍的特效:其拖拽涉及知 ...

  4. 使用mousedown、mousemove、mouseup实现拖拽效果

    如何实现一个元素的拖拽效果,使用原生的js实现,习惯了jquery的同学们,你们自己写了吗?N久使用mvvm框架,不写jquery的东西,感觉自己完全不会了. 话不多说,直接上code.本例子以简单的 ...

  5. day23—JavaScript实现DIV盒子拖拽(原生方式)

    转行学开发,代码100天——2018-04-08 <!doctype html> <html> <head> <meta charset="utf- ...

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

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

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

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

  8. JavaScript实现最简单的拖拽效果

    一.一些无关痛痒的唠叨 拖拽还是挺不错的一个页面效果,我个人认为,其生命力在于可以让用户自己做一些操作,所谓自定义.例如: ①浏览器标签顺序的拖拽切换 现在基本上所有的选项卡式的浏览器都有顺序拖拽切换 ...

  9. vue模块拖拽效果

    正巧在之前面试中遇到问实现拖拽效果 当时面试的时候简单回答了实现的方式与逻辑. 现在闲来无事,把这个东西实现了一下. 原理很简单,写的很方便. 数据驱动,建立一个数组,数组初始长度为1 拖动触发时,添 ...

随机推荐

  1. 基于Vue的WebApp项目开发(三)

    实现根组件通用的头部和底部样式 明白由webpack搭建起来的Vue项目的执行流程,那么就可以知道实现这个需要只要在根组件和入口文件上做“手脚”即可 <!--以后项目的根组件--> < ...

  2. spring mvc拦截器HandlerInterceptor

    本文主要介绍springmvc中的拦截器,包括拦截器定义和的配置,然后演示了一个链式拦截的测试示例,最后通过一个登录认证的例子展示了拦截器的应用 拦截定义 定义拦截器,实现HandlerInterce ...

  3. Java和C# RSA加解密相互通信和使用公钥加密传输

    关于JAVA和C#加解密通讯的话,可以用这个BouncyCastle插件,会帮助你解决很多问题 http://www.bouncycastle.org/ //c#使用java给的公钥进行rsa加密 p ...

  4. python的enumerate函数

    python的enumerate函数用于循环索引和元素 例如 foo = 'abc' for i , ch in enumerate(foo): print ch, '(%d)' % i 输出结果: ...

  5. Windows Azure系列公开课 - 第三课:创建虚拟机 (基础篇)

    Windows Azure微软智能云平台主要提供四大类服务:计算服务(Compute),数据服务 (Data Services) ,应用服务 (App Services) ,网络服务(Network) ...

  6. Windows ->> Windows Server 2012打开管理添加“我的电脑”桌面图标途径

    Windows Server 2012打开管理添加“我的电脑”桌面图标途径 rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0

  7. [翻译] ZFTokenField

    ZFTokenField 本人视频教程系类   iOS中CALayer的使用 效果图: iOS custom view that let you add token view inside like ...

  8. delete in javascript

    Key word delete. 1. Delete global object. x = 42; // creates the property x on the global object var ...

  9. Shell使用手册

    1.循环数组 list=(20180531 20180430 20180331 20180228 20180131 20171231 20171130 20171031 20170930 201708 ...

  10. MapReduce Design Patterns(chapter 3 (part 1))(五)

    Chapter 3. Filtering Patterns 本章的模式有一个共同点:不会改变原来的记录.这种模式是找到一个数据的子集,或者更小,例如取前十条,或者很大,例如结果去重.这种过滤器模式跟前 ...