用 JavaScript 实现元素的自定义拖拽

用js实现按钮的拖拽 最近做了一个需求,要求实现客服按钮的拖拽效果。 本来以为只是一个简单的拖拽效果,最后做起来却发现在拖拽结束的时候会触发按钮的点击事件。 查了一些文章后解决了这个问题,下面贴上代码: html: <div id="dragService" v-drag></div> css: #dragService{ position: fixed; width: 50p... 阅读详情

要点内容: JS元素拖拽
开发日期:2019-12-09

一、拖拽

可拖拽属性:draggable = “true”; 
  默认可拖拽元素:  
  兼容性:Chrome safair 正常使用, Firefox 部分版本可用

二、拖拽的生命周期
  1. 拖拽开始  ondragstart
  2. 拖拽进行中 ondrag
  3. 拖拽结束  ondragend
三、拖拽的组成

1.被拖拽的物体
  ondragstart ondrag ondragend
2. 目标区域
  ondragenter ondragover ondragleave ondrop

四、元素拖拽(被拖拽的物体)

(1)效果展示
在这里插入图片描述
(2)实现方式

	ele.ondragstart = function(e){
		beginX = e.offsetX;
		beginY = e.offsetY;
		console.log(e);
	}
	//在拖拽的过程中就会触发
	ele.ondrag = function(e){
		console.log(1);
	}
	ele.ondragend = function(e){
		ele.style.top = e.clientY-beginX + "px";
		ele.style.left = e.clientX-beginY + "px";
		console.log("拖拽结束");
	}
五、目标元素事件(目标区域)

(1)效果展示
在这里插入图片描述
(2)实现方式

	var target = document.getElementsByClassName("target")[0];
	//被拖拽物体已经入目标区域
	//只有在鼠标进入时才会触发
	target.ondragenter = function(e){
		console.log("被拖拽物体已经入目标区域")
	}
	target.ondragover = function(e){
		/**
		 *	阻止默认事件, ondragleave 与 ondrop => 链模式
		 *		ondragleave 与 ondrop 是冲突的,想要ondrop 触发,
		 *		则必须在ondragleave 之前禁用,即在ondragover 中设置阻止默认行为。
		 *		对于ondrop防止浏览器的默认处理数据,调用preventDefault(),
		 *		ondrop事件的默认行为是链模式;
		 */
		e.preventDefault()
		console.log("拖拽的元素在目标元素中持续触发");
	}
	target.ondragleave = function(e){
		console.log("被拖拽的元素离开目标区域才会触发")
	}
	target.ondrop = function(){
		console.log("拖拽元素在目标区域内松开鼠标时触发");
		/* ondrop   这个行为触发两个事件    
		ondragend(拖拽的元素回到原处)    
		ondragleave(被拖拽的元素离开目标区域)   
		链模式   over-- a(drop) --b(dragend)/c(leave)
		*/	
	}
六、拖拽 dataTransfer

(1)效果展示一:未设置 clearData( )清除当前设置的数据
在这里插入图片描述
效果展示二:设置 clearData( )清除当前设置的数据在这里插入图片描述
(2)实现方式

	初始化一个DataTransfer对象,用于保存拖拽数据和交互信息的媒介.
		1.DataTransfer对象调用方式:event.DataTransfer.
		2.dropEffect : 拖拽交互类型     copy,move,link,none
		3.setData(format,data) : 设置数据  以键值对的形式存储数据   (text, "文本数据");
		4.getData(format)   获取数据
		
	/* 实例 */
	<div id="d1"><img src="imgs/clothes04.jpg" width="218" id="myimg"/></div>	// 拖拽元素
	<div id="d2"></div>		// 目标区域
	<script>
		var ele1 = document.getElementById("myimg");
		var d1 = document.getElementById("d1");
		var d2  = document.getElementById("d2");
		ele1.ondragstart = function(e){
			var mysrc = ele1.src;
			e.dataTransfer.setData("src",mysrc);		// setData()	设置数据
		}
		d2.ondragover = function(e){
			e.preventDefault();							// preventDefault()	阻止默认行为
		}
		d2.ondrop = function(e){
			var mysrc = e.dataTransfer.getData("src");	// getData()	获取数据
			var myimg = document.createElement("img");
			myimg.src = mysrc;
			myimg.width = "218";
			d2.appendChild(myimg);
			
			/* clearData()	清除当前设置的数据
			 *		e.dataTransfer.clearData("src");			
			 *		d1.removeChild(ele1)
			 */
		}
	</script>

~~~~~~~~~~~~~~~~~~~ END ~~~~~~~~~~~~~~~~~~~

css+js拖动层样式 网页吧是一家专业的网页教学站点,该站内容更新快!文章教程实用性强!是一个网页爱好者常去的站点 立即下载

相关推荐

RTC温度补偿:如何让时间分秒不差?

RTC(实时时钟)温度补偿技术通过"检测温度→计算误差→动态调整频率"的闭环机制,解决振荡器频率随温度变化导致的时间误差问题。核心步骤包括:1)高精度温度检测;2)基于温度-频率误差模型计算偏差;3)通过硬件(可编程电容/DAC)或软件方式调整振荡频率。该技术需突破温度检测精度、误差模型拟合、频率调整分辨率等关键点,根据不同应用场景(消费电子±5ppm至军工±0.1ppm)选择匹配方案。典型实现如STM32的分段线性补偿算法,可将工业级RTC精度提升至±2ppm以内。

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1229

28(拖放事件)更改拖拽元素的默认样式

28(拖放事件)更改拖拽元素的默认样式

我们的目标是星辰大海! 1650

Win10安全模式下修改C盘权限的完整指南(附解决开始菜单失灵方案)

本文提供了一份在Win10安全模式下修复因C盘权限误改导致开始菜单失灵的完整指南。文章深入剖析了权限体系,特别是TrustedInstaller角色的重要性,并详细讲解了通过安全模式进入系统、使用ICACLS命令或图形界面精准重置C盘关键目录权限的步骤,最终恢复系统核心功能。

weixin_29250403的博客 234

Js学习之拖拉事件(拖动属性)HTML5 drag API(HTML 拖放 API)

Js学习之拖拉事件(拖动属性)HTML5 drag API(HTML 拖放 API)

南北极之间 1514

告别纸上谈兵:在Xilinx Artix-7 FPGA上实测RGMII接口,从ILA抓包到PC Ping通全流程记录

本文详细记录了在Xilinx Artix-7 FPGA平台上实现RGMII接口的全过程,包括硬件配置、Vivado工程设置、双沿数据转换代码实现以及ILA波形分析。通过实测数据包捕获和PC端Ping测试,验证了千兆以太网通信的稳定性和可靠性,为工业通信网关等应用提供了实用参考。

weixin_33701251的博客 287

跟踪雷达点迹处理

1,点迹定义: 假设研究对象为位置x和速度v,预测值是根据这一时刻的x值、v值来预测下一时刻的x、v;测量值是根据传感器也就是雷达得到的,因为各种误差的存在,这两个值都不准确,所以把他们加权融合,得到一个新的量—状态值。 点迹就是所谓的测量值,由雷达对同一个目标探测到的一系列点(假设目标静止,但由于误差的存在,会扫描出不止一个点),航迹对应状态值,是点迹和预测轨迹的加权融合。 2,雷达信号和点迹处理关系: 3,点迹航迹处理流程 4,仿真 clear all; RealData=G

wangjie36的博客 1万+

html5元素拖拽效果

html5元素拖拽效果的实现需要借助js,分为4个步骤,代码如下: html5元素拖拽效果 /** 存储拖放元素的ID值 */ function setsData(ev){ ev.dataTransfer.setData('text',ev.target.id); } /** 允许改元素接受拖放元素进来 */ function allowAll(ev){

为天空着色 1048

【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读

AUTOSARAutomotive Open System Architecture,汽车开放系统架构,由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立,致力于制定汽车电子软件标准的联盟。网络管理网络管理的目的是使网络中的ECU节点有序的睡眠和唤醒。在没有通信需求的时候睡眠,在需要通信的时候唤醒,可以节约汽车电池的电量。

测试领域技术分享 5164

记录自己在看H5拖拽功能时遇到的问题

解决通过dom.style.backgroundColor拿不到元素的样式问题,通过window.getComputedStyle(dom元素).css元素获取解决问题

weixin_54241625的博客 662

如何实现一个用STM32F103C8T6作为主控芯片,加上AD8232、MAX30102 、MPU6050模块的用于运动中监测心率变异性??

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1212

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 347

拖拽元素自定义html模板,JS实现的自定义网页拖动类

本文实例讲述了JS实现的自定义网页拖动类。分享给大家供大家参考,具体如下:先来看运行效果截图如下:在线演示地址如下:具体代码如下:/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">自写的拖动类……var d=document;//给document对象一个通用的事件侦听方法d.addListener=functio...

weixin_30647853的博客 481

工商银行数据智能架构实践

工商银行大数据平台技术创新与实践摘要(149字): 工商银行构建了企业级大数据云基础设施,形成包含批量计算、流计算、联机分析等核心能力的技术架构。平台创新性地实现流批一体处理,将个人储蓄存款监测时效提升至分钟级;通过实时数仓技术将报送时效缩短至1-5分钟;融合内外部数据构建风控模型,债券违约预警准确率达100%。平台还支撑了"码上赢"精准营销和空间数据服务等创新应用,未来将向存算分离、实时数仓和云数智融合方向演进,持续提升数据价值转化能力。

银行信息系统应用架构详解 539

vue 自定义指令_Vue自定义指令实现拖拽功能

点击上方蓝色字体,关注我们效果HTML:<div id='app'> <div class="box" v-drag>div>div>CSS:.box { width: 150px; height: 150px; background: orange;}JS:<script src="https://cdn.jsdelivr.net/...

weixin_39678493的博客 154

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Vue自定义指令-拖拽

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>实例方法</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

小牛牛的博客 5909

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vue自定义一个拖拽指令

<!DOCTYPE html> <html> <head> <title>vue自定义指令</title> <script type="text/javascript" src='vue.js'></script> <style type="text/css"> *{ margin: 0;...

hahahahahahahaha__1的博客 350

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

vue项目实现自定义拖拽元素

自定义拖拽指令,注意:使用时用 v-dragscroll 命令

weixin_60215651的博客 538

解决Selenium元素拖拽不生效Bug

原因是拖放功能包含三个动作:单击并按住(click and hold)、将鼠标移动到其他元素或位置(move mouse to other element/location)、释放鼠标(release mouse),问题在于最后一步释放鼠标的操作,当Webdriver API发送释放鼠标的请求时,在某些情况下它会一直按住它,所以导致拖放功能无效。方案2:通过dragAndDropBy()方法将元素进行指定像素位移,从而实现拖放到特定区域,该方法需要先找到元素的像素——无效。

HUACE0047的博客 830

vue 自定义指令拖拽

1、自定义vue指令,位置:和methods、created同级 directives: { drag: { // 指令的定义 bind: function (el) { var odiv = el; // 获取当前元素 var dragFlag = false; el.style.position = 'absolute';// 这一步一定不要忘记 var x, y; odiv.style..

qq_42859450的博客 604

轻量级可移动DOM元素库:displace.js

轻量级可移动DOM元素库:displace.js 项目介绍 在现代Web开发中,动态交互和用户友好性是不可或缺的。displace.js 是一个极简的JavaScript库,旨在为DOM元素提供可移动功能。无论是桌面还是移动设备,displace.js 都能轻松实现元素的拖拽操作,且无需依赖任何外部库,体积轻巧,性能卓越。 项目技术分析 技术栈 JavaScript: 核心功能完全由原生Java...

gitblog_00429的博客 950

自定义指令拖拽

vue自定义指令拖拽功能** 加粗样式 ** 代码如下 export default { //这个是自动获取焦点,拿过来展示循环注册自定义指令的 focus: { inserted: function(el) { // 聚焦元素 el.focus() }, }, //拖拽指令 drag: { //这个el就是我们绑定的那个元素 inserted: function(el) { // 页面可用高度 let pageHeight = window.screen.availHeight let pageWidth

weixin_48648178的博客 153

vue-例6-3定义可拖拽元素.html

【代码】vue-例6-3定义可拖拽元素.html。

虾米大王的学习历程 76

el-dialog组件实现可以拖拽移动功能

面向百度编程的小白最近遇到一个el-dialog实现拖拽移动的需求。翻了翻饿了么官网发现el-dialog并没有关于这一块的属性方法。所以与大家分享一下有关的方法。

smile106600的博客 1703

vue中使用原生draggable属性实现拖拽(设置拖拽中图片DataTransfer.setDragImage)

vue中使用draggable实现拖拽(设置拖拽中图片DataTransfer.setDragImage)

qq_45565693的博客 3369

原生拖拽太拉跨了,纯 JS 自己手写一个拖拽效果,纵享丝滑~

提到元素拖拽,通常都会先想到用HTML5的拖拽放置 (Drag 和 Drop) 来实现,它提供了一套完整的事件机制,看起来似乎是首选的解决方案,但实际却不是那么美好,主要是它的样式太过简陋,无法实现更高级的用户体验:这是浏览器默认的一种拖拽效果,随便拖拽任意的图片都会产生(包括文字)笔者因为之前有个小项目需要经常参考稿定设计,一直有留意其元素拖拽的效果(如下图),而接下来我将以这种效果为蓝本,使用原生JS实现一个富有动感的自定义拖拽效果,话不多说直接开摸。

2401_83384536的博客 1697
上一篇: 轻松实现一个简单H5播放器
下一篇: C3 的那些新玩意儿 (附案例)
JasoncodeQvQ
博客等级 码龄7年 458粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值