HTML5拖放 拖放(Drag和drop)是H5標準的組成部分 此處需具備js基礎知識及其H5拖拽部分相關方法 下麵來看幾個例子 第一:本地拖放 第二:H5拖放 ...
HTML5拖放
拖放(Drag和drop)是H5標準的組成部分
此處需具備js基礎知識及其H5拖拽部分相關方法
在拖動目標上觸發事件 (源元素):
ondragstart - 用戶開始拖動元素時觸發
ondrag - 元素正在拖動時觸發
ondragend - 用戶完成元素拖動後觸發
釋放目標時觸發的事件:
ondragenter - 當被滑鼠拖動的對象進入其容器範圍內時觸發此事件
ondragover - 當某被拖動的對象在另一對象容器範圍內拖動時觸發此事件
ondragleave - 當被滑鼠拖動的對象離開其容器範圍內時觸發此事件
ondrop - 在一個拖動過程中,釋放滑鼠鍵時觸發此事件
下麵來看幾個例子
第一:本地拖放
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <style type="text/css"> #boxContainer{ background-color: #BC8F8F; width: 600px; height: 400px; } </style> <body> <div id="boxContainer"></div> <div id="msg"></div> <script> var imgContainer,msgDiv; window.onload=function(){ imgContainer=document.getElementById("boxContainer"); msgDiv=document.getElementById("msg"); imgContainer.ondragover=function(e){ e.preventDefault();//阻止事件event預設行為 }; imgContainer.ondrop=function(e){//通過showObj函數顯示信息知道本地圖片拖拽與file信息有關 e.preventDefault(); var f=e.dataTransfer.files[0];//獲取信息 var fileReader=new FileReader();//讀取信息 fileReader.onload=function(e){//通過fileReader監聽事件 showObj(e.target); imgContainer.innerHTML="<img src=\""+fileReader.result+"\">" }; fileReader.readAsDataURL(f);//讀取地址 } }; function showObj(obj){//這個函數只是為了表達在拖放成功後取顯示去盛放拖拽造成的數據信息 var s="";//聲明局部變數 for(var k in obj){//用forin迴圈遍曆數據信息 s+=k+":"+obj[k]+"<br/>" } msgDiv.innerHTML=s;//顯示信息在HTML } </script> </body> </html>
第二:H5拖放
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <style type="text/css"> .box{ width:400px; height:300px; } #box1{ float: left; background-color: orange; } #box2{ float: left; background-color: rosybrown; } </style> <body> <div id="box1" class="box"></div> <div id="box2" class="box"></div> <img id="img1" src="images/demo.jpg" width="200" height="200"/> <div id="msg"></div> <script> var box1Div,box2Div,msgDiv,img1;//聲明全局變數 window.onload=function(){ box1Div=document.getElementById("box1");//獲取放置拖拽元素的div box2Div=document.getElementById("box2"); msgDiv=document.getElementById("msg");//獲取顯示拖拽信息的元素的div img1=document.getElementById("img1"); box1Div.ondragenter=function(e){//給其添加ondragenter即當被滑鼠拖動的對象進入其容器範圍內時觸發此事件,即給拖拽加監聽事件 showObj(e);//e為event事件為事件參數 } box1Div.ondragover=function(e){ e.preventDefault();//阻止事件event預設行為 }; box2Div.ondragover=function(e){//ondragover - 當某被拖動的對象在另一對象容器範圍內拖動時觸發此事件 e.preventDefault();//阻止事件event預設行為,調用 preventDefault() 來避免瀏覽器對數據的預設處理(drop 事件的預設行為是以鏈接形式打開) }; img1.ondragstart=function(e){//ondragstart - 用戶開始拖動元素時觸發 e.dataTransfer.setData("imgId","img1");//用setData方法獲取數據 }; box1Div.ondrop=dropImghand; box2Div.ondrop=dropImghand;//ondrop - 在一個拖動過程中,釋放滑鼠鍵時觸發此事件 }; function dropImghand(e){//box1Div.ondrop=後拿出來設置函數名,即封裝成方法,再在上面引用 showObj(e.dataTransfer); e.preventDefault();//阻止事件event預設行為 //創建節點,放置數據 var img=document.getElementById(e.dataTransfer.getData("imgId")); e.target.appendChild(img);//添加到節點當中 } function showObj(obj){//這個函數只是為了表達在拖放成功後取顯示去盛放拖拽造成的數據信息 var s="";//聲明局部變數 for(var k in obj){//用forin迴圈遍曆數據信息 s+=k+":"+obj[k]+"<br/>" } msgDiv.innerHTML=s;//顯示信息在HTML } </script> </body> </html>