HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员)

 可拖动dragable属性

  之前我们已经为大家介绍过几篇有关HTML5中原生拖拽的相关知识了。今天为大家介绍HTML5拖拽中的其他一些小东东,闲话不多说赶快一起看看吧。

  在默认情况下,链接、文本和图像是可以拖动的,不用再写代码即可拖动。如果想让其他元素标签也可以拖动,那么只有HTML5能实现了。HTML5为所有HTML元素规定了dragable属性,表示元素是否可以拖动。链接和图像的标签中自动将dragable属性自动被设置成true,其他元素的dragable属性的默认值是false。

  支持dragable属性的浏览器有:Firefox
4+、Chrome、IE 10+和Safari 5+。Opera
11.5及之前的版本是不支持HTML5的拖放功能。另外能够让Firefox支持可拖动属性必须添加一个ondragstart事件处理程序,并在dataTransfer对象中保存一些信息才可以。在IE
9及更早版本中,通过mousedown事件处理程序调用dragDrop()方法能够让任何元素可以拖动。在Safari
4及更早的版本中,必须额外给相应的元素设置CSS样式 -khtml-user-drag: element才可以拖动。

  HTML5拖拽其他成员

  之前介绍过有关dataTransfer对象的一些属性,但是并不是很全。下面的一些方法和属性是其中有可能漏掉的属性和方法。

  addElement(element):为拖动操作添加一个元素。添加这个元素只影响数据(即增加作为拖动源而响应回调的对象),不会影响拖动操作时页面元素的外观。直到写这篇博客的时候,只有Firefox
3.5+实现这种方法了。

  clearData(format):清除以特定格式保存的数据。实现这个方法的浏览器有Firefox
3.5+、Safari 4+、IE和Safari 4+。

  setDragImge(element, x,
y):指定一幅图像,当拖动发生的时候,显示在光标下方。这个方法接收的参数有三个分别是:要显示的HTML元素和光标在图像中的x、y坐标。其中,HTML元素可以是一幅图像,也可以是其他元素。是图像的话就显示图像,是其他元素的话就显示渲染后的元素。支持的浏览器有:Safari
4+、Chrome和Firefox 3.5+。

  Types:当前保存的数据类型。这个是一个类似数组的集合,以”text”这样的字符串形式保存着数据类型。支持的浏览器有:Chrome、Firefox
3.5+和IE 10+。

  了解过了一些理论知识,接下来一个小例子让大家更加加深理解。

  dragable属性及其他成员小例子

  HTML代码

view
source
print?

01.[html] view plaincopyprint?

02.

03.<ul

04.<li draggable="true">a</li

05.<li draggable="true">b</li

06.<li draggable="false">c</li

07.</ul

08.<a href="http://www.baidu.com/">d</a

09.<div id="div1"></div>

  CSS代码

view
source

print?

1.[css] view plaincopyprint?

2.

3.li{ width:100pxheight:30pxborder:1px #000000 solidmargin:20pxlist-style:none;} 

4.#div1width:100pxheight:100pxbackground:redmargin:300px;} 

  JavaScript代码

view
source

print?

01.[javascript] view plaincopyprint?

02.

03.//dataTransfer对象(昆明国防路医院) : 连接拖拽细节的 ,在event对象下面的 

04.//拖动不带链接的li,会起作用但不跳转链接 

05.//拖动带连接的a,会起作用也跳转 

06.

07.window.onload = function(){ 

08.var aLi = document.getElementsByTagName(‘li‘); 

09.var aA = document.getElementsByTagName(‘a‘); 

10.var oDiv = document.getElementById(‘div1‘); 

11.

12.for(var i=0;i<aLi.length;i++){ 

13.

14.aLi[i].ondragstart = function(ev){ //拖拽前触发 

15.

16.this.style.background = ‘yellow‘

17.

18.ev.dataTransfer.setData(‘a‘,‘hello‘);  //存储一个键值对 : value值必须是字符串 

19.

20.ev.dataTransfer.effectAllowed = ‘all‘

21.

22.ev.dataTransfer.setDragImage(this,0,0); 

23.

24.}; 

25.

26.aLi[i].ondragend = function(昆明国防路医院){  //拖拽结束触发 

27.

28.this.style.background = ‘‘

29.

30.}; 

31.

32.for(var i=0;i<aA.length;i++){ 

33.

34.aA[i].ondragstart = function(ev){ //拖拽前触发 

35.

36.this.style.background = ‘yellow‘

37.

38.ev.dataTransfer.setData(‘a‘,‘hello‘);  //存储一个键值对 : value值必须是字符串 

39.

40.ev.dataTransfer.effectAllowed = ‘link‘

41.

42.

43.}; 

44.

45.aA[i].ondragend = function(){  //拖拽结束触发 

46.

47.this.style.background = ‘‘

48.

49.}; 

50.

51.

52.oDiv.ondragenter = function(){  //相当于onmouseover 

53.

54.this.style.background = ‘green‘

55.

56.}; 

57.

58.oDiv.ondragleave = function(){  //相当于onmouseout 

59.

60.this.style.background = ‘red‘

61.

62.}; 

63.

64.oDiv.ondragover = function(ev){ //进入目标、离开目标之间,连续触发 

65.

66.ev.preventDefault();  //阻止默认事件:元素就可以释放了 

67.

68.ev.dataTransfer.dropEffect = ‘link‘;  //真对外部文件 

69.

70.}; 

71.

72.oDiv.ondrop = function(ev){  //释放鼠标的时候触发 

73.

74.this.style.background = ‘red‘;   

75.

76.alert( ev.dataTransfer.getData(‘a‘) ); 

77.alert( ev.dataTransfer.types ); 

78.

79.}; 

80.

81.}; 

  桌面拖拽到页面中的小例子

  HTML代码

view
source

print?

01.[javascript] view plaincopyprint?

02.

03.//dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的 

04.

05.window.onload = function(){ 

06.

07.var oDiv = document.getElementById(‘div1‘); 

08.

09.

10.

11.

12.oDiv.ondragenter = function(){  //相当于onmouseover 

13.

14.this.style.background = ‘green‘; 

15.

16.}; 

17.

18.oDiv.ondragleave = function(){  //相当于onmouseout 

19.

20.this.style.background = ‘red‘; 

21.

22.}; 

23.

24.oDiv.ondragover = function(ev){ //进入目标、离开目标之间,连续触发 

25.

26.ev.preventDefault();  //阻止默认事件:元素就可以释放了 

27.

28.ev.dataTransfer.dropEffect = ‘link‘;  //真对外部文件 

29.

30.}; 

31.

32.oDiv.ondrop = function(ev){  //释放鼠标的时候触发 

33.

34.ev.preventDefault();  //阻止默认行为 

35.

36.this.style.background = ‘red‘;   

37.

38.var oFR = new FileReader(); 

39.

40.var list = ev.dataTransfer.files;  //当前拖拽的那个文件(返回的一个文件列表) 

41.

42.//alert(list.length); 

43.

44.//type : 文件类型 

45.

46.//alert(list[0].type); 

47.

48.

49.oFR.onload = function(){ //读取完成,触发事件 

50.

51.alert(this.result);  // 读取到的信息 

52.

53.}; 

54.

55.oFR.readAsDataURL(list[0]); 

56.

57.}; 

58.

59.}; 

  CSS代码

view
source

print?

1.[css] view plaincopyprint?

2.

3.li{ width:100pxheight:30pxborder:1px #000000 solidmargin:20pxlist-style:none;} 

4.#div1width:100pxheight:100pxbackground:redmargin:300px;} 

  JavaScript代码

view
source

print?

1.[html] view plaincopyprint?

2.

3.<div id="div1">梦龙小站</div>

  垃圾箱删除小例子

  HTML代码

view
source

print?

1.[html] view plaincopyprint?

2.

3.<ul

4.<li draggable="true">a</li

5.<li draggable="true">b</li

6.<li draggable="true">c</li

7.</ul

8.<div id="div1">垃圾箱</div

  CSS代码

view
source

print?

1.[css] view plaincopyprint?

2.

3.li{ width:100pxheight:30pxborder:1px #000000 solidmargin:20pxlist-style:none;} 

4.#div1width:100pxheight:100pxbackground:redmargin:300pxcolor:white;} 

  JavaScript代码

  1. view
    source

    print?

    01.[javascript] view plaincopyprint?

    02.

    03.//dataTransfer对象 : 连接拖拽细节的 ,在event对象下面的 

    04.

    05.window.onload = function(){ 

    06.var aLi = document.getElementsByTagName(‘li‘); 

    07.var oDiv = document.getElementById(‘div1‘); 

    08.var iNow = 0; 

    09.

    10.var targetLi = null

    11.

    12.for(var i=0;i<aLi.length;i++){ 

    13.

    14.aLi[i].ondragstart = function(ev){ //拖拽前触发 

    15.

    16.this.style.background = ‘yellow‘

    17.

    18.ev.dataTransfer.setData(‘text‘,this.innerHTML);  //存储一个键值对 : value值必须是字符串 

    19.

    20.targetLi = this

    21.

    22.}; 

    23.

    24.aLi[i].ondragend = function(){  //拖拽结束触发 

    25.

    26.this.style.background = ‘‘

    27.

    28.}; 

    29.

    30.

    31.oDiv.ondragenter = function(){  //相当于onmouseover 

    32.

    33.this.style.background = ‘green‘

    34.

    35.}; 

    36.

    37.oDiv.ondragleave = function(){  //相当于onmouseout 

    38.

    39.this.style.background = ‘red‘

    40.

    41.}; 

    42.

    43.oDiv.ondragover = function(ev){ //进入目标、离开目标之间,连续触发 

    44.

    45.ev.preventDefault();  //阻止默认事件:元素就可以释放了 

    46.

    47.

    48.}; 

    49.

    50.oDiv.ondrop = function(ev){  //释放鼠标的时候触发 

    51.

    52.this.style.background = ‘red‘;   

    53.

    54.var oText = ev.dataTransfer.getData(‘text‘); 

    55.

    56.if(targetLi){ 

    57.targetLi.parentNode.removeChild(targetLi); 

    58.this.innerHTML = ‘删除的是:‘+oText; 

    59.

    60.

    61.}; 

    62.

    63.}; 

HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员),布布扣,bubuko.com

时间: 2024-12-05 08:33:32

HTML5实战与剖析之原生拖拽(四可拖动dragable属性和其他成员)的相关文章

HTML5实战与剖析之媒体元素(4、检测编解码器的支持和Audio构造函数)

HTML5媒体元素检测编解码器的支持情况 虽然媒体元素可以实现音频和视频功能,但是并不是所有浏览器都支持video标签和audio标签的所有编解码器,这意味着开发人员必须提供很多歌媒体来源.在JavaScript API中能够检测浏览器是否支持某种格式和编解码器.这两个媒体元素都有一个canPlayType()方法,该方法接收一种格式/编解码器字符串,返回"probably"."maybe"或者""(空字符串).空字符串是假值,而"pr

HTML5实战与剖析之历史管理(history对象)

HTML5新添加了对历史的管理,更新了history对象让管理历史状态更加方便了.在现代Web应用中,用户可以通过"前进"和"后退"按钮进行历史页面的切换.这让一些不在新页面中打开的新页面前进后退自如,提高了用户体验. 通过haschange事件,可以知道URL的参数什么时候发生了变化,也就是什么时候该有所反应.通过状态管理的API,能够在不加载新页面的情况下改变浏览器的URL.所以需要使用history.pushState()方法.history.pushStat

HTML5实战与剖析之媒体元素(3、媒体元素的事件及方法)

HTML5中的媒体元素除了拥有非常多的属性之外,video标签和audio标签还能够出发非常多事件和方法. 这些方法监控着不同的属性的变化,这些变化有可能是媒体播放的结果,也可能是用户操作媒体的结果. 以下就为大家開始介绍媒体元素的相关事件. abort:触发时机是下载中断. canplay:在能够播放的时候,readyState的值为2的时候触发. canplaythrough:readyState的值为3的时候,触发.播放能够继续,而应该不会中断的时候触发. canshowcurrentfr

原生拖拽,拖放事件(drag and drop)

原生拖拽,拖放事件(drag and drop) 拖拽,拖放事件可以通过拖拽实现数据传递,达到良好的交互效果,如:从操作系统拖拽文件实现文件选择,拖拽实现元素布局的修改. drag and drop事件流程 一个完整的drag and drop流程通常包含以下几个步骤: 设置可拖拽目标.设置属性draggable="true"实现元素的可拖拽. 监听dragstart设置拖拽数据 为拖拽操作设置反馈图标(可选) 设置允许的拖放效果,如copy,move,link 设置拖放目标,默认情况

HTML5实战与剖析之WebSockets简介

HTML5 WebSockets规范定义了一个API,允许web页面使用WebSockets协议与远程主机双向沟通.介绍了WebSocket接口,并定义了一种全双工通信通道,通过一个套接字在网络上.HTML5 WebSockets提供极大的减少了不必要的网络流量和延迟而不能攀登的轮询和长轮询的解决方案是用来模拟全双工连接通过维护两个连接. HTML5 WebSockets账户代理和防火墙等网络危害,使得流媒体可以在任何连接,和能够支持在单个连接上游和下游的通信,HTML5 WebSockets-

HTML5实战与剖析之Web存储机制(Web Storage)

Web Storage是以Key-Value的形式进行数据持久性存储.Web Storage是为了克服由cookie带来的一些限制而产生的.当数据需要被严格控制在客户端上的时候,无须持续地将数据发回服务器.Web Storage的目标有两个:提供一种存储会话数据的路径;提供存储大量可以跨会话存在的数据的机制. 最初的Web Storage规范包含了两个对象的定义:sessionStorage对象和globalStorage对象.这两个对象在支持的浏览器中都是以window对象属性的形式存在,支持

HTML5实战与剖析之媒体元素

随着HTML5的到来,flash在手机端全部不能得到支持,这就使一项以flash制作的音乐播放和视频播放只能用HTML5中的媒体标签video标签和audio标签来制作了.很恰巧的是,移动端对HTML5中的媒体标签video标签和audio标签支持的非常好.这就使HTML5在移动端很流行. video标签和audio标签也提供了很实用的JavaScript API,允许创建自定义的控件.两个标签的用法如下. HTML代码 view source print? 1.<!-- 视频标签 --> 2

HTML5实战与剖析之classList属性

classList属性究竟是干什么的,我们先撇下classList不管.我们考虑这么一个问题,那就是我们如何将拥有多个类名的元素中的其中一个类名删除呢?梦龙较劲脑汁儿终于想到一个实现的方法.将拥有类名li.meng和long,三个类名中的类名meng删除.代码如下 HTML代码 view source print? 1.<div class="li meng long">梦龙小站</div> JavaScript代码 view source print? 01.

HTML5实战与剖析之媒体元素(6、视频实例)

HTML5中的视频标签和及其模仿视频播放器的效果在一些手机端应用比较多.因为手机端基本上废除了flash的独断,让HTML5当家做主人,所以对视频支持的比较好.所以今天专门为大家奉上HTML5视频标签模拟视频播放器的小例子,让大家更好的理解HTML5和有效的应用在项目中. HTML代码 <!-- src中放上本地的ogv的音频 --> <video id="v1" src="Intermission-Walk-in.ogv"></vid