【前端 5】拖拽

摘要:
在这个过程中,我们应该注意以下几点:获取鼠标焦点在视觉窗口中的具体位置(x,y),各种浏览器的兼容性,以及鼠标拖动范围的控制!可拖动方法中有很多属性,包括是否可以复制、拖动范围控制、透明度等。由于实际情况,这里没有配置属性!
简述:实现拖拽,关键的地方:鼠标抬起(mouse-up)事件、鼠标落地(mouse-down)事件、对象的拖拽事件。那么在这个过程中,需要注意的点是:获取鼠标焦点在可视窗口的具体位置(x,y),以及各个浏览器的兼容,鼠标的可拖拽范围控制等!

一、实现要点

1.1,让指定对象可拖拽

<span style="font-family:KaiTi_GB2312;font-size:18px;">$("div[id^='chooseCourse']").draggable();</span>

本行代码表示,获取所有div的ID前缀是chooseCourse的对象,并设置其属性为可拖拽。draggable方法里面有很多的属性,包括是否可复制、拖动范围控制、透明度等等,这里因为实际情况,并没有配置任何属性!


1.2,(mouse-down)克隆当前对象,供下次拖拽

<span style="font-family:KaiTi_GB2312;font-size:18px;"> function DragObj(){
	 var flag=0
	 var x=0;
	 var y=0
 }
 var dEvt=new DragObj();
 function down(obj,cloneId){
	 dEvt.flag=1;
	 dEvt.x=obj.offsetLeft;
	 dEvt.y=obj.offsetTop;
	 //复制一个当前控件,并且放到获取的位置上
	 var sourceNode=document.getElementById(cloneId);
 	var i="a";
	var cloneNode=sourceNode.cloneNode(true);
	var newCloneId=cloneId+i;
	cloneNode.setAttribute("id",newCloneId);
	sourceNode.parentNode.appendChild(cloneNode);
	
	$("div[id='"+cloneNode.id+"']").draggable();
	
 }</span>

1.3,(mouse-up)执行鼠标抬起时的事件

在这个步骤中,需要控制拖拽范围和获取鼠标抬起时的位置:

<span style="font-family:KaiTi_GB2312;font-size:18px;"> function up(obj,event){
	 //获取当前的位置
	 //获取每一行的位置,获取每一列的位置object.offsetLeft
	 var txt=obj.innerText;
	 var id=obj.id;


	 obj.hidden=true;
	 var x=event.pageX;
	 var y=event.pageY;
	 var getNode=document.elementFromPoint(x,y);
	 
	//拖动有效范围的最左边(执行弹框)
	 var X1 = $('#Firstone').offset().top;
	 var Y1= $('#Firstone').offset().left;
	//拖动有效范围的最右边(执行弹框)
	 var X2 = $('#Seventhfive').offset().top;
	 var Y2= $('#Seventhfive').offset().left;
		
	 if(x<Y1 || x>Y2){
		 return;
	 }
	 
	 if(y<X1 || y>X2){
		 return;
	 }
}</span>

1.4,代码调用

<span style="font-family:KaiTi_GB2312;font-size:18px;">onMouseDown=down(this,id) onmouseup=up(this,event)</span>

二、总结
在这个过程中要点,除了上面的之外,对于准确获取到指定一个、多个对象也是一个比较关键的地方(就跟数据库查询玩儿模糊匹配似的,唉)。在这个过程中,发现框架有些封装好的,然后自己并不知道。有了框架之后,自己又完全依赖框架,是个麻烦事!
利用框架或者语言本身提供的方法,可以大大的缩减代码,提升代码质量!

免责声明:文章转载自《【前端 5】拖拽》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android内核开发:理解和掌握repo工具【转】程序员修炼之道的提示们(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

吐槽下若依(RuoYi)系统的权限系统(shiro和spring-security)

spring-security以RuoYi-Vue为例,当前版本是3.1.0。然后是系统中很多地方用LoginUserloginUser=tokenService.getLoginUser来获取当前用户数据,这个需要再解析token,然后从redis缓存中读取的数据,不明白为什么不直接从SecurityUtils.getLoginUser()中获取,明明已经...

C# 如何提取SaveFileDialog的保存路径

直接使用代码1publicTestOne()2{3InitializeComponent();4SaveFileDialog();//调用打开SaveFileDialog保存对话框5}67#区域保存对话框8privateevoidSaveFileDialog()9{10//startlocalFilePath,fileNameExt,newFileName,...

tabsSwiper 全屏选项卡(uniapp-uView)

完整代码˂swiper:current="swiperCurrent"@transitio...

基于智能网卡(Smart Nic)的Open vSwitch卸载方案简介

SmartNic技术的初衷是以比普通CPU低得多的成本支持各种虚拟化功能,如sriov、overlay/decap和卸载一些vSwitch处理逻辑。目前,业界还没有完美的SmartNic解决方案来解决传统的vSwitch性能瓶颈,每种解决方案的实施方式也各不相同。没有统一的解决方案。图1.不同SmartNic架构的比较。2.基于SmartNic的OVS卸载方...

allure报告实现保存失败用例截图功能

allure中可以保存日志信息和截图日志allure能够自动识别。截图需要自己在添加allure方法。...

微信小程序生成带参数的二维码(小程序码)独家asp.net的服务端c#完整代码

1) 我第一次使用wx。小程序端请求调用API,发现这是一个坑!@-_~Page:'pages/index/index',//在此处填写要跳转到的小程序页面。你不能在它前面添加/oh。发布后必须为1024页//小程序代码的边长,以像素为单位,范围[2801280]},标头:{'content-type':“application/json;charset=U...