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 相关文章推荐
js 获取服务器控件值的代码
Mar 05 Javascript
jQuery EasyUI API 中文文档 - Panel面板
Sep 30 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
文件上传,iframe跨域数据提交的实现
Nov 18 Javascript
jsTree使用记录实例
Dec 01 Javascript
vue.js 获取当前自定义属性值
Jun 01 Javascript
Canvas放置反弹效果随机图形(实例)
Aug 17 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
Jul 31 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 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会话处理的10个函数
2015/08/11 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
javascript 播放器 控制
2007/01/22 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
node.js中的console用法总结
2014/12/15 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
详解在Python程序中使用Cookie的教程
2015/04/30 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
详解Python yaml模块
2020/09/23 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
社区安全生产月活动总结
2014/07/05 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
golang slice元素去重操作
2021/04/30 Golang
Python办公自动化PPT批量转换操作
2021/09/15 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android