前端开发攻略---轻松实现排序功能:利用JavaScript创建直观的拖拽排序体验

拖拽事件主要包括以下几种:

  1. dragstart(拖拽开始):当用户开始拖拽一个元素时触发,通常在被拖拽的元素上绑定此事件。在该事件的处理函数中,可以设置被拖拽元素的一些属性或数据。

  2. drag(拖拽移动):在拖拽过程中,随着鼠标或触摸屏的移动持续触发,通常在被拖拽元素上绑定此事件。在该事件的处理函数中,可以根据鼠标或触摸屏的位置更新被拖拽元素的状态。

  3. dragenter(进入拖拽目标区域):当一个可拖拽的元素进入一个拖拽目标区域时触发,通常在拖拽目标元素上绑定此事件。在该事件的处理函数中,可以为拖拽目标元素添加一些视觉效果,以提示用户可以释放拖拽元素。

  4. dragover(在拖拽目标区域中移动):当一个可拖拽的元素在一个拖拽目标区域中移动时持续触发,通常在拖拽目标元素上绑定此事件。在该事件的处理函数中,一般需要阻止默认的事件行为,以允许拖拽元素释放到该区域。

  5. dragleave(离开拖拽目标区域):当一个可拖拽的元素离开一个拖拽目标区域时触发,通常在拖拽目标元素上绑定此事件。在该事件的处理函数中,可以移除之前添加的视觉效果。

  6. drop(释放拖拽元素):当用户释放鼠标或触摸屏时,在拖拽目标区域内触发此事件。通常在拖拽目标元素上绑定此事件。在该事件的处理函数中,可以处理释放拖拽元素后的相关操作,如更新页面内容或重新排列元素顺序。

这些事件可以结合使用,以实现各种拖拽交互功能,例如拖拽排序、拖拽放置等。

1、演示

2、问题

1、怎样让元素变得可拖拽

给元素加上 draggable 属性,值为 true 即可

 <div draggable="true" class="list-item">1</div>

2、拖拽的时候本身元素的样式得变

准备样式

       .list-item.moving {background-color: transparent;color: transparent;border: 1px solid #ccc;}

3、什么时候产生排序

拖拽的时候把拖拽对象放到了某些元素之上,这里就要监听拖拽进入事件

el.addEventListener('dragenter', function (e) {})

3、 源码及注释

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>.list-item {background-color: #266fff;border-radius: 5px;color: #fff;width: 250px;padding: 5px;margin-bottom: 10px;}.list-item.moving {background-color: transparent;color: transparent;border: 1px solid #ccc;}</style></head><body><div class="list"><div draggable="true" class="list-item">1</div><div draggable="true" class="list-item">2</div><div draggable="true" class="list-item">3</div><div draggable="true" class="list-item">4</div><div draggable="true" class="list-item">5</div></div></body><script>// 拖拽排序在很多站点里面是非常常见的,使用的API就是一个拖拽API// 1、让元素变的可拖拽   找到这些元素,给这些元素加上 draggable 属性,值为true,这样就变得可拖拽了// 2、拖拽的时候样式得变   class为moving的样式const list = document.querySelector('.list')// 用事件委托的方式 给父元素绑定事件list.addEventListener('dragstart', function (e) {// 当拖拽开始的时候要找到拖拽的那个元素给他添加类样式// 为什么要用setTimeout,不用的话拖拽的那个元素也会变成虚线(就是添加了类样式后的样子),// 它的样式取决于拖拽开始时候元素本身的样式,需要在拖拽开始的时候保持原来的样式 把它变成异步的setTimeout(() => {e.target.classList.add('moving')}, 0)sourceNode = e.target})// 用来记录当前拖拽的是哪个元素let sourceNode = null// 3、什么时候产生排序?拖拽的时候把拖拽对象放到了某些元素之上,这里就要监听拖拽进入事件list.addEventListener('dragenter', function (e) {e.preventDefault()// 排除掉一些情况,比如拖拽的时候进入了父元素 或者 是本身自己if (e.target == list || e.target == sourceNode) returnconst children = [...list.children]// 通过所处元素的下标来判断是上方还是下方const sourceIndex = children.indexOf(sourceNode)const targetIndex = children.indexOf(e.target)console.log(sourceIndex, targetIndex)// 4、当拖拽的元素进入到别的元素身上的时候,要做的一些事情if (sourceIndex < targetIndex) {// console.log('下方')// 插入到那个元素下一个元素之前list.insertBefore(sourceNode, e.target.nextElementSibling)} else {//  console.log('上方')list.insertBefore(sourceNode, e.target)}console.log(sourceIndex)})// 拖拽完毕 松开鼠标list.addEventListener('dragend', function (e) {// 移除掉类样式即可sourceNode.classList.remove('moving')})</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

本文为从零开始写 Docker 系列第十篇&#xff0c;实现类似 docker logs 的功能&#xff0c;使得我们能够查查看容器日志。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; 核心原理&#x…

https的网页会不会被伪造

https的网页在正常情况下是相对安全的&#xff0c;因为它使用了SSL/TLS协议&#xff08;即部署SSL证书&#xff09;对通信进行加密和保护。这使得传输过程中的数据难以被第三方截获或篡/改。虽然https提供了加密和认证的保护&#xff0c;但并不能完全消除被伪造的风险。 为了防…

爬虫 xpath基础

爬虫 xpath 【一】介绍 【1】说明 xpath全程XML Path Language&#xff0c;即XML路径语言&#xff0c;用于确定XML文档中某部分位置的语言 主要用途 定位节点&#xff1a;通过节点名称、节点路径、节点属性等方式定位选择节点&#xff1a;根据节点的属性、节点的文本内容、节…

MySQL一些特殊功能的索引(6/16)

特殊功能性索引 B-Tree索引&#xff1a; InnoDB的默认索引类型&#xff0c;适用于多种查询操作。 可以用于等值查询、范围查询和索引列的组合查询。 创建B-Tree索引的示例&#xff1a; CREATE INDEX index_name ON table_name (column1, column2);全文索引&#xff08;FULLTEX…

数字图像处理项目——模糊图像边缘检测算法设计及实现(论文/代码)

完整的论文代码见文章末尾 以下为部分内容 摘要 本研究旨在针对大脑核磁图像中的黑色腔体进行有效分割&#xff0c;以提供可靠的腔体定位和分析。为此&#xff0c;采用了三种常用的图像分割方法&#xff1a;8邻域区域生长法、Canny算子边缘检测和8邻域边界跟踪法。 首先&…

智算时代的基础设施如何实现可继承可演进?浪潮云海发布 InCloud OS V8 新一代架构平台

从 2023 年开始持续火爆的 AIGC 正在加速落地应用&#xff0c;为全行业带来生产生活效率的变革与升级。面对数字化转型与智能化转型&#xff0c;对于技术团队来说&#xff0c;既要根据业务与 AI 应用去部署以云为基础的 AI 算力&#xff0c;又要与已有数据和系统&#xff08;甚…

酒店大厅装水离子雾化壁炉前和装后对比

在酒店大厅装水离子雾化壁炉之前和之后&#xff0c;大厅的氛围和体验会有显著的对比&#xff1a; 装水离子雾化壁炉之前&#xff1a; 传统感&#xff1a;在壁炉安装之前&#xff0c;大厅可能会有传统的装饰或者简单的暖气设备&#xff0c;缺乏现代化的元素。这种传统感可能会…

纯css实现switch开关

代码比较简单&#xff0c;有需要直接在下边粘贴使用吧~ html: <div class"switch-box"><input id"switch" type"checkbox"><label></label></div> css&#xff1a; .switch-box {position: relative;height: 25px…

C-开发 visual Studio扩展插件介绍-格式化插件Xaml Styler、CSharpier介绍(扩展插件安装方法)

C#开发 visual Studio扩展插件介绍 扩展插件安装方法Xaml StylerCSharpier 提高C#开发效率常用的插件 扩展插件安装方法 菜单栏点击“扩展”→“管理扩展”。 打开扩展页面 右上角搜索需要安装的插件&#xff0c;然后点击下载 安装完成后&#xff0c;根据提示关闭VS进行安…

记一次小郭被挖矿后的应急响应

谨以此篇纪念我第n1次被挖矿经历。 时间&#xff1a;2024年3月18日&#xff08;星期一&#xff09; 地点&#xff1a;阿里云服务器 响应&#xff1a;确认–>抑制–>消除–>恢复–>总结 确认阶段&#xff1a; 2024年3月18日星期一早上收到了阿里云的短信和邮件…

【图论】Leetcode 200. 岛屿数量【中等】

岛屿数量 给你一个由 ‘1’&#xff08;陆地&#xff09;和 ‘0’&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以…

html+javascript,用date完成,距离某一天还有多少天

图片展示: html代码 如下: <style>* {margin: 0;padding: 0;}.time-item {width: 500px;height: 45px;margin: 0 auto;}.time-item strong {background: orange;color: #fff;line-height: 100px;font-size: 40px;font-family: Arial;padding: 0 10px;margin-right: 10px…

【hive】远程remote debug hive的方法,用于hive监听器/钩子编写

背景 写hive监听器时候需要拿到hive对象但hive是在集群linux主机上运行的。通过jdbc提交的sql具体执行过程不会再idea中运行。所以如果需要拿到hive对象有可能存在两个思路&#xff1a; &#xff08;1&#xff09;想办法写个钩子或者监听器&#xff0c;将需要的内容写成json字…

最简单的ubuntu安装docker教程

本文参考自docker官方教程&#xff1a;ubuntu上安装docker 一、安装Docker 第一步&#xff1a;添加Docker官方的GPG密钥 直接复制所有代码&#xff0c;作为一行运行即可 sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/k…

Python学习从0开始——项目一day01爬虫(二)

Python学习从0开始——项目一day01爬虫&#xff08;二&#xff09; 一、解析response数据二、json转换三、文件保存四、存储json对象五、完整代码 上一篇 一、解析response数据 在已经知道我们获取图片的最终URL存在于请求响应response中&#xff0c;下一步的重点就放在解析re…

Python格式化输出的三种常用方式

1.使用%做格式化&#xff0c;不推荐 str1"%d年%d月%d日 %s出生"%{year,month,day,name} print(str1)2.使用f’{变量}做格式化 str2f"{year}年{month}月{day}日{name}出生" print(str2) #如果要输出的字符串有{}&#xff0c;如 book"相对论" st…

latex中图片或者表格过大 导致页面里有大片空白

针对这个问题&#xff0c;可以通过把表格与上下文的距离调小&#xff0c;表格与标题的距离调小。 \vspace{-0.8cm} %调整图片/表格与上下文的垂直距离 -注意&#xff1a;该语句&#xff0c;要在begin{figure}和end{figure}上面和前面使用&#xff08;可以分别使用&#xff09;…

Redis-底层数据结构

Redis-底层数据结构 redisObject对象机制对象共享引用计数以及对象的消毁 动态字符串SDS链表链表的优缺点: 压缩链表ziplist的缺点 字典-Dictrehash渐进式rehash 整数集-intSet内存分布图整数集合的升级 跳表 - ZSkipList快表-quicklistlistpack redisObject对象机制 typedef s…

DP10RF001一款200MHz~960MHz 低功耗(G)FSK/OOK无线收发芯片应用无线遥控工控设备无线门禁传感器等

产品概述 DP10RF001是一款工作于200MHz~960MHz范围内的低功耗、高性能、单片集成的(G)FSK/OOK无线收发机芯片。内部集成完整的射频接收机、射频发射机、频率综合器、调制解调器&#xff0c;只需配备简单、低成本的外围器件就可以获得良好的收发性能。芯片支持灵活可设的数据包…

Jmeter从数据为查找结果集数据方法随笔

一、Jmeter连接数据库 1.下载对应数据库的驱动包到jmeter安装目录的lib下ext文件中&#xff0c;并导入到jmeter的测试计划中&#xff0c;本实例中使用的是mysql如下所示&#xff1a; 点击测试计划–>点击浏览–>选中mysql驱动jar包–>打开 2.添加线程组&#xff0c;…