您的位置:

JS拖动元素详解

一、JS拖动元素放大

通过JS可以实现拖动元素时的放大效果,可以让用户更清楚地看到元素的细节。实现方法如下:

// HTML代码
<div id="box" style="width: 100px; height: 100px; background-color: red;"></div>

// JS代码
var box = document.getElementById('box');
box.addEventListener('mousedown', function(e){
  e.target.style.transform = 'scale(1.2)';
});
box.addEventListener('mouseup', function(e){
  e.target.style.transform = 'scale(1)';
});

二、JS拖动元素不流畅

有时在使用JS实现拖动元素时,用户会感觉到元素拖动过程中不够流畅,这是因为JS事件处理过程中没有减少重绘和回流,可以通过以下方法解决:

// HTML代码
<div id="box" style="width: 100px; height: 100px; background-color: red;"></div>

// JS代码
var box = document.getElementById('box');
var dragging = false;
var originX, originY, deltaX, deltaY;

box.addEventListener('mousedown', function(e) {
  dragging = true;
  originX = e.clientX;
  originY = e.clientY;
});

document.addEventListener('mousemove', function(e) {
  if (!dragging) return;

  deltaX = e.clientX - originX;
  deltaY = e.clientY - originY;

  box.style.transform = 'translate(' + deltaX + 'px, ' + deltaY + 'px)';
});

document.addEventListener('mouseup', function() {
  dragging = false;
  box.style.transform = 'unset';
});

三、JS拖动元素在盒子内

有时候我们需要限定元素只能在一个特定的区域内拖动,如下所示:

// HTML代码
<div id="box" style="position: relative; width: 100px; height: 100px; border: 1px solid black;">
  <div id="inner-box" style="position: absolute; top: 0; left: 0; width: 50px; height: 50px; background-color: red;"></div>
</div>

// JS代码
var innerBox = document.getElementById('inner-box');
var dragging = false;
var originX, originY, deltaX, deltaY;
var box = document.getElementById('box');
var boxOffset = box.getBoundingClientRect();

document.addEventListener('mousedown', function(e) {
  if (e.target !== innerBox) return;

  dragging = true;
  originX = e.clientX;
  originY = e.clientY;
});

document.addEventListener('mousemove', function(e) {
  if (!dragging) return;

  deltaX = e.clientX - originX;
  deltaY = e.clientY - originY;

  var newX = Math.min(Math.max(boxOffset.left, innerBox.offsetLeft + deltaX), boxOffset.right - innerBox.offsetWidth);
  var newY = Math.min(Math.max(boxOffset.top, innerBox.offsetTop + deltaY), boxOffset.bottom - innerBox.offsetHeight);

  innerBox.style.transform = 'translate(' + newX + 'px, ' + newY + 'px)';
});

document.addEventListener('mouseup', function() {
  dragging = false;
});

四、JS拖动原理

JS实现拖动的原理是通过监听鼠标事件,获取鼠标在页面中的位置,然后将元素的位置根据鼠标的位置进行偏移,从而实现元素的拖动。

五、JS动态添加元素

有时候我们需要动态地添加元素并实现拖动效果。可以通过以下方法实现:

// HTML代码
<div id="container" style="width: 100px; height: 100px; border: 1px solid black;"></div>

// JS代码
var container = document.getElementById('container');

function createBox() {
  var box = document.createElement('div');
  box.style.width = '50px';
  box.style.height = '50px';
  box.style.background = 'red';
  box.style.position = 'absolute';
  box.addEventListener('mousedown', function(e) {
    dragging = true;
    originX = e.clientX;
    originY = e.clientY;
    e.stopPropagation();
  });
  document.addEventListener('mousemove', function(e) {
    if (!dragging) return;

    deltaX = e.clientX - originX;
    deltaY = e.clientY - originY;

    var newX = Math.min(Math.max(0, box.offsetLeft + deltaX), container.offsetWidth - box.offsetWidth);
    var newY = Math.min(Math.max(0, box.offsetTop + deltaY), container.offsetHeight - box.offsetHeight);

    box.style.transform = 'translate(' + newX + 'px, ' + newY + 'px)';
  });
  document.addEventListener('mouseup', function() {
    dragging = false;
  });
  return box;
}

container.appendChild(createBox());

六、JS鼠标点击拖动事件

除了鼠标拖动事件外,还可以使用鼠标点击事件来实现拖动效果,实现方法如下:

// HTML代码
<div id="box" style="width: 100px; height: 100px; background-color: red;"></div>

// JS代码
var box = document.getElementById('box');
var dragging = false;
var originX, originY, deltaX, deltaY;

box.addEventListener('mousedown', function(e){
  dragging = true;
  originX = e.clientX;
  originY = e.clientY;
});

box.addEventListener('mouseup', function(){
  dragging = false;
});

box.addEventListener('mousemove', function(e){
  if (!dragging) return;

  deltaX = e.clientX - originX;
  deltaY = e.clientY - originY;

  box.style.transform = 'translate(' + deltaX + 'px, ' + deltaY + 'px)';
});

box.addEventListener('click', function(e){
  e.stopPropagation();
});

七、JS拖拽元素到另一个元素选取

有时候我们需要实现将一个元素从一个区域拖拽到另一个区域,并且在另一个区域中选中该元素的效果,可以通过以下代码实现:

// HTML代码
<div id="source" style="width: 100px; height: 100px; background-color: red;"></div>
<div id="target" style="width: 100px; height: 100px; background-color: green;"></div>

// JS代码
var source = document.getElementById('source');
var target = document.getElementById('target');
var selectedBox = null;
var dragging = false;
var originX, originY, deltaX, deltaY;

source.addEventListener('mousedown', function(e){
  selectedBox = e.target.cloneNode(true);
  selectedBox.style.position = 'absolute';
  selectedBox.style.opacity = '0.5';
  selectedBox.style.transform = 'scale(0.8)';
  selectedBox.style.pointerEvents = 'none';
  document.body.appendChild(selectedBox);
  dragging = true;
  originX = e.clientX;
  originY = e.clientY;
});

target.addEventListener('mousemove', function(e){
  if (!dragging) return;

  deltaX = e.clientX - originX;
  deltaY = e.clientY - originY;

  selectedBox.style.transform = 'translate(' + deltaX + 'px, ' + deltaY + 'px)';
});

target.addEventListener('mouseup', function(e){
  if (!selectedBox) return;
  selectedBox.style.transform = '';
  selectedBox.style.opacity = '1';
  selectedBox.style.pointerEvents = '';
  target.appendChild(selectedBox);
  selectedBox = null;
  dragging = false;
});
JS拖动元素详解

2023-05-18
js可拖动的代码(js规定拖动的区域)

本文目录一览: 1、js怎么实现一个拖拽事件 2、js实现图片拖动代码,希望大神给代码详细的注释(解释)下。 3、js实现div的拖拽 4、js鼠标拖动div js怎么实现一个拖拽事件 Javascr

2023-12-08
JS拖拽事件详细阐述

2023-05-23
js高级程序设计笔记14(js高级程序设计笔记14页)

本文目录一览: 1、JavaScript高级程序设计 该怎么看 2、JavaScript学习笔记之数组基本操作示例 3、JS中有关sort以及return的问题 JavaScript高级程序设计 该怎

2023-12-08
javascript简要笔记,JavaScript读书笔记

2022-11-17
发篇java复习笔记(java课程笔记)

2022-11-09
htmljs编程笔记(html代码笔记)

本文目录一览: 1、html代码和JS代码有什么区别 2、如何在html中调用js函数 3、JavaScript学习笔记之数组基本操作示例 4、HTML5初学者笔记 5、《web前端笔记7》js字符—

2023-12-08
python基础学习整理笔记,Python课堂笔记

2022-11-21
5000元笔记本电脑

随着科技的不断发展,笔记本电脑已经成为了现代人生活中必不可少的工具。 随着科技的不断发展,笔记本电脑已经成为人们生活中必不可少的工具。在如今数字化时代的到来,人们对信息的需求也越来越高了,而笔记本作为

2023-12-08
重学java笔记,java笔记总结

2022-11-23
40个js实例(js什么是实例)

本文目录一览: 1、求JS分页实例或者servlet分页实例,最好有例子能直接运行看看效果 2、js中的数组应用实例 3、JavaScript学习笔记之数组基本操作示例 4、JS隐藏号码中间4位代码实

2023-12-08
javascript一句话笔记,javascript基本语句

2022-11-16
java方法整理笔记(java总结)

2022-11-08
CSS movebox 实现元素拖拽效果

2023-05-12
详解JS获取元素坐标

2023-05-20
js拖拽鼠标cursor(鼠标左键拖拽)

本文目录一览: 1、js鼠标拖动div 2、javascript 拖拽移动滚动条 3、js中如何拖动DIV中的图片? 4、js中sortable怎么获取拖动的东西 5、js 自定义的cursor在鼠标

2023-12-08
CSS和JS实现元素移动

2023-05-12
java学习笔记(java初学笔记)

2022-11-14
CSS元素移动

2023-05-12
python学习之笔记(python的笔记)

2022-11-10