做网站最专业的公司济南网站

news/2025/9/23 4:54:56/文章来源:
做网站最专业的公司,济南网站,北京中心网站建设,曹鹏wordpress文章目录 ⭐前言⭐vue3拖拽实现拼图#x1f496; 思路分解#x1f496; 布局结构#x1f496; 拖拽函数#x1f496; 校验函数#x1f496; inscode整体代码 ⭐运行效果#x1f496; 随机顺序#x1f496; 拖拽中#x1f496; 校验失败#x1f496; 校验通过 ⭐总结⭐… 文章目录 ⭐前言⭐vue3拖拽实现拼图 思路分解 布局结构 拖拽函数 校验函数 inscode整体代码 ⭐运行效果 随机顺序 拖拽中 校验失败 校验通过 ⭐总结⭐结束 ⭐前言 大家好我是yma16本文分享关于 前端vue3——实现二次元人物拼图校验。 vue3系列相关文章 vue3 fastapi 实现选择目录所有文件自定义上传到服务器 前端vue2、vue3去掉url路由“ # ”号——nginx配置 csdn新星计划vue3tsantd赛道——利用inscode搭建vue3(ts)antd前端模板 认识vite_vue3 初始化项目到打包 python_selenuim获取csdn新星赛道选手所在城市用echarts地图显示 让大模型分析csdn文章质量 —— 提取csdn博客评论在文心一言分析评论区内容 前端vue3——html2canvas给网站截图生成宣传海报 拖拽相关文章 前端——html拖拽原理 前端html拖拽原理 HTML 拖拽的基本原理是通过鼠标事件和 DOM 操作来实现的。 一般来说拖拽操作包括三个阶段 鼠标按下事件当用户按下鼠标左键时触发鼠标按下事件。在该事件处理函数中首先需要记录下被拖拽元素的相关信息比如该元素的位置、大小和初始鼠标点击位置等。 鼠标移动事件当用户按下鼠标左键时并拖动鼠标时触发鼠标移动事件。在该事件处理函数中需要根据鼠标当前位置和拖拽元素的初始位置计算出该元素要被移动的距离并在 DOM 中更新该元素的位置。 鼠标松开事件当用户松开鼠标左键时触发鼠标松开事件。在该事件处理函数中需要清除拖拽元素的相关信息比如初始鼠标点击位置等。 在以上三个阶段中需要使用的 DOM 操作包括 获取 DOM 元素可以使用 document.getElementById() 或 document.querySelector() 等方法来获取需要拖拽的元素。 更新元素位置可以使用元素的 style 属性来修改元素的位置比如设置元素的 left 和 top 属性。 创建新元素可以使用 document.createElement() 方法来创建新的 DOM 元素。 通过以上鼠标事件和 DOM 操作的组合可以实现基本的 HTML 拖拽功能。 ⭐vue3拖拽实现拼图 使用vue3和原生的html drag 实现片的拖拽 思路分解 拆分图片为4宫格样式定义拖拽的样式div对应图片的4宫格定义拖拽的div元素背景图片使用图片拆分的素材给元素定义序号校验最终的元素序号判断是否拼图成功 拆分图片 布局结构 才有左右布局 左侧拖拽来源区域 右侧拖拽放入区域 template布局 templatediv classcontainer-dragdiv stylewidth: 100%;text-align:center;margin: 10px;a-button typeprimary classrandom-button clickrandomDragOrder随机顺序/a-button/divdiv classcontainer-drag-boxdiv classcontainer-drag-left!-- --div v-foritem in state.dragConfig.sourceArray :keyitem.id classdrag-item-box:idstate.dragConfig.sourceDomPrefix - item.iddiv classdrag-item draggabletrue :idstate.dragConfig.dragDomPrefix - item.id!-- 拖拽对象 data-order 校验排序用 --img :srcitem.src width280 height280 :data-orderitem.id //div/div/divdiv classcontainer-drag-right idtarget-box-id!-- 目标对象 data-order 校验排序用--div v-foritem in state.dragConfig.sourceArray :keyitem classtarget-item-box dropzone:idstate.dragConfig.targetDomPrefix - item.id :data-orderitem.id/div/div/divdiv stylewidth: 100%;text-align:centera-button typeprimary clickconfirmImg确定/a-button/div/div /templatecss配置 style .container-drag {min-width: 800px; }.random-button {margin: 5px;cursor: pointer; }.container-drag-box {display: flex;justify-content: space-between; }.container-drag-left {width: 800px;}.container-drag-right {width: 600px;height: 600px;margin: 0; }.drag-item-box {display: inline-block;margin: 2px;padding: 0;width: 280px;height: 280px;border: 1px solid rgb(24, 144, 255);overflow: hidden;}.target-item-box {display: inline-block;width: 280px;height: 280px;border: 1px solid rgb(255, 255, 255);box-sizing: border-box;overflow: hidden;margin-right: 5px;margin-bottom: 0;margin-top: 0; }/* 拖拽对象 */ .drag-item {margin: 0;text-align: center;cursor: pointer; }/* 拖拽中 */ .dragging {opacity: .5; }/* 悬浮上方 */ .dragover {background: rgba(0,255,0,.5); } /style布局效果 拖拽函数 拖拽对象配置方法dragdragstartdragend 放入区域配置方法dropdragoverdragleavedragenter // 拖拽对象 const drag (event) {console.log(dragging, event); }const dragStart (event) {// 保存被拖动元素的引用state.dragConfig.dragTarget event.target;// 设置为半透明event.target.classList.add(dragging); }const dragEnd (event) {// 拖动结束重置透明度event.target.classList.remove(dragging); }// 目标对象const dragOver (event) {// 阻止默认行为以允许放置event.preventDefault(); }const dragLeave (event) {// 在可拖动元素离开潜在放置目标元素时重置该目标的背景if (event.target.classList.contains(dropzone)) {event.target.classList.remove(dragover);} }const dragEnter (event) {// 在可拖动元素进入潜在的放置目标时高亮显示该目标if (event.target.classList.contains(dropzone)) {event.target.classList.add(dragover);} }const drop (event) {// 阻止默认行为会作为某些元素的链接打开event.preventDefault();// 将被拖动元素移动到选定的目标元素中if (event.target.classList.contains(dropzone)) {event.target.classList.remove(dragover);// 删除自身state.dragConfig.dragTarget.parentNode.removeChild(state.dragConfig.dragTarget);// 添加元素event.target.appendChild(state.dragConfig.dragTarget);} }const initDragAction (sourceElement) {if (!sourceElement) {return}/* 在放置拖拽对象上触发的事件 */sourceElement.addEventListener(drag, drag);sourceElement.addEventListener(dragstart, dragStart);sourceElement.addEventListener(dragend, dragEnd); }const initTargetAction (targetElement) {if (!targetElement) {return}/* 在放置目标对象上触发的事件 */targetElement.addEventListener(dragover,dragOver,false,);targetElement.addEventListener(dragenter, dragEnter);targetElement.addEventListener(dragleave, dragLeave);targetElement.addEventListener(drop, drop); }校验函数 遍历dom节点获取自定义的data-order属性进行校验 // 校验 const confirmImg () {const rightDom document.getElementById(target-box-id)console.log(rightDom, rightDom)const rightDomChildNodes rightDom.childNodesconsole.log(rightDomChildNodes, rightDomChildNodes)if (rightDomChildNodes.length) {// childNodes会出现空文本节点for (let i 0, length rightDomChildNodes.length; i length; i) {console.log(childNodes, rightDomChildNodes[i])if (rightDomChildNodes[i].nodeType ! 1) {// 跳过文本节点continue}else if (rightDomChildNodes[i].hasChildNodes) {console.log(childNodes attr, rightDomChildNodes[i])const currentDataOrder rightDomChildNodes[i].getAttribute(data-order)const imgDataOrder rightDomChildNodes[i].getElementsByTagName(img)[0].getAttribute(data-order)console.log(currentDataOrder, currentDataOrder)console.log(imgDataOrder, imgDataOrder)if (currentDataOrder ! imgDataOrder) {return message.warn(拼图位置错误\t第 currentDataOrder张图片)}}else {return message.warn(没有完成拼图请拖拽图片)}}}else {return message.warn(没有完成拼图请拖拽图片)}return 恭喜你完成拼图 }inscode整体代码 完整的vue代码 templatediv classcontainer-dragdiv stylewidth: 100%;text-align:center;margin: 10px;a-button typeprimary classrandom-button clickrandomDragOrder随机顺序/a-button/divdiv classcontainer-drag-boxdiv classcontainer-drag-left!-- --div v-foritem in state.dragConfig.sourceArray :keyitem.id classdrag-item-box:idstate.dragConfig.sourceDomPrefix - item.iddiv classdrag-item draggabletrue :idstate.dragConfig.dragDomPrefix - item.id!-- 拖拽对象 data-order 校验排序用 --img :srcitem.src width280 height280 :data-orderitem.id //div/div/divdiv classcontainer-drag-right idtarget-box-id!-- 目标对象 data-order 校验排序用--div v-foritem in state.dragConfig.sourceArray :keyitem classtarget-item-box dropzone:idstate.dragConfig.targetDomPrefix - item.id :data-orderitem.id/div/div/divdiv stylewidth: 100%;text-align:centera-button typeprimary clickconfirmImg确定/a-button/div/div /templatescript setup import { reactive, onMounted } from vue import { message } from ant-design-vue const state reactive({dragConfig: {sourceDomPrefix: source-item,targetDomPrefix: target-item,dragDomPrefix: drag-item,dragTarget: null,sourceImg: /img/imageSource.png,sourceArray: [{id: 1,src: /img/image1.png},{id: 2,src: /img/image2.png},{id: 3,src: /img/image3.png},{id: 4,src: /img/image4.png},]} }) // 数组随机顺序 const randomDragOrder () {const sourceArray [...state.dragConfig.sourceArray]sourceArray.sort(() Math.random() - 0.5);state.dragConfig.sourceArray sourceArray }// 拖拽对象 const drag (event) {console.log(dragging, event); }const dragStart (event) {// 保存被拖动元素的引用state.dragConfig.dragTarget event.target;// 设置为半透明event.target.classList.add(dragging); }const dragEnd (event) {// 拖动结束重置透明度event.target.classList.remove(dragging); }// 目标对象const dragOver (event) {// 阻止默认行为以允许放置event.preventDefault(); }const dragLeave (event) {// 在可拖动元素离开潜在放置目标元素时重置该目标的背景if (event.target.classList.contains(dropzone)) {event.target.classList.remove(dragover);} }const dragEnter (event) {// 在可拖动元素进入潜在的放置目标时高亮显示该目标if (event.target.classList.contains(dropzone)) {event.target.classList.add(dragover);} }const drop (event) {// 阻止默认行为会作为某些元素的链接打开event.preventDefault();// 将被拖动元素移动到选定的目标元素中if (event.target.classList.contains(dropzone)) {event.target.classList.remove(dragover);// 删除自身state.dragConfig.dragTarget.parentNode.removeChild(state.dragConfig.dragTarget);// 添加元素event.target.appendChild(state.dragConfig.dragTarget);} }const initDragAction (sourceElement) {if (!sourceElement) {return}/* 在放置拖拽对象上触发的事件 */sourceElement.addEventListener(drag, drag);sourceElement.addEventListener(dragstart, dragStart);sourceElement.addEventListener(dragend, dragEnd); }const initTargetAction (targetElement) {if (!targetElement) {return}/* 在放置目标对象上触发的事件 */targetElement.addEventListener(dragover,dragOver,false,);targetElement.addEventListener(dragenter, dragEnter);targetElement.addEventListener(dragleave, dragLeave);targetElement.addEventListener(drop, drop); }// 校验 const confirmImg () {const rightDom document.getElementById(target-box-id)console.log(rightDom, rightDom)const rightDomChildNodes rightDom.childNodesconsole.log(rightDomChildNodes, rightDomChildNodes)if (rightDomChildNodes.length) {// childNodes会出现空文本节点for (let i 0, length rightDomChildNodes.length; i length; i) {console.log(childNodes, rightDomChildNodes[i])if (rightDomChildNodes[i].nodeType ! 1) {// 跳过文本节点continue}else if (rightDomChildNodes[i].hasChildNodes) {console.log(childNodes attr, rightDomChildNodes[i])const currentDataOrder rightDomChildNodes[i].getAttribute(data-order)const imgDataOrder rightDomChildNodes[i].getElementsByTagName(img)[0].getAttribute(data-order)console.log(currentDataOrder, currentDataOrder)console.log(imgDataOrder, imgDataOrder)if (currentDataOrder ! imgDataOrder) {return message.warn(拼图位置错误\t第 currentDataOrder张图片)}}else {return message.warn(没有完成拼图请拖拽图片)}}}else {return message.warn(没有完成拼图请拖拽图片)}return 恭喜你完成拼图 }// 生命周期 onMounted(() {// 拖拽对象const dragArr state.dragConfig.sourceArray.map(item {return state.dragConfig.dragDomPrefix - item.id})dragArr.forEach(id {initDragAction(document.getElementById(id))})// 目标对象const sourceArr state.dragConfig.sourceArray.map(item {return state.dragConfig.sourceDomPrefix - item.id})sourceArr.forEach(id {initTargetAction(document.getElementById(id))})const targetArr state.dragConfig.sourceArray.map(item {return state.dragConfig.targetDomPrefix - item.id})targetArr.forEach(id {initTargetAction(document.getElementById(id))}) })/scriptstyle .container-drag {min-width: 800px; }.random-button {margin: 5px;cursor: pointer; }.container-drag-box {display: flex;justify-content: space-between; }.container-drag-left {width: 800px;}.container-drag-right {width: 600px;height: 600px;margin: 0; }.drag-item-box {display: inline-block;margin: 2px;padding: 0;width: 280px;height: 280px;border: 1px solid rgb(255, 255, 255);overflow: hidden;}.target-item-box {display: inline-block;width: 280px;height: 280px;border: 1px solid rgb(255, 255, 255);box-sizing: border-box;overflow: hidden;margin-right: 5px;margin-bottom: 0;margin-top: 0; }/* 拖拽对象 */ .drag-item {margin: 0;text-align: center;cursor: pointer; }/* 拖拽中 */ .dragging {opacity: .5; }/* 悬浮上方 */ .dragover {background: rgba(0,255,0,.5); } /style代码放在inscode vue3项目在线运行 ⭐运行效果 随机顺序 拖拽中 校验失败 校验通过 拖拽过程截图 ⭐总结 拼图校验总结 1.校验的顺序可以用元素的attribute传递位置顺序进行标记 2.拖拽对象的函数使用 拖拽对象配置方法dragdragstartdragend 放入区域配置方法dropdragoverdragleavedragenter 拖拽总结 在HTML中拖放drag and drop是一种用户界面交互的特定形式其中用户可以拖动元素或数据并将其放置在另一个位置。以下是HTML拖放的一些总结 拖放可用于各种用途例如重新排序列表将文本或文件拖动到另一个应用程序中或从文件资源管理器将文件拖动到Web页面中。在HTML中拖放API由一些事件组成包括dragstart、dragenter、dragover、dragleave、drop和dragend。通过使用HTML data属性可以将数据附加到拖动事件并在放置事件中访问它们。通过使用CSS可以为用户拖动时显示的元素创建自定义外观。在JavaScript中可以使用dragEvent对象来访问有关拖动和放置事件的详细信息例如拖动元素的位置和放置元素的位置。可以使用HTML5的拖放API创建复杂的拖放交互例如可拖动的图形和对象将元素沿路径拖动等。 ⭐结束 本文分享到这结束如有错误或者不足之处欢迎指出 点赞是我创作的动力 ⭐️ 收藏是我努力的方向 ✏️ 评论是我进步的财富 感谢你的阅读

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

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

相关文章

安徽省建设工程安全+协会网站惠州做企业网站的

[react] React怎样跳过重新渲染? 生命周期 shouldComponentUpdate return false ? 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

so域名的网站有哪些平面设计创意说明

程序员如何用技术变现 我完全没有必要通过打工听人安排而活着,而是反过来通过在公司工作提高自己的技能,让自己可以更为独立和自由地生活。 因而,在工作当中,对于那些没什么技术含量的工作,我基本上就像是在学生时代那…

南昌市建设局网站美食的网页设计

基于51单片机的羽毛球计分器设计与实现 摘要: 本文介绍了一种基于51单片机的羽毛球计分器设计方案。该计分器能够实时记录并显示双方选手的得分,同时提供了一些附加功能如计时、犯规计数等。本文首先简要介绍了羽毛球计分器的背景和需求,然后…

北京免费网站制作温江建设局网站

1、用df 命令查看查看目录所在分区,例如查看/var目录所在分区:[rootlocalhost var]# df -h /varFilesystem Size Used Avail Use% Mounted on/dev/mapper/vg1-lvroot 51G 2.6G 46G 6% /mounted on 列下面就是所在的分区2、如果还想看磁盘分区情况&#x…

商标设计网站提供哪些服务玛丽与魔女之花网页设计教程

两点需要注意的. 第一是在构造函数声明时,会同时创建一个该构造函数的原型对象,而该原型对象是继承自Object的原型对象 // 声明一个构造函数Rectengle function Rectangle(length, width) {this.length length;this.width width; }// 即:看见function 后面函数名是大写,一般…

织梦网站下载地址一手房发帖网站怎样做

文章目录 拓展知识基础名词解释(语义库更新)机器学习任务流程模型训练基本流程模型训练详细流程正向传播与反向传播正向传播-求误差值反向传播-求参数值 学习率激活函数激活函数-为什么希望激活函数输出均值为0?激活函数 — softmax & ta…

自己网站做第三方支付c语言新手入门代码

在日本消费趋势的映射下,中国的食品行业面临着独特的转型机遇。品类品牌时代的终结及其在美元霸权经济下的起落,以及中国企业如何在改革开放四十年市场红利结束后继续成长,面对内卷式竞争,中国食品企业如何寻找新的增长路径&#…

如何将网站和域名绑定网站建设做网站怎么做

CorelDRAW是一款非常流行的矢量图形设计软件,其25.0.0.230版本带来了许多新特性和更新内容。以下是我所能提供的相关信息: 首先,关于特性方面,CorelDRAW 25.0.0.230版本具有强大的矢量编辑功能,用户可以轻松创建和编辑…

凡科做网站技巧海淀西北旺网站建设

可变状态是至关重要的。所有的并发问题都可以归结为如何协调对并发状态的访问。可变状态越少,就越容易确保线程安全性。尽量将域声明为final类型,除非需要它们是可变的。不可变对象一定是线程安全的。不可变对象能极大地降低并发编程的复杂性。它们更为简…

做视频付费网站推广计划书

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> Insql 是一个轻量级的.NET ORM 类库。对象映射基于 Dapper, Sql 配置灵感来自于 Mybatis。 TA 的追求:简洁、优雅、性能与质量 TA 的宗旨:让你用起来感觉到…

php网站开发的技术框架wap网站一键生成app

目录 1、RabbitMQ简介 1.1 什么是消息队列系统 1.2 RabbitMQ的概述 1.3 RabbitMQ的优势和适用场景

中国建设银行黄冈分行网站3d建模培训班一般多少钱

JAVA环境变量配置 一、新建系统变量 新建变量,找到安装目录新建一个JAVA_HOME,路径为bin目录的前一级目录。 可以安装多个JAVA版本,然后新建不同的JAVA_HOME名称,然后填写bin目录的前一级路径。 二、编辑环境变量 找到path,然后编辑%JAVA…

小说网站防盗做的好处深情密码免费观看网站

在2023年第十三届中国国际储能大会上,全球各地的能源专家、学者和企业代表齐聚一堂,共同探讨了储能技术在推动能源转型中的重要作用。对于我们普通人来说,从这场大会中可以学到什么呢? 一、储能技术是未来能源发展的关键 随着可再…

淘宝做导航网站有哪些功能网络营销分销策略是什么

DNS劫持是一种网络攻击,攻击者通过篡改DNS记录,将特定域名的解析结果指向错误的IP地址,从而实现对特定网站的访问劫持或流量劫持。这种攻击方式严重影响了用户的上网体验,并可能导致用户隐私泄露。下面也从原因、危害以及应对的策…

网站建设的服务器网站怎么做备份

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体代发布是指将新闻稿或其他宣传内容委托给专业的媒体代理机构或公司进行发布和推广的活动。这些机构通常拥有丰富的媒体资源、人脉和经验,能够更好地将信息传递给目标受众…

专业网站开发哪里好网站开发销售员

简介: PTS 结合 10 多年来阿里的全链路压测的经验,让阿里云的用户可以如同享用满汉全席般的享用全套标准的全链路压测,也可以根据自己的需求,选择最适合自己的方式。 作者:子矜 客户的故事 全链路压测被誉为大促备战…

科技公司网站主页设计做海报有什么好的网站推荐

在现代工业领域,分板机主轴作为重要的机械部件,其性能和质量对于生产效率和产品质量具有至关重要的影响。而在这其中,曲线分板机主轴则因为其独特的优势而被广泛应用于PCB电路板的切割和分板。面对市场上众多的曲线分板机主轴品牌&#xff0c…

360网站推广官网硅钙钾镁肥网站备案专员

文件CRC和MD5校验 CRC和MD5用于文件和数据的传输校验,以确认是否接收成功。 unit CRCMD5;interface { 获取文件CRC校验码 } function GetFileCRC(const iFileName: string): String; { 获取字符串CRC校验码 } function GetStringCRC(const Str: string): Cardinal; …

做淘宝网站需要网站建设4038gzs

介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得它们能够自动更新自…

vue做的网站百度抓取网站建设初验申请表

CleverRaven/Cataclysm-DDA Stars: 9.0k License: NOASSERTION Cataclysm:Dark Days Ahead 是一个回合制的生存游戏,设定在一个后启示录世界中。尽管有些人将其描述为 “僵尸游戏”,但 Cataclysm 远不止于此。在这个残酷、持久、程序生成的世…