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 相关文章推荐
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
用js来刷新当前页面保留参数的具体实现
Dec 23 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
解决前端跨域问题方案汇总
Nov 20 Javascript
highcharts 在angular中的使用示例代码
Sep 20 Javascript
JavaScript html5 canvas实现图片上画超链接
Oct 20 Javascript
将jquery.qqFace.js表情转换成微信的字符码
Dec 01 jQuery
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 Javascript
如何在JavaScript中使用localStorage详情
Feb 04 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
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
php长字符串定义方法
2012/07/12 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
Python简单定义与使用二叉树示例
2018/05/11 Python
python实战教程之自动扫雷
2018/07/13 Python
对Python 语音识别框架详解
2018/12/24 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
毕业生简历自我评价范文
2014/04/09 职场文书
数学教育专业求职信
2014/07/22 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server