拖放 showDrop(ev){ 21 ev.preventDefault(); 22 } drag(ev){ ,ev.target.id); 26 } drop(ev){ 29 ev.preventDefault(); ); 31 ev.target.appendChild(document.getElementById(data)); 32 }
拖放效果主要是通过 JS 完成的,下面将对拖放事件的不同部分进行分析。
代码解析:
①、设置元素为可拖放
首先,为了使元素可拖动,把 draggable 属性设置为 true :
draggable 属性用于规定元素是否可拖动,默认值为 auto 使用浏览器的默认特性。当值为 true 时元素是可拖动的,false 则指定元素不可拖动。注意:链接和图像默认是可拖动的。
②、拖动什么 - ondragstart 和 setData()
然后,规定当元素被拖动时,会发生什么。
在上面的例子中,ondragstart 属性调用了一个函数 drag(event),它规定了被拖动的数据。
dataTransfer.setData() 方法设置被拖数据的数据类型和值:
1 function drag(ev){ 2 ev.dataTransfer.setData("Text",ev.target.id); 3 }
在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("demo")。
③、放到何处 - ondragover
ondragover 事件规定在何处放置被拖动的数据。
默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,则必须阻止对元素的默认处理方式。
需要通过调用 ondragover 事件的 event.preventDefault() 方法:
1 function showDrop(ev){ 2 ev.preventDefault(); 3 }
④、进行放置 - ondrop
当放置被拖数据时,会发生 drop 事件。
在上面的例子中,ondrop 属性调用了一个函数,drop(event):
1 function drop(ev){ 2 ev.preventDefault(); 3 var data = ev.dataTransfer.getData("Text"); 4 ev.target.appendChild(document.getElementById(data)); 5 }
代码解析:
①、调用 preventDefault() 来避免浏览器对数据的默认处理,drop 事件的默认行为是以链接形式打开。
②、通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
③、被拖数据是被拖元素的 id ("demo")。
④、把被拖元素追加到放置元素(目标元素)中。
下面的例子,可以在2个 div 之间来回拖放图像:
来回拖放 showDrop(ev){ 24 ev.preventDefault(); 25 } drag(ev){ ,ev.target.id); 29 } drop(ev){ 32 ev.preventDefault(); ); 34 ev.target.appendChild(document.getElementById(data)); 35 }
6、HTML5 Geolocation(地理定位)
HTML5 Geolocation API 用于获得用户的地理位置。
鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。
(1)、使用地理定位
如需定位用户的位置,可以使用 getCurrentPosition() 方法。
下例是一个简单的地理定位例子,可返回用户位置的经度和纬度: