HTML:实现鼠标拖拽,释放效果

27 篇文章 0 订阅
25 篇文章 0 订阅

第一部分body:

先定义一个块标签,例如div class="drag"

第二部分style:

自由书写其样式,不可或缺的属性position:absolute;

第三部分script:鼠标拖动元素移动,即元素的位置放上变化---坐标.

var drag=document.querySelector(".drag");//获取元素
//鼠标按下事件,获取起点位置信息
drag.onmousedown=function(e1){
  var x1=e1.clientX;//可显示出事件发生时鼠标指针的横坐标:
  var y1=e1.clientY;//可显示出事件发生时鼠标指针的纵坐标:
  var l1=this.offsetLeft;
  var t1=this.offsetTop;
//查找变量时有个就近原则  形参就是局部变量
//   鼠标移动事件,计算差值,drag重新定位
window.onmousemove=function(e2){
    var x2=e2.clientX;//移动旧的位置
    var y2=e2.clientY;
    var l2=l1+(x2-x1);//原来的位置加上移动的距离就是移动之后的位置(坐标)
    var t2=t1+(y2-y1);
    //边界处理 防止越界 ()优先级最高
  l2=l2<0?0:(l2>window.innerWidth-drag.offsetWidth?window.innerWidth-drag.offsetWidth:l2);
t2=t2<0?0:(t2>window.innerHeight-drag.offsetHeight?window.innerHeight-drag.offsetHeight:t2);
    drag.style.left=l2+'px';
    drag.style.top=t2+'px';
}
}
//当鼠标抬起时,去掉mousemove事件
drag.onmouseup=function(){
    window.onmousemove=null;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是我为您编写的代码,包括HTML、CSS和JavaScript实现: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>拖拽排序</title> <style> .container { display: flex; justify-content: space-between; align-items: flex-start; } .left { width: 200px; height: 400px; border: 1px solid #ccc; padding: 10px; box-sizing: border-box; } .right { flex: 1; height: 400px; border: 1px solid #ccc; padding: 10px; box-sizing: border-box; overflow-y: scroll; } .drag-item { display: inline-block; width: 100px; height: 50px; border: 1px solid #ccc; text-align: center; line-height: 50px; margin: 5px; cursor: move; } .drop-zone { position: relative; border: 1px solid #ccc; padding: 10px; box-sizing: border-box; margin-bottom: 10px; } .drop-item { display: inline-block; width: 100px; height: 50px; border: 1px solid #ccc; text-align: center; line-height: 50px; margin: 5px; } .drag-button { position: absolute; top: 5px; right: 5px; cursor: move; } .dragging { opacity: 0.5; } .moving { transition: transform 0.3s; } </style> </head> <body> <div class="container"> <div class="left"> <div class="drag-item">拖拽项1</div> <div class="drag-item">拖拽项2</div> <div class="drag-item">拖拽项3</div> <div class="drag-item">拖拽项4</div> </div> <div class="right"> <div class="drop-zone"> <div class="drop-item">放置区1</div> <div class="drop-item">放置区2</div> <div class="drop-item">放置区3</div> <button class="drag-button">↕</button> </div> <div class="drop-zone"> <div class="drop-item">放置区4</div> <div class="drop-item">放置区5</div> <button class="drag-button">↕</button> </div> <div class="drop-zone"> <div class="drop-item">放置区6</div> <div class="drop-item">放置区7</div> <div class="drop-item">放置区8</div> <button class="drag-button">↕</button> </div> </div> </div> <script> const dragItems = document.querySelectorAll('.drag-item'); const dropZones = document.querySelectorAll('.drop-zone'); let dragItem = null; let dropZone = null; function handleDragStart() { this.classList.add('dragging'); dragItem = this; } function handleDragEnd() { this.classList.remove('dragging'); dragItem = null; dropZone = null; } function handleDragEnter(event) { event.preventDefault(); if (dragItem && dropZone !== this) { dropZone = this; dropZone.classList.add('moving'); } } function handleDragLeave() { if (dropZone === this) { dropZone.classList.remove('moving'); dropZone = null; } } function handleDragOver(event) { event.preventDefault(); } function handleDrop() { if (dragItem && dropZone) { const dropItems = dropZone.querySelectorAll('.drop-item'); const dropIndex = Array.from(dropItems).indexOf(dragItem); if (dropIndex === -1) { dropZone.insertBefore(dragItem, dropZone.lastElementChild); } dropZone.classList.remove('moving'); } } dragItems.forEach(dragItem => { dragItem.addEventListener('dragstart', handleDragStart); dragItem.addEventListener('dragend', handleDragEnd); }); dropZones.forEach(dropZone => { dropZone.addEventListener('dragenter', handleDragEnter); dropZone.addEventListener('dragleave', handleDragLeave); dropZone.addEventListener('dragover', handleDragOver); dropZone.addEventListener('drop', handleDrop); }); </script> </body> </html> ``` 这段代码实现了一个左侧可拖拽的区域和右侧可排序的区域。左侧区域中的项目可以拖拽到右侧的放置区中,放置区中的项目可以进行排序。放置区中的每个项目都有一个可以拖拽的按钮,用于排序。拖拽时会有动画效果

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值