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 相关文章推荐
一个对于Array的简单扩展
Oct 03 Javascript
jQuery代码优化 选择符篇
Nov 01 Javascript
代码触发js事件(click、change)示例应用
Dec 13 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
Dec 31 Javascript
js获取form的方法
May 06 Javascript
jQuery实现图片轮播特效代码分享
Sep 15 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
Vue 仿百度搜索功能实现代码
Feb 16 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
Feb 20 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
使用axios实现上传图片进度条功能
Dec 21 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 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 图片文件上传实现代码
2010/12/29 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
详解PHP归并排序的实现
2016/10/18 PHP
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
jquery处理json对象
2014/11/03 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
手机端转换rem适应
2017/04/01 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
puppeteer库入门初探
2019/01/09 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
在Django的模板中使用认证数据的方法
2015/07/23 Python
python获取url的返回信息方法
2018/12/17 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
Python 解析xml文件的示例
2020/09/29 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
实习鉴定范文
2013/12/19 职场文书
祖国在我心中演讲稿
2014/01/15 职场文书
优秀教师主要事迹
2014/02/01 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
赞助商致辞
2015/07/30 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
话题作文之诚信
2019/11/28 职场文书
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS