通付盾 网站建设公司广州网站建设技术外包

diannao/2025/10/16 2:49:40/文章来源:
通付盾 网站建设公司,广州网站建设技术外包,个人备案的网站销售商品,上海柘中建设股份有限公司网站最近碰到了个需求#xff0c;大概就是要通过可视化拖拽的方式配置一个冰柜#xff0c;需要把预设好的冰柜内部架子模板一个个拖到冰箱内。一开始的想法是用鼠标事件#xff08;mousedown、mouseup等#xff09;那一套去实现#xff0c;能实现但是过程过于复杂#xff0c;… 最近碰到了个需求大概就是要通过可视化拖拽的方式配置一个冰柜需要把预设好的冰柜内部架子模板一个个拖到冰箱内。一开始的想法是用鼠标事件mousedown、mouseup等那一套去实现能实现但是过程过于复杂需要控制的状态太多了。其实 Web Api 为 html 元素拖拽量身定制了一套 HTML 拖放API用这个方法实现一些简单的拖拽功能简直不要太简单。为此写了这篇文章下面将详细介绍 HTML 拖放 API 的核心知识点 一、被拖拽元素和放置被拖拽元素的元素 通常我们所了解的拖放是按住鼠标左键不放然后移动鼠标把一个页面元素从某个位置移动到另一个位置然后松开鼠标左键至此完成了整个拖放过程。在这个过程中我们需要先重点关注两个东西一个是被拖拽元素另一个是 放置被拖拽元素的元素。 1.1 被拖拽元素 我们得先有个概念页面上显示的元素默认并不都是可以被拖拽的除了图片、被选中的文字、链接所以如果当前元素默认不可被拖拽那么就得先把它设置为可拖拽的。ps可拖拽元素被拖拽时会有一个半透明的快照跟着鼠标移动。 将 HTML 元素的 draggable 属性设置为 true, 元素就可以变为可拖拽元素。效果如下图。 div idbox draggabletruedraggable box/div1.2 可放置被拖拽元素的元素 所有的元素区域默认是不支持放置被拖拽元素的直观的表现是当被拖拽元素经过不可放置区域时鼠标的样式是一个禁止放置的一个图标圆圈带一个斜杠所以需要将目标元素设置为一个可放置区域 默认情况下是这样 div idbox draggabletruedraggable box/div div iddroppable放置区域/div设置为放置区域需要给元素绑定一个事件 dragover 且要 阻止默认行为 div idbox draggabletruedraggable box/div div iddroppable放置区域/div scriptlet dropDom document.getElementById(droppable)dropDom.addEventListener(dragover, (e) {e.preventDefault()}) /scriptReact: 放置区域需要绑定onDragOver事件且要 阻止默认行为 – 其他事件一样加on div draggabletruedraggable box/div div onDragOver{(e) {e.preventDefault()}}放置区域/div设置为可放置区域后鼠标样式也变了不再是禁止图标,而是一个加号图标图标可以设置下面会讲解 然而你会发现被拖放元素并没有真正的被放置到放置区域这是必然的放置操作需要开发者自行定义以上的设置只是是为了向用户表明这个区域是允许放东西的那么至于怎么放需要开发者自行决定。 二、拖拽过程触发的一些事件 这一小节将带你了解整个拖放过程的其他细节比如拖拽过程中会触发哪些事件 2.1 被拖放目标触发的事件 给被拖放目标元素绑定三个事件 dragstart、drag、dragend。 div idbox draggabletruedraggable box/div div iddroppable放置区域/div scriptlet dragDom document.getElementById(box)dragDom.addEventListener(dragstart, (e) {console.log(开始拖动);})dragDom.addEventListener(drag, (e) {console.log(拖动中);})dragDom.addEventListener(dragend, (e) {console.log(结束拖动);}) /script React div draggabletrueonDragStart{(e) {console.log(开始拖动, e);}}onDrag{(e) {console.log(拖动中, e);}}onDragEnd{(e) {console.log(结束拖动, e);}}draggable box/div div onDragOver{(e) {e.preventDefault()}}放置区域/div 开始拖动触发 dragstart 拖动过程中鼠标不松开触发drag松开鼠标或者按下 Esc 键触发 dragend。 2.2 被拖拽元素在放置区域内会触发的事件 先给放置目标元素绑定四个事件 div idbox draggabletruedraggable box/div div iddroppable放置区域/div scriptlet dropDom document.getElementById(droppable)dropDom.addEventListener(dragenter, (e) {console.log(进入到了放置区域~);})dropDom.addEventListener(dragover, (e) {e.preventDefault()console.log(在放置区域内拖拽中~);})dropDom.addEventListener(dragleave, (e) {console.log(离开了放置区域~);})dropDom.addEventListener(drop, (e) {console.log(在放置区域内放下了被拖拽元素~)}) /script拖拽元素进入放置区域内时触发 dragenter 事件在放置区域内移动被拖放鼠标不松开元素触发 dragover 事件被拖放元素离开放置区域触发 dragleave 事件在放置区域内松开鼠标触发 drop 事件。 三、实现真正意义上的元素拖放 通过上面触发的事件我们可以知道用户真正在放置区域释放鼠标的时候只有 drop 事件能够监听到。所以开发者需要在这个事件里做真正的放置操作放置什么由开发者决定可以是被拖拽元素也可以是自定义的一些内容。 放置被拖拽元素 div idbox draggabletruedraggable box/div div iddroppable放置区域/div scriptlet dropDom document.getElementById(droppable)dropDom.addEventListener(dragover, (e) {e.preventDefault()console.log(在放置区域内拖拽中~);})dropDom.addEventListener(drop, (e) {console.log(在放置区域内放下了被拖拽元素~)e.target.appendChild(document.getElementById(box))}) /script放置自定义内容 dropDom.addEventListener(drop, (e) {console.log(在放置区域内放下了被拖拽元素~)let customCOntent p自定义内容/pe.target.innerHTML e.target.innerHTML customCOntent })四、dataTransfer 对象 4.1 从被拖放元素向可放置元素传递数据 dataTransfer 对象提供了一个setData()方法它接受两个参数第一个参数是传递数据的类型(一般是标准的MIME类型)第二个数据是数据值。dataTransfer 还提供了 getData() 的方法用于获取传递的数据它接受一个参数参数值为 setData 对应的第一个参数。 传递一个简单的字符串数据 div idbox draggabletruedraggable box/div div iddroppable放置区域/div scriptlet dropDom document.getElementById(droppable)let dragDom document.getElementById(box)dragDom.addEventListener(dragstart, (e) {e.dataTransfer.setData(text/plain, 自定义数据)})dropDom.addEventListener(dragover, (e) {e.preventDefault()})dropDom.addEventListener(drop, (e) {let data e.dataTransfer.getData(text/plain)console.log(你传递的数据为, data);}) /script⚡注意只能在 dragstart 事件中设置数据在其他地方设置无效。且只能在 drop 事件中获取设置的数据其他事件中获取不到。 案例根据传递的数据放置不同的内容。 div idbox draggabletruedraggable box/div div iddroppable放置区域/div scriptlet dropDom document.getElementById(droppable)let dragDom document.getElementById(box)dropDom.addEventListener(dragover, (e) {e.preventDefault()})dropDom.addEventListener(drop, (e) {let num e.dataTransfer.getData(num)console.log(num);if(num 5)e.target.innerHTML e.target.innerHTML p传递的数字大于5/pelse if(num 5) e.target.innerHTML e.target.innerHTML p传递的数字等于5/pelsee.target.innerHTML e.target.innerHTML p传递的数字小于5/p})dragDom.addEventListener(dragstart, (e) {let num Math.floor(Math.random() * 10) 1;e.dataTransfer.setData(num, num)}) /script4.2 自定义拖拽过程中跟随鼠标移动的内容 默认情况下元素被拖拽时会有一个半透明的元素快照跟随着鼠标移动。通过 dataTransfer 提供的 setDragImage(elemnt, xOffset, yOffset) 方法是可以自定义跟随内容。接受三个参数 elemnt 可以是 dom 节点或者一个图片对象xOffset, yOffset 是相对于鼠标的偏移量。 设置为一个图片 scriptlet dragDom document.getElementById(box)dragDom.addEventListener(dragstart, (e) {let img new Image()img.src ./ikunlogo.pnge.dataTransfer.setDragImage(img, 10, 10)}) /script4.3 设置放置前的反馈图标 dataTransfer 提供了一个 dropEffect属性设置放置前的反馈图标它有四种取值 none move copy link 在 dragover 中设置 dropEffect 的值 dropDom.addEventListener(dragover, (e) {e.preventDefault()e.dataTransfer.dropEffect link // none || move || copy || link })值为 none 或者经过不可放置区域显示禁止放置图标值为 move 时 值为 copy 时 值为 link 时 4.4 拖动文件上传 通过 dataTransfer 的 files 属性可以获取用户拖拽的文件信息 拖拽系统文件到放置区域并打印拖拽的文件信息 dropDom.addEventListener(drop, (e) {e.preventDefault()// 上传的文件列表let fileList e.dataTransfer.filesfor (let i 0; i fileList.length; i) {const file fileList[i];console.log(文件名 file.name);console.log(文件大小 file.size);// 后续操作 比如调接口上传文件} })4.5 清除 setData() 的值 dataTransfer 提供了 clearData() 清除 setData 设置的值传参数则删除指定类型的值不传则全部清除。 dropDom.addEventListener(drop, (e) {console.log(e.dataTransfer.getData(text/plain));console.log(e.dataTransfer.getData(text/html)); })dragDom.addEventListener(dragstart, (e) {e.dataTransfer.setData(text/plain, 自定义数据)e.dataTransfer.setData(text/html, 自定义数据2)e.dataTransfer.clearData(text/html) })4.6 查看设置了哪些类型的值 dataTransfer 提供了 types 属性查看 setData 设置了哪些类型的值。 dropDom.addEventListener(drop, (e) {console.log(e.dataTransfer.types); }) dragDom.addEventListener(dragstart, (e) {e.dataTransfer.setData(text/plain, 自定义数据)e.dataTransfer.setData(text/html, 自定义数据2) })4.7 effectAllowed 属性取值会影响到 dropEffect 的取值效果。 effectAllowed 用于限制 dropEffect 只能设置哪些值 effectAllowed 的取值有 none - 此项表示 dropEffect 设置任何值都是禁止效果 copy - dropEffect 可以设置为 copy copyLink - dropEffect 可以设置为 copy 和 link copyMove - dropEffect 可以设置为 copy 和 Move link - dropEffect 可以设置为 link linkMove - dropEffect 可以设置为 link 和 Move move - dropEffect 可以设置为 Move all - dropEffect 可以设置为所有合法值 uninitialized - 等同 all 效果 dropDom.addEventListener(dragover, (e) {e.preventDefault()e.dataTransfer.dropEffect move }) dragDom.addEventListener(dragstart, (e) {e.dataTransfer.effectAllowed none })上面即使 dropEffect 设置为 move 但是 effectAllowed 的值为 none所有还是禁止放置的反馈图标。 五、总结 实现一个拖拽功能时先定义好被拖拽元素和放置区域元素。所有的放置操作都是在 drop 事件中完成。放置前的反馈效果可以根据你传递的数据来设置 dropEffect 显示不同的效果。被拖拽元素也可以是放置区域放置区域也可以是被拖拽元素两者没有明确的界限。功能自定义按需求开发

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

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

相关文章

狠狠做网站 百度一下免费查公司信息

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。 Restful风格的请求是…

关于手机的网站有哪些内容高端网页建设公司

哈喽,大家好,我是灰小猿,一个超会写bug的程序猿! 今天来记录一个在项目实战中比较实用的方法,主要是针对一些需要存在简单数据文件导入导出的场景,如:数据文件的简单备份、软件升版前后配置导入…

html个人网站源码网站推广的要点

【读书笔记】| 作者 / Edison Zhou这是恰童鞋骚年的第178篇原创文章《人类简史:从动物到上帝》是一本评分极高的书,我在春节期间阅读完,信息量极大,现在将其重点内容总结整理成此文,分享与你。1关于《人类简史》《人类…

数据库设计对网站开发的影响网站开发职业要求

使用Apriori进行关联分析(一)大型超市有海量交易数据,我们可以通过聚类算法寻找购买相似物品的人群,从而为特定人群提供更具个性化的服务。但是对于超市来讲,更有价值的是如何找出商品的隐藏关联,从而打包促…

做网站用asp好吗昆明网络推广

1、开发app ,设置模拟器 (uniapp 如何设置模拟器) https://blog.csdn.net/sweetsoft/article/details/130727169 2、运行到模拟器 注意:1、模拟器所在的位置:“D:\Program Files\Nox\bin”,在该文件夹下找…

重庆专业做网站的公司小白网站搭建教程

客制化键盘劝退指南最近总感觉mac book pro的键盘不太好用,所以把家里用的杜伽K320拿到公司用了。这把键盘,樱桃的银轴,红轴的压力克数,更小的键程,用起来还是不错的。如此一来,家里的台式机没有键盘了&…

上海怎样做网站快速增加网站权重

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/A757291228/article/details/106739556 ———————————————— 版权声明:本文…

宁波高新区网站制作企业seo优化服务

题目描述 输入一个整数n(n不大于1000),接下来分别为n个整数,请使用递归求取最大值。 输入格式 第一行:正整数n。 第二行:n个整数。 输出格式 输出最大值 样例 样例输入 复制2 1 2样例输出 复制2 …

北京网站开发工程师招聘网网站设计制作有哪些原因

day14 一、继承 概念 Java中的继承是一个对象获取父对象的所有属性和行为的机制 理解:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法 关键字extends 优点:减少代码的冗余 缺点:继承会增加类与类之间的关系,会增加代码…

如何看自己网站流量灰色的网站

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( ) A:10倍 B:2倍 C:4倍 D:8倍 答案:C 二进制进位规则是逢二进一,因此末尾添加一个0,是扩大2倍,添加两个0…

重庆网站seo好不好新网站如何做推广

1. 题目 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li1] xor … xor arr[Ri])作为本次查询的结果。 …

wp网站怎么用插件做html网页专门开发app的公司

根据我的Linux版本tomcat下载及安装安装好tomcat之后,但是还不能直接访问我 ubuntu 服务器的公网 ip, 即http://xxx.xxx.xxx.xxx:8080访问不到 Apache tomcat主页,还需要进行配置。 一、在路由器管理页面配置转发规则 如果你和我一样&#…

广东网站建设公广州百度关键词推广

1.生物大分子序列分析 2.主要技术 3.生物信息学的应用 4.应用2 转载于:https://www.cnblogs.com/BlueBlueSea/p/9610313.html

ps软件下载花钱吗珠海网站建设优化推广

我试图复制一个Ingres“tbl2”中的更新tbl1命令,这在Oracle中并不完全.所以我使用“update(select tbl1 join tbl2 …)”命令.两个表都定义了主键,我认为我的连接唯一标识行,但是我仍然得到“ORA-01779:不能修改映射到非密钥保留表的列”.这里是适当的匿名表定义和我…

网站图片被盗连怎么办啊网站外网访问怎么做路由器端口映射

前几天有个网友跟小编问了一个有意思的问题,他说他在15年过年的时候用信用卡套现了3万元,之后一直不还,期间还换了手机号码故意躲开银行的催收,目前已经差不多三年不还钱了,前几天托人去银行查了下账单,结果…

那些是flash做的网站免费可商用素材网站

文章目录 前言Win R:打开运行窗口Win D:显示桌面。Win E:打开资源管理器。Ctrl Shift Esc:打开任务管理器。Alt Tab:切换当前打开的窗口。F2:重命名选定的文件或文件夹。Ctrl W:关闭当前…

美食网站建设项目分析报告wordpress在线支付表单

今天学习了一早上正则表达式。如下内容部分转载自《读懂正则表达式就这么简单》 一、什么是正则表达式 正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规…

广州一起做网站南宁开发公司

前言 最短路问题真的很重要很重要希望大家都能够完全掌握所有最短路算法!! 一、最短路问题的分类 Dijkstra: Dijkstra算法是一种著名的图算法,主要用于求解有权图中的单源最短路径问题。它由荷兰计算机科学家艾兹赫尔戴克斯特…

个人主页网站应该怎样做2018网站建设高考成绩查询

编程笔记 html5&css&js 075 Javascript 常量和变量 一、JavaScript 变量二、JavaScript 常量三、示例:小结: 在JavaScript中,变量和常量是用来存储数据的占位符。它们的主要区别在于可变性:变量的值可以改变,而…

宁波专业网站制作服务建设网站需要数据库备份

对于一个本科生而言,早早就收获了保研资格,那么摆在眼前的就是是否要放弃保研机会?不过看到当今计算机的就业情况,加上本科学历的贬值,想要放弃到手的保研机会,既有些不合理,也有些心疼&#xf…