js面向对象方式实现拖拽效果


Posted in Javascript onMarch 03, 2021

本文实例为大家分享了js面向对象方式实现拖拽的具体代码,供大家参考,具体内容如下

拖拽功能的实现原理:(直接拿走!)

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    #box {
      position: absolute;
      left: 100px;
      top: 100px;
      width: 100px;
      height: 100px;
      background: red;
    }

    #box2 {
      position: absolute;
      left: 200px;
      top: 200px;
      width: 100px;
      height: 100px;
      background: green;
    }
  </style>
</head>

<body>
  <div id="box">文字</div>
  <div id="box2">文字</div>
</body>
<script>
  class Drag {
    startMouse = {};
    startEl = {};
    #el = null;
    constructor(el, option) {
      this.#el = el;
      this.option = option;
      this.start();
    }
    start() {
      let move = (e) => {
        this.move(e)
      }
      this.#el.addEventListener('mousedown', (e) => {
        this.startMouse = {
          x: e.clientX,
          y: e.clientY,
        }
        this.ondragstart && this.ondragstart(e)
        this.startEl = this.getOffset();
        document.addEventListener('mousemove', move);
        document.addEventListener('mouseup', (e) => {
          document.removeEventListener('mousemove', move);
          this.end(e);
        }, {
          once: true
        })
        e.preventDefault();

      })
    }
    move(e) {
      let nowMouse = {
        x: e.clientX,
        y: e.clientY,
      }
      let disMouse = {
        x: nowMouse.x - this.startMouse.x,
        y: nowMouse.y - this.startMouse.y
      }
      this.ondrag && this.ondrag(e)
      this.setOffset(disMouse)
    }
    end(e) {
      this.ondragend && this.ondragend(e)
    }
    getOffset() {
      return {
        x: parseFloat(getComputedStyle(this.#el)["left"]),
        y: parseFloat(getComputedStyle(this.#el)["top"])
      }
    }
    setOffset(dis) {
      this.#el.style.left = this.startEl.x + dis.x + 'px'
      this.#el.style.top = this.startEl.y + dis.y + 'px'
    }
  }
  let box = document.querySelector("#box");
  let box2 = document.querySelector("#box2");
  let d = new Drag(box);
  let d2 = new Drag(box2);
  let clonex = null;
  d2.ondragstart = (e) => {
    clonex = box2.cloneNode(true);
    document.body.appendChild(clonex)
    box2.style.opacity = 0.5
  }
  d2.ondragend = () => {
    document.body.removeChild(clonex);
    box2.style.opacity = 1
  }
</script>

</html>

最终效果(拖动的为绿色块)

js面向对象方式实现拖拽效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
xml和web特殊字符
Apr 28 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
node.js中的fs.lchown方法使用说明
Dec 16 Javascript
javascript实现简易计算器的代码
May 31 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
Nov 29 Javascript
详解vue-cli本地环境API代理设置和解决跨域
Sep 05 Javascript
利用ES6实现单例模式及其应用详解
Dec 09 Javascript
jQuery实现的模仿雨滴下落动画效果
Dec 11 jQuery
解决layer.msg 不居中 ifram中的问题
Sep 05 Javascript
微信小程序swiper使用网络图片不显示问题解决
Dec 13 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 Javascript
Vue多选列表组件深入详解
Mar 02 #Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 #Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 #Vue.js
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 #Javascript
vue脚手架项目创建步骤详解
Mar 02 #Vue.js
javascript实现简单页面倒计时
Mar 02 #Javascript
javascript实现倒计时提示框
Mar 02 #Javascript
You might like
php 验证码制作(网树注释思想)
2009/07/20 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
PHP导入导出Excel代码
2015/07/07 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
python中的字典操作及字典函数
2018/01/03 Python
python一键去抖音视频水印工具
2018/09/14 Python
python绘制热力图heatmap
2020/03/23 Python
python 动态调用函数实例解析
2019/10/21 Python
python中p-value的实现方式
2019/12/16 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
python烟花效果的代码实例
2020/02/25 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
车工岗位职责
2013/11/26 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
会议新闻稿
2015/07/17 职场文书
Python中三种花式打印的示例详解
2022/03/19 Python
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏