简述:实现拖拽,关键的地方:鼠标抬起(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>

二、总结


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

posted on 2016-08-15 10:39  何红霞  阅读(310)  评论(0编辑  收藏  举报