📜  电子无框可拖动移动 - Javascript(1)

📅  最后修改于: 2023-12-03 15:27:14.539000             🧑  作者: Mango

电子无框可拖动移动 - JavaScript

简介

在网页开发中,有时候需要在页面上添加一个可拖动的元素,常见的例子包括拖动窗口、拖动图片等等。本文介绍如何使用 JavaScript 实现一个电子无框可拖动移动的效果。

实现方法

我们可以使用 HTML 和 JavaScript 来实现这个效果。首先,我们需要创建一个具有拖动能力的元素,并设置其 CSS 样式。下面是一个基本的 HTML 结构:

<div id="drag-me" class="drag-box">
  <p>Drag me around!</p>
</div>

接着,我们需要编写 JavaScript 代码,在该元素上添加鼠标事件。具体实现如下:

// 获取需要拖动的元素
var dragItem = document.querySelector("#drag-me");
// 定义初始变量
var active = false;
var currentX;
var currentY;
var initialX;
var initialY;
var xOffset = 0;
var yOffset = 0;
// 添加鼠标事件
dragItem.addEventListener("mousedown", dragStart);
dragItem.addEventListener("mouseup", dragEnd);
dragItem.addEventListener("mousemove", drag);
// 定义鼠标事件函数
function dragStart(e) {
  initialX = e.clientX - xOffset;
  initialY = e.clientY - yOffset;
  if (e.target === dragItem) {
    active = true;
  }
}
function dragEnd(e) {
  initialX = currentX;
  initialY = currentY;
  active = false;
}
function drag(e) {
  if (active) {
    e.preventDefault();
    currentX = e.clientX - initialX;
    currentY = e.clientY - initialY;
    xOffset = currentX;
    yOffset = currentY;
    setTranslate(currentX, currentY, dragItem);
  }
}
// 定义设置偏移量的函数
function setTranslate(xPos, yPos, el) {
  el.style.transform = "translate3d(" + xPos + "px, " + yPos + "px, 0)";
}

上述代码中,dragStart()dragEnd()drag() 三个函数分别处理了鼠标点击、鼠标释放和拖动事件。

其中,dragStart() 函数在鼠标按下时保存了初始的鼠标位置和元素的偏移量,用于计算当前的位置。dragEnd() 函数在鼠标松开时保存了当前的位置和元素的偏移量,用于下一次拖动时的计算。drag() 函数在鼠标拖动时计算了元素的当前位置,并使用 setTranslate() 函数来设置元素的偏移量。

最后,我们还需要设置元素的 CSS 样式,使其可拖动。下面是一个基本的样式:

.drag-box {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate3d(-50%, -50%, 0);
  cursor: move;
}
总结

本文介绍了如何使用 JavaScript 实现一个电子无框可拖动移动的效果。通过添加鼠标事件和设置元素偏移量,我们可以轻松地实现一个可拖动的元素。