所有分类
  • 所有分类
  • 后端开发
深入探讨 HTML5 拖拽功能:神奇之处与应用技巧

深入探讨 HTML5 拖拽功能:神奇之处与应用技巧

可拖动dragable属性另外能够让Firefox支持可拖动属性必须添加一个ondragstart事件处理程序,并在dataTransfer对象中保存一些信息才可以。HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员)就

嗨喽大家!让我们开始深入探讨下HTML5里超棒的拖拽功能~上次我们已经初步了解过,接下来就让我们看看它还有哪些神奇之处吧

拖拽功能的默认情况

你听过吗?用HTML5做的网页,连链接、文字和图片都能随便拖动,就像在玩小游戏一样!这样看网页超有意思,使用起来也特方便!如果要让别的东西也能被拖动,得给它加个`draggable=true`属性哈。

设置元素为可拖动

HTML5中的`draggable`功能挺牛逼的,它知道哪个元件能动。想让那个定死不动的`div`动起来?就在它的上面添个字就行了!这个功能对网页设计来说太有用了,想让哪个元素能拖就能拖,用好了,用户体验也会提升!

浏览器的支持情况

虽然不是所有浏览器都能完美支持HTML5的拖拽功能,但像火狐4+、谷歌、微软IE10+和苹果Safari5+等主流浏览器基本上都没问题。但要注意的是,老版本的Opera(低于11.5)不行,所以大家在编写代码时最好考虑到这个因素,保证自己的代码在各种浏览器中运行流畅,这样才能让你的拖拽功能在不同设备上都好用。

特定浏览器的拖拽实现

说起拖拽这事儿,有些浏览器特别,啰嗦,比如火狐得先加个’ondragstart’事件代码,然后把要拖的东西放进去;还有IE9之前的版本,咱们就只能在鼠标按下去的那一下用到’tragDrop()’这个方法。虽然有点儿费劲,但这不正说明了HTML5拖拽功能挺给力吗?

添加拖动元素的方法

你知道吗?HTML5有个超赞的小玩意儿叫‘addElement(element)’,可以让咱们随心所欲地加内容!它主要就是改变拖拽数据的样子,也就是在那个拖拽源的回调对象里加点料,但其实并没真正改变元素本身。不过可惜的是,现在只有火狐浏览器3.5+和苹果浏览器Safari4+才能用上这个神奇的功能。

自定义拖动图标

深入探讨 HTML5 拖拽功能:神奇之处与应用技巧

别着急这里有个特别棒的工具叫`setDragImage(element,x,y)`。它能在拖动时在鼠标下面显示一张图片或HTML元素,让你的操作更有趣。而且,这个功能在Safari4+、Chrome和Firefox3.5+上都能用,让你的拖拽体验更炫酷!

  • a
  • b
  • c
d

数据类型的管理

//dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的
//拖动不带链接的li,会起作用但不跳转链接
//拖动带连接的a,会起作用也跳转
window.onload = function(){
	var aLi = document.getElementsByTagName('li');
	var aA = document.getElementsByTagName('a');
	var op = document.getElementById('p1');
	
	for(var i=0;i<aLi.length;i++){
	
		aLi[i].ondragstart = function(ev){ //拖拽前触发
		
			this.style.background = 'yellow';
			
			ev.dataTransfer.setData('a','hello');  //存储一个键值对 : value值必须是字符串
			
			ev.dataTransfer.effectAllowed = 'all';
			
			ev.dataTransfer.setDragImage(this,0,0);
		
		};
		
		aLi[i].ondragend = function(){  //拖拽结束触发
		
			this.style.background = '';
		
		};
	}
	for(var i=0;i<aA.length;i++){
	
		aA[i].ondragstart = function(ev){ //拖拽前触发
		
			this.style.background = 'yellow';
			
			ev.dataTransfer.setData('a','hello');  //存储一个键值对 : value值必须是字符串
			
			ev.dataTransfer.effectAllowed = 'link';
			
		
		};
		
		aA[i].ondragend = function(){  //拖拽结束触发
		
			this.style.background = '';
		
		};
	}
	
	op.ondragenter = function(){  //相当于onmouseover
		
		this.style.background = 'green';
		
	};
	
	op.ondragleave = function(){  //相当于onmouseout
		
		this.style.background = 'red';
		
	};
	
	op.ondragover = function(ev){ //进入目标、离开目标之间,连续触发
		
		ev.preventDefault();  //阻止默认事件:元素就可以释放了
		
		ev.dataTransfer.dropEffect = 'link';  //真对外部文件
		
	};
	
	op.ondrop = function(ev){  //释放鼠标的时候触发
	
		this.style.background = 'red';	
	
		alert( ev.dataTransfer.getData('a') );
		alert( ev.dataTransfer.types );
	
	};
	
};

听过么?’Types’就像是个大口袋,什么类型的数据都能塞进去,像咱们平时看到的那种纯文本形式的”text”,也包括。用这个东西,无论是Chrome、Firefox3.5+还是IE10+浏览器,想怎么拖拽就怎么拖拽,轻轻松松就能搞定数据管理和控制!

实际应用案例

//dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的
window.onload = function(){
	var op = document.getElementById('p1');
	
	
	
	
	op.ondragenter = function(){  //相当于onmouseover
		
		this.style.background = 'green';
		
	};
	
	op.ondragleave = function(){  //相当于onmouseout
		
		this.style.background = 'red';
		
	};
	
	op.ondragover = function(ev){ //进入目标、离开目标之间,连续触发
		
		ev.preventDefault();  //阻止默认事件:元素就可以释放了
		
		ev.dataTransfer.dropEffect = 'link';  //真对外部文件
		
	};
	
	op.ondrop = function(ev){  //释放鼠标的时候触发
	
		ev.preventDefault();  //阻止默认行为
	
		this.style.background = 'red';	
		
		var oFR = new FileReader();
	
		var list = ev.dataTransfer.files;  //当前拖拽的那个文件(返回的一个文件列表)
		
		//alert(list.length);
		
		//type : 文件类型
		
		//alert(list[0].type);
		
		
		oFR.onload = function(){ //读取完成,触发事件
			
			alert(this.result);  // 读取到的信息
			
		};
		
		oFR.readAsDataURL(list[0]);
	
	};
	
};

别小看这个拖拽功能,它可不是单纯的炫技,用着真的很顺手,比如说你可以随手将电脑桌面上的文件拖到浏览器里,省去了上传的繁琐步骤。人们都觉得这种简单又好用的操作特别酷,这也是HTML5拖拽功能受欢迎的原因之一。

li{ width:100px; height:30px; border:1px #000000 solid; margin:20px; list-style:none;}
#p1{ width:100px; height:100px; background:red; margin:300px;}

听说你们觉得HTML5的拖拽功能好厉害是不是?这玩意儿就像个贴心小助手,让网页更有趣味性和易懂,用户体验也会提升不少。学会后好好利用,肯定能给用户带来不一样的上网体验!看完这篇文章,希望你们有所收获。有啥问题或者想聊什么话题,就在评论区告诉我哈;别忘了点赞分享,让更多人知道HTML5拖拽的神奇之处!

梦龙小站

原文链接:https://www.icz.com/technicalinformation/web/javascript/2024/06/16829.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?