前端原生拖拽(drag drop)的一点小总结

article/2025/9/14 4:13:02

新工作中,第一个手生的功能,遇到了很多诡异的问题,今天终于解惑了。最终原因还是对代码没有透彻的了解,jquery的运用也不熟练导致的。稍稍的记录一下。

原始功能

         对项目列表中的元素进行拖拽,拖拽到一定的位置,根据放置位置做一些相应的处理(具体不分析)。实际使用时根据自己需求作相应处理就可以了。

官方参考及常用API

HTML 拖放 API - Web API 接口参考 | MDN

项目中用到的事件方法

dragstart : 开始拖拽一个元素,被拖拽元素监听事件

dragover:当被拖拽元素在目标地元素时触发 所以目标元素监听 组织默认事件

drop:被拖拽元素释放时监听  目标元素监听

属性

draggable 允许元素被拖拽 因此被拖拽元素需要设置 draggable = true

数据传递和自定义图标

DataTransfer:对象用于保存拖动并放下(drag and drop)过程中的数据。它可以保存一项或多项数据。

方法:setData()  getData()  setDragImage() 

问题及总结

① jquery 对象转 Element :出现这个问题完全是对jquery 的不熟悉,因为基本没怎么用过。

② 为什么会有①中的问题呢 因为在自定义拖拽跟随图标时 调用 setDragImage() 语法如下:

setDragImage(img, xOffset, yOffset) img 是 img | element ,按照官方说法就是可以是Image 、canvas ,也可以是Element元素,而我使用时一直使用的jquery 在查找对象,一直报不是ELement的错误,而我并没有 ①中的概念.

③ 设置了对应了Element 但是效果一直不好,因为对代码整体没熟透 ,感觉写的没问题,即使只设置了想要跟随的元素拖拽,效果依然不理想。没办法我自己写了个demo 代码如下:

因为真的不知道是哪里的原因 就胡乱怀疑 试了原生方法试jquery方法 ,最终发现都没有问题,可以实现。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Drag demo </title><style>.container{width: 100%;display: flex;}.source{width: 200px;height: 200px;border: 1px red solid;display: flex;}input{width: 25px;height: 25px;margin-top: 30px;}.source img{width: 45px;height: 45px;}.target{width: 300px;border: 1px green solid;margin-left: 50px;}</style><script src="./jquery/jquery.min.js"></script>
</head>
<body><div class="container"><div class="source" draggable="true"><input type="checkbox"/><h3><img src="./img/img1.png" alt=""><span>标题标题4</span></h3></div><div class="target"></div></div><script>// var source = document.querySelector('.source')// var dragImgEle = document.querySelector('h3')// source.ondragstart = function(e){//   console.log('dragStart','ondragstart')//   console.log('dragStart',e.target)//   e.dataTransfer.setDragImage(dragImgEle, 10, 10);// }$('.source').on('dragstart',function(e){var dragImgEle2 = $(e.target).find('h3')var dragImgEle3 = document.querySelector(dragImgEle2.selector)e.originalEvent.dataTransfer.setDragImage(dragImgEle2[0], 10, 10);})var target  = document.querySelector('.target');target.ondrop = function(e){console.log("e",'ondrop')}</script>
</body>
</html>

自己试了demo 才发现 ,写的方法都没有问题,最终最终最终是代码中的布局导致了拖拽图像的效果。写的demo 效果如下图:左侧是原元素,右侧是拖动的图像。正常来说原生拖拽是自动生成了拖拽元素的,但我的项目中无论怎么样怎么设置拖拽元素都包含左边的checkbox input 。简直到了怀疑人生。问题原因:float+padding-left 组合。 原生拖拽图像默认是拖拽的元素,但好像不是取得元素,而是元素区域的图片画像,像如下的图片checkbox 虽然不是拖拽元素,但是如果它浮动在拖拽元素的上面 然后拖拽的图像就有了他!!!

 以上这个问题,就是另外纠结到怀疑人生的问题,奇奇怪怪,找到原因了也是简单无比。


http://chatgpt.dhexx.cn/article/ilklUxKN.shtml

相关文章

Vue2 _ 实现拖拽功能

老项目重构&#xff0c;其中有一些拖拽功能&#xff0c;不过用的是两个开源 JS 拖拽文件实现的效果&#xff0c;版本太老了&#xff0c;所以需要换代了&#xff0c;然后就查阅了能够用 Vue 来简单快速实现拖拽的功能实现方法 &#xff1a; 目录 一、HTML 拖放 二、Vue.Dragg…

vue2 使用 Sortable 库进行拖拽操作

一、vue 项目使用 文档地址&#xff1a; https://www.itxst.com/sortablejs/neuinffi.html 1、安装依赖 npm i -S vuedraggable2、.vue 文件引入组件 import draggable from "vuedraggable"; components: { draggable },3、.使用 查看文档中的示例即可&#xff…

空指针、悬空指针、野指针

文章目录 前言一、指针&#xff1f;二、指针的应用场景三、 空指针四、 悬空指针五、 野指针正确用法 总结 前言 相信很多小伙伴对指针的使用都有一定的了解了。但更多的人可能对指针又爱又恨。这次我们谈点重要的&#xff0c;进一步加深对指针的理解 一、指针&#xff1f; 指…

【C语言】指针(野指针)

目录 1&#xff1a;什么是野指针&#xff1f; 2&#xff1a;如何规避野指针 1.1&#xff1a;指针变量的初始化 2.2&#xff1a;指针越界访问 3.3&#xff1a;指针指向的空间如果我们还回去的话&#xff0c;就把指针指针置为NULL 4.4&#xff1a;指针使用之前检查有效性…

C语言的野指针

1.野指针 指针变量中的值是非法的内存地址&#xff0c;进而形成野指针野指针不是NULL指针&#xff0c;是指向不可用内存地址的指针NULL指针并无危害&#xff0c;很好判断&#xff0c;也很好调试C语言中无法判断一个指针所保存的地址是否合法&#xff0c;合法的地址是通过变量或…

初识C语言---野指针

野指针概念&#xff1a; 野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#xff09;。 一、野指针成因 1、指针未初始化就使用 #include<stdio.h> int main() {int* p; *p 10; return 0; }此段代码中&#…

野指针(概念,产生原因,危害,避免方法)

思维导图: 1.野指针与垂悬指针的区别: 野指针:访问一个已销毁或者访问受限的内存区域的指针,野指针不能判断是否为NULL来避免 垂悬指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。 2.概念 指针指向了一块随机的空间,不受…

野指针概念、定义、及如何规避野指针

野指针 野指针的概念&#xff1a; 野指针就是指针指向的位置不可知的。&#xff08;随机的、不正确的、没有明确限制的&#xff09; 野指针的三种情况 1、指针未定义 #include <stdio.h> int main() {int* p; //局部变量指针未初始化&#xff0c;默认就是随机值*p10;r…

使用 OKTA 作为 SAML IdP 为 FortiClient配置 SAML SSO 登录

描述 随着用于 FortiGate 和 FortiClient 6.4 的 FortiOS 6.4 的发布,现在可以创建SSL SSO 单点登录解决方案,该解决方案可以集成第三方 SAML SSO 身份提供商 (IdP) 并利用其 MFA 功能。 前置条件 FortiGate 运行 FortiOS 6.4.0 或更高版本FortiClient 6.4.0 或更高版本OK…

SAML 流程讲解

SAML&#xff08;Security Assert Mark Language&#xff09;常用来实现SSO。 本文主要梳理一下SAML的代码逻辑 术语讲解&#xff1a; IDP: Identity provider 在单点登陆中是指统一身份认证平台。 SP&#xff1a;Service Provider 在单点登陆中是指需要被认证的服务方。 A…

SAML单点登录-spring-security-saml 整合使用

本文链接&#xff1a;http://t.csdn.cn/BIGKc SAML单点登录-spring-security-saml客户端SP 使用spring-security-saml搭建SAML协议的客户端&#xff0c;该依赖是spring框架的官方库&#xff0c;配置方便、文档详细。提供了包括单点登录、单点登出、获取sq元数据文件等接口&…

盘点认证协议 : 普及篇之SAML

首先分享之前的所有文章 , 欢迎点赞收藏转发三连下次一定 >>>> &#x1f61c;&#x1f61c;&#x1f61c; 文章合集 : &#x1f381; https://juejin.cn/post/6941642435189538824 Github : &#x1f449; https://github.com/black-ant CASE 备份 : &#x1f449…

SAML2.0 笔记(二)

文章目录 零、示例代码参考一、前言二、共通内容1.1、引入依赖1.2、初始化SAML部分1.2.1、检查JCE环境1.2.2、初始化服务 1.3、拦截器部分1.3.1、构建AuthnRequest1.3.2、AuthRequest解析1.3.3、SP模式选择1.3.4、IDP模式选择 1.4、涉及的工具类1.4.1、OpenSAMLUtils工具类1.4.…

SAML单点登录-spring-security-saml客户端SP

SAML单点登录-spring-security-saml客户端SP 使用spring-security-saml搭建SAML协议的客户端&#xff0c;该依赖是spring框架的官方库&#xff0c;配置方便、文档详细。提供了包括单点登录、单点登出、获取sq元数据文件等接口&#xff0c;无需自己实现&#xff0c;参考&#x…

SAML入门

SAML (Security Assertion Markup Language)入门 提到SAML (Security Assertion Markup Language), 很多人都会联想到单点登录SSO。那么Saml到底是什么&#xff0c;它跟sso到底有什么联系&#xff1f;这里给大家分享一下我在读完了saml差不多全部规范之后的一些心得。希望给sa…

SAML

SAML SAML&#xff08;Security Assertion Markup Language&#xff09;是一个基于XML的开源标准数据格式&#xff0c;它在当事方之间交换身份验证和授权数据&#xff0c;尤其是在身份提供者和服务提供者之间交换。SAML2.0可以实现基于网络跨域的单点登录&#xff08;SSO&…

基于SAML的单点登录介绍

一、背景知识&#xff1a; SAML即安全断言标记语言&#xff0c;英文全称是Security Assertion Markup Language。它是一个基于XML的标准&#xff0c;用于在不同的安全域(security domain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identity provider)和服务提供者(s…

走进SAML——基础篇

SAML的全称是Security Assertion Markup Language。提到SAML&#xff0c;我们主要想到的是其在各种单点登录场景中大行其道。单点登录我们通常叫做SSO&#xff0c;那么SAML到底是如何实现SSO的呢&#xff1f;在这个系列的文章中&#xff0c;我将为大家阐释清楚。不过&#xff0…

深入浅出SAML协议

SAML概述 SAML&#xff08;Security Assertion Markup Language 安全断言标记语言&#xff09;是一个基于XML的开源标准数据格式&#xff0c;为在安全域间交换身份认证和授权数据&#xff0c;尤其是在IDP&#xff08;Identity Provider身份提供方&#xff09;和SP&#xff08;…

SAML2.0 笔记(一)

文章目录 一、前言二、初识概念1、SP & IDP 的概念2、认识元数据2.1 IDP MetaData2.1.1 SingleLogoutService2.1.2 SingleSignOnService 2.2 SP MetaData2.2.1 SingleLogoutService2.2.2 AssertionConsumerService 2.3 通用节点2.3.1 EntityId2.3.2 KeyDescriptor2.3.3 Nam…