html5拖拽
一. 頁面內元素拖放
屬性draggable,設定為true,元素可以拖放。
拖放事件
拖拽元素事件:事件物件為被拖拽元素
- dragstart,拖拽前觸發
- drag,拖拽前到拖拽結束之間連續觸發
- dragend,拖拽結束觸發
目標元素事件:事件物件為目標元素
- dragenter,進入目標元觸發
- dragover,進入目標到離開目標之間連續觸發
- dragleave,離開目標元素觸發
- drop,在目標元素上釋放滑鼠觸發
火狐下必須設定dataTransfer物件的setData方法才可以拖拽除圖片外的其他標籤
dataTransfer物件
setData():設定資料key和value(必須是字串)
getData():獲取資料,根據key值,獲取對應的value
effectAllowed:設定游標樣式(none,copy,copyLink,copyMove,link,linkMove,move,all和uninitialized)
setDragImage:三個引數:指定的元素,座標X,座標Y
<style>
#ul1 {list-style:none;}
#ul1 li {width:100px; height:20px;background:gray; display:block; margin:10px;}
#div1 {width:100px;height:100px; background:pink;margin:100px auto;}
</style>
<body>
<ul id ="ul1">
<li draggable="true">a</li>
<li draggable="true">b</li>
<li draggable="true">c</li>
</ul>
<div id = "div1">
</div>
<script>
var oUl = document.getElementById("ul1");
var oli = document.getElementsByTagName("li");
var oDiv = document.getElementById("div1");
for(var i = 0; i < oli.length; i++)
{
oli[i].index = i;
oli[i].ondragstart = function(ev)
{
var ev = ev || window.event;
this.style.background = "blue";
for(var i = 0; i < oli.length; i++)
{
oli[i].index = i;
}
console.log(this.index);
ev.dataTransfer.setData("index", this.index);
}
var num = 0;
oli[i].ondrag = function() //在開始和結束之間一直執行
{
document.title = num++;
}
oli[i].ondragend = function()
{
this.style.background = "gray";
}
}
oDiv.ondragenter = function()
{
this.style.background = "red";
}
oDiv.ondragover = function(ev)
{
var ev = ev||window.event;
//要想觸發drop事件,必須在dragover中阻止預設事件
ev.preventDefault();
}
oDiv.ondragleave = function()
{
this.style.background = "pink";
}
oDiv.ondrop = function(ev)
{
ev = ev || window.event;
this.style.background = "pink";
alert(ev.dataTransfer.getData("index"));
if(oUl.hasChildNodes()) //當ul下還存在子節點時
{
oUl.removeChild(oli[ev.dataTransfer.getData("index")]);
}
}
</script>
</body>
二. 外部檔案拖放
dataTransfer物件的files
獲取外部拖拽的檔案,返回一個filesList列表,filesList下有個type屬性,返回檔案的型別。
FileReader(讀取檔案資訊)
- readAsDataURL:引數為要讀取的檔案物件,將檔案讀取為DataUrl
- onload
當讀取檔案成功完成的時候觸發
this.result,來獲取讀取的檔案資料,如果是圖片,將返回base64格式的圖片資料
<style type="text/css">
#div1{
width: 200px;
height: 200px;
margin: 100px auto;
background: red;
}
</style>
<body>
<div id="div1">將檔案拖放至此區域</div>
<ul id="ul1"></ul>
<script type="text/javascript">
var oDiv = document.getElementById("div1");
var oUl = document.getElementById("ul1");
oDiv.ondragenter = function()
{
this.innerHTML = "滑鼠可以釋放";
}
oDiv.ondragleave = function()
{
this.innerHTML = "將檔案拖放至此區域";
}
oDiv.ondragover = function(ev)
{
var ev = ev || window.event;
ev.preventDefault();
}
oDiv.ondrop = function(ev)
{
var ev = ev || window.event;
ev.preventDefault();
var fs = ev.dataTransfer.files;
alert(fs[0].type);
var fd = new FileReader();
fd.readAsDataURL(fs[0]);
fd.onload = function()
{
// alert(this.result);
var li = document.createElement("li");
var img = document.createElement("img");
img.src = this.result;
li.appendChild(img);
oUl.appendChild(li);
}
}
</script>
</body>
相關文章
- HTML5拖拽API實現vue樹形拖拽元件HTMLAPIVue元件
- HTML5 Drag和Drop 拖拽HTML
- HTML5 拖拽教程前言HTML
- HTML5 拖拽程式碼例項HTML
- HTML5 drag & drop 拖拽與拖放HTML
- HTML5拖拽檔案上傳HTML
- HTML5原生拖拽/拖放 Drag & Drop 詳解HTML
- Vue結合HTML5拖放API 實現目錄拖拽~VueHTMLAPI
- 快速開發 HTML5 WebGL 的 3D 斜面拖拽生成模型HTMLWeb3D模型
- WIX:html5拖拽式建站,個人建站首選,操作方便快捷HTML
- Vue 結合 echarts 原生 html5 實現拖拽排版報表系統VueEchartsHTML
- 視覺化拖拽 UI 佈局之拖拽篇視覺化UI
- JavaScript拖拽效果JavaScript
- 滑鼠拖拽事件事件
- js拖拽技能JS
- React拖拽元件React元件
- 從面相過程的拖拽到物件導向的拖拽再到簡易的元件拖拽物件元件
- js拖拽:右下角拖拽改變圖片大小JS
- 詳解javascript拖拽(二)拖拽的應用及示例JavaScript
- 基於Vue實現拖拽升級(九宮格拖拽)Vue
- 原生JS拖拽效果JS
- drag &drop 拖拽事件事件
- drag & drop 拖拽事件事件
- sortable 可拖拽元件元件
- 自定義拖拽效果
- SystemUI 拖拽事件分析SystemUI事件
- canvas矩形拖拽效果Canvas
- 小程式拖拽排序排序
- JQuery UI 拖拽排序jQueryUI排序
- Cypress實現拖拽
- Flutter 拖拽排序元件 ReorderableListViewFlutter排序元件View
- 拖拽加點ui吧UI
- JavaScript 拖拽限定範圍JavaScript
- Drag & Drop 拖拽詳解
- react拖拽元件調研React元件
- Android拖拽詳解Android
- 按鈕拖拽移動
- Draggable 拖拽例項