手机端touch事件实现元素拖拽效果 2

经上次的手机端拖拽事件,再次经过完善修改,加入了元素不能拖出屏幕范围功能,并做了一个小的函数接口

ps:经落雨大神指点。

代码如下:

            var touchEvent = (function(){

			var oDiv = document.getElementsByTagName(‘div‘)[0],   //获取可拖动元素
				oIpt = document.getElementsByTagName(‘input‘)[0],    	//记录拖动元素位置
				oIpt1 = document.getElementsByTagName(‘input‘)[1];     //记录触点位置  

			var touchSatrtFunc,touchMoveFunc,getTouchEvent;   

			var _this = this;     

		    var opinion = {      //所需变量集
				oDiv : oDiv,
				oIpt : oIpt,
				oIpt1 : oIpt1,
				startX : "",
		    	startY : "",
		    	startPositionX : "",
		    	startPositionY : "",
		    	elemWidth : "",
		    	elemHeight : "",
		    	byWidth : "",
		    	byHeight : ""
			}

			//触摸点下事件
			touchSatrtFunc = function(e){
				e.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
			    var touch = e.touches[0]; //获取第一个触点
			    var x = Number(touch.pageX); //页面触点X坐标
			    var y = Number(touch.pageY); //页面触点Y坐标
			    //记录触点初始位置
			    startX = x;
			    startY = y;

			    //可拖动元素距离页面顶部的距离
			    startPositionY = oDiv.offsetTop;
			    //可拖动元素距离页面左侧的距离
			    startPositionX = oDiv.offsetLeft;
			    //可拖动元素的宽度
			    elemWidth = oDiv.offsetWidth;
			    //可拖动元素的高度
			    elemHeight = oDiv.offsetHeight;
			    //网页可见区域宽
			    byWidth = document.documentElement.clientWidth ;
			    //网页可见区域高
			    byHeight = document.documentElement.clientHeight  ;
			}

			//触摸点下移动事件
			touchMoveFunc = function(e){
				e.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
			    var touch = e.touches[0]; 	//获取第一个触点
			    var x = Number(touch.pageX); //页面触点X坐标
			    var y = Number(touch.pageY); //页面触点Y坐标 

			    var fnyTop = startPositionY + (y-startY),
			    	fnyLeft = startPositionX + (x-startX);

			    oIpt.value = "元素位置:" +startPositionX +":"+startPositionY;
			    oIpt1.value = "触点位置:" +x +":"+y;

			    //判断移动到边缘情况
			    if(fnyLeft <= 0){
			    	oDiv.style.left = 0;

			    	if(fnyTop <= 0){
			    		oDiv.style.top = 0;
			    	}else if(fnyTop > 0 && fnyTop < (byHeight - elemHeight) ){
			    		oDiv.style.top = fnyTop + ‘px‘;
			    	}else if(fnyTop >= (byHeight - elemHeight) ){
			    		oDiv.style.top = byHeight - elemHeight + ‘px‘;
			    	}
			    }else if(fnyLeft >= (byWidth - elemWidth) ){
			    	oDiv.style.left = byWidth - elemWidth + ‘px‘;

			    	if(fnyTop <= 0){
			    		oDiv.style.top = 0;
			    	}else if(fnyTop > 0 && fnyTop < (byHeight - elemHeight) ){
			    		oDiv.style.top = fnyTop + ‘px‘;
			    	}else if(fnyTop >= (byHeight - elemHeight) ){
			    		oDiv.style.top = byHeight - elemHeight + ‘px‘;
			    	}
			    }else if(fnyLeft > 0 &&  fnyLeft < (byWidth - elemWidth) ){
			    	oDiv.style.left = fnyLeft + ‘px‘;

			    	if(fnyTop <= 0){
			    		oDiv.style.top = 0;
			    	}else if(fnyTop > 0 && fnyTop < (byHeight - elemHeight) ){
			    		oDiv.style.top = fnyTop + ‘px‘;
			    	}else if(fnyTop >= (byHeight - elemHeight) ){
			    		oDiv.style.top = byHeight - elemHeight + ‘px‘;
			    	}
		     	}
			}

			var touchs = function(){
				oDiv.addEventListener(‘touchstart‘,touchSatrtFunc,false);
    			oDiv.addEventListener(‘touchmove‘,touchMoveFunc,false);
			}

			return {
				getTouch:touchs,
				touchSatrtFunc : touchSatrtFunc,
				touchMoveFunc : touchMoveFunc
			}
	    })();

  调用此方法时只需加入  touchEvent.getTouch();  即可

然而此代码还有局限性,目前需要去原js中修改所需要的拖动的元素

时间: 2024-10-27 00:01:47

手机端touch事件实现元素拖拽效果 2的相关文章

手机端touch事件 jquery模拟

ontouchstart实现手机触屏中的hover效果 ontouchstart实现手机触屏中的hover效果 最近一直都在做手机网站的项目,会经常遇到手机屏幕触摸无交互效果,今天在一篇文章中看到模拟网页端hover效果的例子拿出来和大家分享下,已经使用效果还不错,大家可以根据下面的案例学下: 一.css样式: <style type="text/css">.inner { width: 100%; height: 100px; position: relative; }.

WPF中元素拖拽的两个实例

原文:WPF中元素拖拽的两个实例 今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结,这里主要用两个例子来说明在WPF中如何使用拖拽进行操作,元素拖拽是一个常见的操作,第一个拖拽的例子是将ListBox中的子元素拖拽到ListView的某一个节点,从而将该子元素作为当前节点的子节点.第二个例子就是将ListView的某一项拖拽到另外一项上从而使两个子项位置互换,这两个例子的原理类似,实现细节上有所差别,下面就具体分析一下这些细节. DEMO1 一 示例截图 图一 示例一截图 二 重点原理分

学习笔记---Javascript事件Event、IE浏览器下的拖拽效果

学习笔记---Javascript事件Event.IE浏览器下的拖拽效果     1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcElement(触发事件的事件源对象)和attachEvent("onclick",function(){...}); 2. a. 实现拖放(Drag and Drop): 目前支支持IE, 若定制某对象为可拖放对象, 则必须覆盖目标对象的dragenter和dragover事件, 可以用e

Selenium - 实现网页元素拖拽

Drag and Drop, 使用鼠标实现元素拖拽的操作貌似很复杂, 在Selenium中, 借助OpenQA.Selenium.Interactions.Actions类库中提供的方法, 实现起来还是比较简单的.道理如下: 1. 找到要拖拽的页面元素-源(source). 2. 找到要释放的页面元素-目标(target), 页面显示的这个元素可能是个坑, 但是在页面代码中他就是一个元素. 3. 借助(new Actions(IWebDriver)).DragAnddrop( source, t

JS 鼠标事件练习—拖拽效果

拖拽效果 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>拖拽效果</title> <link rel="stylesheet" type="text/css" href="拖拽效果.css"> </head> <body> <div

jquery监听事件on写法以及简单的拖拽效果

引子——关于jquery的某些写法 我先不对监听事件做解释,我们先来看下jquery的一些写法吧!我们最常用的是jquery的css()方法,相信大家都会用! 假如用css设置一个属性,我们写法如下: $("#haorooms").css("width","100px"); 假如多个属性呢?我们写法如下: $(".demo").css({"height":"100px","ba

Android DragAndDrop API 拖拽效果 交换ListView的Item值

前言 Android系统自API Level11开始添加了关于控件拖拽的相关API,可以方便的实现控件的一些拖拽效果,而且比自己用Touch事件写的效果更好.下面就来看下DragAndDrop吧. 使用Android的DragAndDrop框架,我们可以方便的在当前布局中用拖拽的形式实现两个View之间数据的互换.DragAndDrop框架包括一个拖拽事件的类,拖拽监听器,以及一些帮助方法和类. 尽管DragAndDrop主要是为了数据移动而设计,但是我们也可用他做别的UI处理.举个例子,我们可

简单的鼠标拖拽效果(原生js实现)

之前在聊天群里看到有人说面试的时候被问到了怎样实现一个拖拽效果,当时看到后在心里默默思考了下,结果发现好像我也写不出来啊.本着遇到一个解决一个的思想,就亲自敲了一个,看到张鑫旭大神写的代码,真的很厉害,多多学习了,(感觉随便搜一个关于前端方面的问题都能看到他的网站,真是太佩服了,写了那么多文章,十分感谢.)好了,接下来就进入正题了.想实现一个效果首先得明白其中的逻辑,知道了实现逻辑后,就可以码代码了.首先我实现的效果是: 鼠标按下后,才可以执行后续效果 鼠标已经按下,然后鼠标移动,需要拖拽的元素

js拖拽效果实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head>    <meta