首页前端开发JavaScriptjs面向对象方式实现拖拽效果

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

时间2024-02-01 00:16:03发布访客分类JavaScript浏览371
导读:收集整理的这篇文章主要介绍了js面向对象方式实现拖拽效果,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例为大家分享了js面向对象方式实现拖拽的具体代码,供大家参考,具体内容如...
收集整理的这篇文章主要介绍了js面向对象方式实现拖拽效果,觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例为大家分享了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>
    

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

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

您可能感兴趣的文章:
  • javascript的面向对象编程一起来看看
  • 详解JavaScript面向对象实战之封装拖拽对象
  • JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
  • JavaScript面向对象核心知识与概念归纳整理
  • JavaScript面向对象之七大基本原则实例详解
  • JavaScript的面向对象你了解吗

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

js拖拽"

若转载请注明出处: js面向对象方式实现拖拽效果
本文地址: https://pptw.com/jishu/594668.html
Vue中避免滥用this去读取data中数据 逻辑运算符两侧运算对象的数据类型是什么?

游客 回复需填写必要信息