实现可拖拽的页面元素排序更新数据库排序

news2024/11/17 14:40:54

在这里插入图片描述
摘要:

拖拽列表改变路边排序,并且更新后台数据库列表的排序,重新请求的时候获取拖拽后的排序!

Layui:
在这里插入图片描述

// 拖拽内页顺序
	list = document.querySelector('#view_side_tab');
	// 创建cruentItem存放将要拖动的元素
	let cruentItem
	// 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
	list. ondragover = e => {
	    e.preventDefault();
	}
	// 拖动开始
	list.ondragstart = e => {
	    // 此处使用setTimeout延迟被拖动的原始元素的样式
	    setTimeout(() => {
	        e.target.classList.add("moving");
	    },0)
	    // 存储被拖动元素
	    cruentItem = e.target;
	    // 拖动时默认行为是复制,此处可以改为移动
	    e.dataTransfer.effectAllowed = 'move';
	}
	
	// 拖动中
	list.ondragenter = e => {
	    // 阻止默认事件,否则元素会先回到拖动开始时的位置,再到拖动结束的位置
	    e.preventDefault();
	    // 拖动事件期间排除被拖动元素自身,以及事件代理对象ul
	    if(e.target == cruentItem || e.target == list) {
	        return;
	    }
	    // list.children获取的是类数组,类数组没有数组的方法,所以要通过Array.from转换为真正的数组
	    let itmeList = Array.from(list.children);
	    // 获取当前拖动元素位置的下标
	    let tiemListIndex = itmeList.indexOf(cruentItem);
	    // 获取当前拖动元素所移动到的位置的元素的下标
	    let targetIndex = itmeList.indexOf(e.target);
	    // 如果当前拖动元素下标小于目标元素下标说明是往下移动,否则网上移动
	    if (tiemListIndex < targetIndex) {
	        console.log('往下移动');
	        // 当前拖动元素插入到目标元素前面,且nextElementSibling目标元素的下一个兄弟元素
	        list.insertBefore(cruentItem, e.target.nextElementSibling)
	    } else {
	        console.log('往上移动');
	        list.insertBefore(cruentItem, e.target)
	    }
	}
	
	// 拖动结束
	list.ondragend = e => {
	    // 结束后移除虚线样式
	    e.target.classList.remove('moving')

        $('#view_side_tab .tree-branch').each(function(e) { 
                let dataObj = {
                    id : $(this).children().eq(1).attr('page-id'),
                    title : $(this).children().eq(1).attr('page-name'),
                    sort:e+1,
                    directory_id : book_id
                }
                modifySort(dataObj)
        }); 
	}

原生js:

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link rel="stylesheet" href="https://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.css">
		<script src="https://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script>
		<script src="https://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
		<title>Document</title>
		<style>
			* {
				padding: 0;
				margin: 0;
			}

			body {
				width: 100%;
				height: 100vh;
				display: flex;
				align-items: center;
				justify-content: center;
				background-color: blanchedalmond;
			}

			ul li {
				list-style: none;
				height: 20px;
				padding: 10px 40px;
				margin-top: 5px;
				background-color: darkgray;
			}

			.moving {
				background-color: transparent;
				color: transparent;
				border: 1px dashed black;
			}
		</style>
	</head>
	<body>
		<ul class="draList">
			<li draggable="true" class="frist"><span >水水水水水水水水</span></li>
			<li draggable="true"><span>2</span></li>
			<li draggable="true"><span>3</span></li>
			<li draggable="true"><span>4</span></li>
			<li draggable="true"><span>5</span></li>
			<li draggable="true"><span>6</span></li>
			<li draggable="true"><span>7</span></li>
			<li draggable="true"><span>8</span></li>
		</ul>
	</body>
	<script>
		$(document).ready(function() {
			// 获取列表dom
			let list = document.querySelector('.draList');
			// 创建cruentItem存放将要拖动的元素
			let cruentItem
			// 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
			list.ondragover = e => {
				e.preventDefault();
			}
			// 拖动开始
			list.ondragstart = e => {
				// 此处使用setTimeout延迟被拖动的原始元素的样式
				setTimeout(() => {
					e.target.classList.add("moving");
				}, 0)
				// 存储被拖动元素
				cruentItem = e.target;
				// 拖动时默认行为是复制,此处可以改为移动
				e.dataTransfer.effectAllowed = 'move';
			}
			
			// 拖动中
			list.ondragenter = e => {
				// 阻止默认事件,否则元素会先回到拖动开始时的位置,再到拖动结束的位置
				e.preventDefault();
				// 拖动事件期间排除被拖动元素自身,以及事件代理对象ul
				if (e.target == cruentItem || e.target == list) {
					return;
				}
				// list.children获取的是类数组,类数组没有数组的方法,所以要通过Array.from转换为真正的数组
				let itmeList = Array.from(list.children);
				// 获取当前拖动元素位置的下标
				let tiemListIndex = itmeList.indexOf(cruentItem);
				// 获取当前拖动元素所移动到的位置的元素的下标
				let targetIndex = itmeList.indexOf(e.target);
				// 如果当前拖动元素下标小于目标元素下标说明是往下移动,否则网上移动
				if (tiemListIndex < targetIndex) {
					console.log('往下移动');
					// 当前拖动元素插入到目标元素前面,且nextElementSibling目标元素的下一个兄弟元素
					list.insertBefore(cruentItem, e.target.nextElementSibling)
				} else {
					console.log('往上移动');
					list.insertBefore(cruentItem, e.target)
				}
			}
			
			// 拖动结束
			list.ondragend = e => {
				// 结束后移除虚线样式
				e.target.classList.remove('moving')
				$('.draList').each(function(e) {
					console.log($(this).html())
					let domeFather = $(this).html();
					// data.push($(this).text()); 
					console.log($(domeFather).children('li').eq(0));
			
					// console.log("A",$(this).html().attr('page-id'));
					// console.log("B",$(this).html().attr('page-name'));
				});
			}
		})
		
	</script>
</html>

在这里插入图片描述

拖拽插件

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

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

相关文章

JUC并发编程学习与实践

文章目录 学习资料创建和运行线程方法一&#xff1a;直接使用Thread方法二&#xff1a;使用Runnable配合Thread方法三&#xff1a;FutureTask配合Thread 线程的常见方法start与runsleep与yield线程的优先级 join方法详解interrupt线程打断interrupt线程打断后&#xff0c;线程不…

【成都游戏业:千游研发之都的发展与机遇】

成都游戏业&#xff1a; 千游研发之都的发展与机遇 作为我国西部游戏产业的龙头&#xff0c;成都这座城市正在高速发展&#xff0c;目标是崛起成为千亿级游戏研发之都。多年来&#xff0c;在政策扶持、人才汇聚以及文化底蕴等助力下&#xff0c;成都游戏业已经形成完整的产业链…

SAP MIGO发货过账的时候批次库存确定:事务码MBC1进行激活即可

事务码&#xff1a; MBC1 ~ MBC3 使用MBC1按照工厂层级进行激活 接下来MIGO发货过账的时候就可以使用批次库存确定了&#xff0c;点击下图中圈出来的库存确定按钮

Spring AOP 实现原理详解之 JDK 动态代理

目录 一. 前言 二. JDK 代理的示例 2.1. 不需要 Maven 依赖 2.2. 定义实体 2.3. 被代理的类和接口 2.4. JDK 代理类 2.5. 使用代理 三. JDK 代理的流程 3.1. ProxyGenerator 生成代码 3.2. 从生成的 Proxy 代码看执行流程 四. Spring AOP 中 JDK代理的实现 4.1. Sp…

【虚拟仿真】Unity3D中实现3DUI,并且实现Button、InputField、Toggle等事件绑定

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 最近在项目中需要用到3DUI的展示,之前一般会用TextMeshPro进行展示: 但是,后面又需要添加按钮、Toggle等…

[开源协议] 什么是MIT协议及其使用场景

什么是MIT协议? MIT协议是一种开放源代码软件授权协议&#xff0c;全称为Massachusetts Institute of Technology License。该协议允许自由地使用、复制、修改、合并、发布、分发、再授权和销售软件及其副本的任何部分。MIT协议要求在软件的所有副本中包含版权声明和许可声明…

Web基础②nginx搭建与配置

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff…

WordPress如何将后台右上角管理员头像去除并调整注销位置及启用注销确认功能?

WordPress后台默认情况下右上角可以看到管理员昵称和头像&#xff0c;将鼠标移动到该昵称上还会出现一个下拉菜单&#xff0c;点击下拉菜单中的“注销”无需我们再次确认就会自动退出。 现在我想将WordPress后台右上角的管理员头像和管理员昵称子菜单去除&#xff0c;并将“注销…

探索亚马逊自养号测评的实际效果与使用感受

自养号在亚马逊测评中的应用给了我们一种全新的体验。通过使用亚马逊自养号&#xff0c;我们发现了许多令人满意的优势&#xff0c;这些优势不仅提升了我们的测评效率&#xff0c;还增加了我们的信誉度。 首先&#xff0c;自养号的质量可控性给了我们极大的信心。我们可以自行…

基于springboot+vue的高校学科竞赛系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Redis之缓存穿透问题解决方案实践SpringBoot3+Docker

文章目录 一、介绍二、方案介绍三、Redis Docker部署四、SpringBoot3 Base代码1. 依赖配置2. 基本代码 五、缓存优化代码1. 校验机制2. 布隆过滤器3. 逻辑优化 一、介绍 当一种请求&#xff0c;总是能越过缓存&#xff0c;调用数据库&#xff0c;就是缓存穿透。 比如当请求一…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg

1、eps转pdf 直接使用epstopdf命令&#xff08;texlive、mitex自带&#xff09;。 在cmd中进入到eps矢量图片的目录&#xff0c;使用下面的命令&#xff1a; for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码&#xff1a; import matplotlib.pyplot as…

挑战6万月薪【三】Purple Pi OH开发板带你7天入门OpenHarmony!

现在为止&#xff0c;我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接&#xff0c;接下来&#xff0c;让我们趁热打铁&#xff0c;完成剩余配件的连接&#xff01; 注&#xff1a;配件连接前请断开主板所有供电&#xff0c;避免敏感电路损坏&#xff01; 一. 接口…

计算机网络-局域网

文章目录 局域网局域网拓扑结构以太网以太网传输介质以太网时隙提高传统以太网带宽的途径以太网帧格式 局域网协议IEEE 802参考模型IEEE802.2协议LLC帧格式及其控制字段LLC提供的三种服务 IEEE 802.3协议IEEE 802.4协议IEEE 802.5协议 高速局域网100M以太网千兆以太网万兆以太网…

ubuntu22.04@Jetson Orin Nano之CSI IMX219安装

ubuntu22.04Jetson Orin Nano之CSI IMX219安装 1. 源由2. 安装2.1 硬件安装2.2 软件配置2.3 新增摄像头 3. 效果4. 参考资料 1. 源由 折腾半天时间&#xff0c;捣鼓这个套装摄像头(IMX219)的安装&#xff0c;死活就是没有这个设备。世界总是这么小&#xff0c;看看遇到问题的大…

吴恩达机器学习全课程笔记第三篇

目录 前言 P42-P48 神经元和大脑 神经网络中的层 更复杂的神经网络 前向传播&#xff08;做出预测&#xff09; P49-P53 代码中的推理 构建一个神经网络 P54-P60 矩阵乘法 TensorFlow框架实现神经网络 前言 这是吴恩达机器学习笔记的第三篇&#xff0c;第二篇笔记…

C#知识点-16(计算器插件开发、事件、递归、XML)

计算器插件开发 1、Calculator.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Calculator_DLL {//用来明确所有插件开发人员的开发规范public abstract class Calculator{public int N…

2024作品集设计指南:3个你需要知道的趋势!

如果你想在面试中获得额外的分数&#xff0c;你的首要任务是仔细准备一个个人作品集。作品集是展示设计师个人能力的载体。一个优秀的作品集不仅可以向面试官展示你的设计技巧&#xff0c;还可以通过将作品集与设计趋势“融合”来体现你对市场的关注。“设计技能市场思维”的作…

Linux环境下查看磁盘层级占用空间的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Java基于SpringBoot的社区医院信息管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…