亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > html5指南-3.如何實現html元素拖拽功能

html5指南-3.如何實現html元素拖拽功能

熱門標簽:標準智能外呼系統 地圖標注自己去過的地方 會聲會影怎樣做地圖標注效果 洛陽市伊川縣地圖標注中心官網 江蘇高頻外呼系統線路 電銷機器人視頻 高德地圖標注錯誤怎么修改 平頂山電子地圖標注怎么修改 搜狗星級酒店地圖標注
本文的內容是關于在html5中如何實現html元素拖拽功能。在html5之前要實現拖拽,需要借助js,現在html5內部就支持了拖拽的功能,但是要實現稍微復雜的功能還是少不了js的幫忙。下面我們看幾個例子。
1.創建拖拽對象
我們可以通過draggable屬性告訴瀏覽器,哪些元素需要實現拖拽功能。draggable有三個值:true:元素可以被拖拽;false:元素不能被拖拽;auto:瀏覽器自己判斷元素是否能被拖拽。
系統默認值是auto,但auto情況下瀏覽器對不同元素拖拽功能的支持是不一樣,如:支持img對象,不支持div對象。所以,如果需要拖拽一個元素,最好還是把draggale設置為true。下面我們看一個例子:

復制代碼
代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style>
#src > *
{
float: left;
}
#target, #src > img
{
border: thin solid black;
padding: 2px;
margin: 4px;
}
#target
{
height: 123px;
width: 220px;
text-align: center;
display: table;
}
#target > p
{
display: table-cell;
vertical-align: middle;
}
#target > img
{
margin: 1px;
}
</style>
</head>
<body>
<div id="src">
<img draggable="true" id="car1" src="img/1.jpg" alt="car1" />
<img draggable="true" id="car2" src="img/2.jpg" alt="car2" />
<img draggable="true" id="car3" src="img/3.jpg" alt="car3" />
<div id="target">
<p id="msg">
drop here</p>
</div>
</div>
<script>
var src = document.getElementById("src");
var target = document.getElementById("target");
</script>
</body>
</html>

運行效果:


2.處理拖拽事件
現在我們來了解拖拽相關的事件,有兩種類型的事件,一種是拖拽對象的事件,一種是投放區的事件。拖拽事件包括:dragstart:當元素拖拽開始觸發;drag:在元素拖拽過程中觸發;dragend:元素拖拽結束時觸發。下面我們就看一個例子:

復制代碼
代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style>
#src > *
{
float: left;
}
#target, #src > img
{
border: thin solid black;
padding: 2px;
margin: 4px;
}
#target
{
height: 123px;
width: 220px;
text-align: center;
display: table;
}
#target > p
{
display: table-cell;
vertical-align: middle;
}
#target > img
{
margin: 1px;
}
img.dragged
{
background-color: Orange;
}
</style>
</head>
<body>
<div id="src">
<img draggable="true" id="car1" src="img/1.jpg" alt="car1" />
<img draggable="true" id="car2" src="img/2.jpg" alt="car2" />
<img draggable="true" id="car3" src="img/3.jpg" alt="car3" />
<div id="target">
<p id="msg">
drop here</p>
</div>
</div>
<script>
var src = document.getElementById("src");
var target = document.getElementById("target");
var msg = document.getElementById("msg");
src.ondragstart = function (e) {
e.target.classList.add("dragged");
}
src.ondragend = function (e) {
e.target.classList.remove("dragged");
msg.innerHTML = "drop here";
}
src.ondrag = function (e) {
msg.innerHTML = e.target.id;
}
</script>
</body>
</html>

運行效果:


3.創建投放區
我們來看投放區相關的事件:dragenter:當拖拽對象進入投放區時觸發;dragover:拖拽對象在投放區內移動時觸發;dragleave:拖拽對象沒有投放到投放區,離開投放區的時候觸發;drop:拖拽對象投放在投放區時觸發。
我們來看一個例子:

復制代碼
代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style>
#src > *
{
float: left;
}
#target, #src > img
{
border: thin solid black;
padding: 2px;
margin: 4px;
}
#target
{
height: 123px;
width: 220px;
text-align: center;
display: table;
}
#target > p
{
display: table-cell;
vertical-align: middle;
}
#target > img
{
margin: 1px;
}
img.dragged
{
background-color: lightgrey;
}
</style>
</head>
<body>
<div id="src">
<img draggable="true" id="car1" src="img/1.jpg" alt="car1" />
<img draggable="true" id="car2" src="img/2.jpg" alt="car2" />
<img draggable="true" id="car3" src="img/3.jpg" alt="car3" />
<div id="target">
<p id="msg">
drop here</p>
</div>
</div>
<script>
var src = document.getElementById("src");
var target = document.getElementById("target");
var msg = document.getElementById("msg");
var draggedID;
target.ondragenter = handleDrag;
target.ondragover = handleDrag;
function handleDrag(e) {
e.preventDefault();
}
target.ondrop = function (e) {
var newElem = document.getElementById(draggedID).cloneNode(false);
target.innerHTML = "";
target.appendChild(newElem);
e.preventDefault();
}
src.ondragstart = function (e) {
draggedID = e.target.id;
e.target.classList.add("dragged");
}
src.ondragend = function (e) {
var elems = document.querySelectorAll(".dragged");
for (var i = 0; i < elems.length; i++) {
elems[i].classList.remove("dragged");
}
}
</script>
</body>
</html>

運行結果:


4.使用DataTransfer
我們使用DataTransfer從拖拽對象向投放區傳遞數據。DataTransfer有下面的屬性和方法:types:返回數據的格式;getData(<format>):返回指定格式數據;setData(<format>, <data>):設置指定格式數據;clearData(<format>):移除指定格式數據;files:返回已經投放的文件數組。 
我們來看下面的例子,他實現的效果和例3一樣:

復制代碼
代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style>
#src > *
{
float: left;
}
#src > img
{
border: thin solid black;
padding: 2px;
margin: 4px;
}
#target
{
border: thin solid black;
margin: 4px;
}
#target
{
height: 123px;
width: 220px;
text-align: center;
display: table;
}
#target > p
{
display: table-cell;
vertical-align: middle;
}
img.dragged
{
background-color: Orange;
}
</style>
</head>
<body>
<div id="src">
<img draggable="true" id="car1" src="img/1.jpg" alt="car1" />
<img draggable="true" id="car2" src="img/2.jpg" alt="car2" />
<img draggable="true" id="car3" src="img/3.jpg" alt="car3" />
<div id="target">
<p id="msg">
drop here</p>
</div>
</div>
<script>
var src = document.getElementById("src");
var target = document.getElementById("target");
target.ondragenter = handleDrag;
target.ondragover = handleDrag;
function handleDrag(e) {
e.preventDefault();
}
target.ondrop = function (e) {
var droppedID = e.dataTransfer.getData("Text");
var newElem = document.getElementById(droppedID).cloneNode(false);
target.innerHTML = "";
target.appendChild(newElem);
e.preventDefault();
}
src.ondragstart = function (e) {
e.dataTransfer.setData("Text", e.target.id);
e.target.classList.add("dragged");
}
src.ondragend = function (e) {
var elems = document.querySelectorAll(".dragged");
for (var i = 0; i < elems.length; i++) {
elems[i].classList.remove("dragged");
}
}
</script>
</body>
</html>

5.拖拽文件
html5支持file api,可以讓我們操作本地文件。一般我們不直接使用file api,我們可以結合其他特性一起使用,比如結合拖拽特效,如下例:

復制代碼
代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style>
body > *
{
float: left;
}
#target
{
border: medium double black;
margin: 4px;
height: 75px;
width: 200px;
text-align: center;
display: table;
}
#target > p
{
display: table-cell;
vertical-align: middle;
}
table
{
margin: 4px;
border-collapse: collapse;
}
th, td
{
padding: 4px;
}
</style>
</head>
<body>
<div id="target">
<p id="msg">
Drop Files Here</p>
</div>
<table id="data" border="1">
</table>
<script>
var target = document.getElementById("target");
target.ondragenter = handleDrag;
target.ondragover = handleDrag;
function handleDrag(e) {
e.preventDefault();
}
target.ondrop = function (e) {
var files = e.dataTransfer.files;
var tableElem = document.getElementById("data");
tableElem.innerHTML = "<tr><th>Name</th><th>Type</th><th>Size</th></tr>";
for (var i = 0; i < files.length; i++) {
var row = "<tr><td>" + files[i].name + "</td><td>" + files[i].type + "</td><td>" + files[i].size + "</td></tr>";
tableElem.innerHTML += row;
}
e.preventDefault();
}
</script>
</body>
</html>

DataTransfer返回FileList對象,我們可以把他當做file數組對象,file包含下面屬性:name:文件名字;type:文件類型(MIME類型);size:文件大小。
運行效果:


6.上傳文件
下面介紹一個通過拖拽ajax上傳文件的實例。

復制代碼
代碼如下:

<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style>
.table
{
display: table;
}
.row
{
display: table-row;
}
.cell
{
display: table-cell;
padding: 5px;
}
.label
{
text-align: right;
}
#target
{
border: medium double black;
margin: 4px;
height: 50px;
width: 200px;
text-align: center;
display: table;
}
#target > p
{
display: table-cell;
vertical-align: middle;
}
</style>
</head>
<body>
<form id="fruitform" method="post" action="/UploadHandler.ashx">
<div class="table">
<div class="row">
<div class="cell label">
Bananas:</div>
<div class="cell">
<input name="bananas" value="2" /></div>
</div>
<div class="row">
<div class="cell label">
Apples:</div>
<div class="cell">
<input name="apples" value="5" /></div>
</div>
<div class="row">
<div class="cell label">
Cherries:</div>
<div class="cell">
<input name="cherries" value="20" /></div>
</div>
<div class="row">
<div class="cell label">
File:</div>
<div class="cell">
<input type="file" name="file" /></div>
</div>
<div class="row">
<div class="cell label">
Total:</div>
<div id="results" class="cell">
items</div>
</div>
</div>
<div id="target">
<p id="msg">
Drop Files Here</p>
</div>
<button id="submit" type="submit">
Submit Form</button>
</form>
<script type="text/javascript">
var target = document.getElementById("target");
var httpRequest;
var fileList;
target.ondragenter = handleDrag;
target.ondragover = handleDrag;
function handleDrag(e) {
e.preventDefault();
}
target.ondrop = function (e) {
fileList = e.dataTransfer.files;
e.preventDefault();
}
document.getElementById("submit").onclick = function handleButtonPress(e) {
e.preventDefault();
var form = document.getElementById("fruitform");
var formData = new FormData(form);
if (fileList) {
for (var i = 0; i < fileList.length; i++) {
formData.append("file" + i, fileList[i]);
}
}
httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = handleResponse;
httpRequest.open("POST", form.action);
httpRequest.send(formData);
}
function handleResponse() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var data = JSON.parse(httpRequest.responseText);
document.getElementById("results").innerHTML = "You ordered " + data.total + " items";
}
}
</script>
</body>
</html>

效果:

上面的一些例子不同瀏覽器運行效果可能不同,我用的是chrome瀏覽器,除了例5和6不支持多文件外,其他例子運行正常。大家可以下載demo。
demo下載地址:Html5Guide.draggable.rar

標簽:常德 松原 鄂爾多斯 廣西 蚌埠 廣東 阿克蘇 果洛

巨人網絡通訊聲明:本文標題《html5指南-3.如何實現html元素拖拽功能》,本文關鍵詞  html5,指南,-3.,如何,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5指南-3.如何實現html元素拖拽功能》相關的同類信息!
  • 本頁收集關于html5指南-3.如何實現html元素拖拽功能的相關信息資訊供網民參考!
  • 推薦文章
    久久精品大片| 日本在线www| 日本伦理黄色大片在线观看网站| 国产伦精品一区三区视频| 国产视频一区二区在线播放| 日日夜夜婷婷| 成人高清视频在线观看| 国产伦精品一区二区三区无广告| 欧美一区二区三区性| 97视频免费在线| 亚洲第一色在线| 黄视频网站在线免费观看| 91麻豆精品国产片在线观看| 国产成人女人在线视频观看| 免费国产在线观看| 一级毛片视频免费| 欧美激情伊人| 四虎影视库| 精品国产一区二区三区久久久狼 | 欧美日本韩国| 九九精品在线播放| 国产91精品一区二区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产一级生活片| 国产伦精品一区三区视频| 久久久久久久男人的天堂| 国产一级生活片| a级精品九九九大片免费看| 亚欧乱色一区二区三区| 国产麻豆精品视频| 欧美一区二区三区在线观看| 日韩欧美一及在线播放| 九九国产| 毛片的网站| 国产视频久久久久| 日韩欧美一二三区| 亚洲不卡一区二区三区在线| 国产a视频| 国产一级生活片| 日本乱中文字幕系列| 日韩一级黄色| 久草免费在线色站| 97视频免费在线观看| 青草国产在线| 欧美a级大片| 毛片的网站| 九九热国产视频| 国产一区二区高清视频| 黄色免费网站在线| 国产一区二区福利久久| 日韩一级精品视频在线观看| 韩国毛片| 亚洲天堂免费| 午夜久久网| 欧美另类videosbestsex高清| 成人免费一级毛片在线播放视频| 国产一区二区高清视频| 国产视频一区二区三区四区| 黄色短视屏| 精品久久久久久综合网| 国产福利免费观看| 台湾毛片| 日韩字幕在线| 国产极品精频在线观看| 成人免费一级毛片在线播放视频| 在线观看成人网 | 日韩女人做爰大片| 欧美国产日韩一区二区三区| 日韩一级精品视频在线观看| 精品在线视频播放| 四虎影视久久| 可以免费看污视频的网站| 国产91精品一区| 国产a视频| 天堂网中文字幕| 黄色短视屏| 日韩av东京社区男人的天堂| 国产伦精品一区二区三区在线观看| 国产极品精频在线观看| 日本特黄特色aa大片免费| 国产成人女人在线视频观看| 精品视频在线观看免费| 可以免费在线看黄的网站| 99久久网站| 99久久精品国产免费| 91麻豆精品国产片在线观看| 国产美女在线观看| 天堂网中文字幕| 一级女性大黄生活片免费| 精品国产三级a| 国产精品免费久久| 精品毛片视频| 99热精品在线| 九九九国产| 久久精品店| 九九九在线视频| 成人av在线播放| 国产一区二区精品久久| 亚飞与亚基在线观看| 91麻豆精品国产高清在线| 国产网站在线| 色综合久久天天综合观看| 一级毛片视频播放| 久久久久久久网| 成人在免费观看视频国产| 韩国毛片免费| 精品国产一区二区三区久久久狼 | 国产91精品系列在线观看| 免费一级片在线观看| 国产一区二区精品久久| 欧美一级视频免费| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 九九久久99| 亚飞与亚基在线观看| 国产成人精品在线| 精品视频免费观看| 亚洲天堂一区二区三区四区| 亚欧视频在线| 欧美爱色| 精品视频免费在线| 91麻豆tv| 国产美女在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 午夜久久网| 欧美日本免费| 中文字幕一区二区三区精彩视频| 黄色福利片| 日韩女人做爰大片| 麻豆系列 在线视频| 国产成人欧美一区二区三区的| 欧美1区| 美女免费精品高清毛片在线视| 日本伦理片网站| 久久国产精品只做精品| 成人高清免费| 黄视频网站在线观看| 国产一区二区高清视频| 99久久精品国产高清一区二区| 精品国产亚一区二区三区| 国产a网| 日本免费看视频| 国产视频一区在线| 国产综合91天堂亚洲国产| 欧美激情伊人| 精品毛片视频| 精品视频一区二区三区免费| 九九精品久久久久久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 黄色免费网站在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产成人精品综合| 97视频免费在线观看| 亚洲精品久久玖玖玖玖| 青青青草影院| 久久成人性色生活片| 亚洲天堂在线播放| 国产91精品一区二区| 精品久久久久久免费影院| 在线观看成人网 | 99久久网站| 国产福利免费视频| 亚洲第一色在线| 精品在线观看一区| 一本高清在线| 九九精品久久| 91麻豆精品国产自产在线观看一区| 午夜欧美成人香蕉剧场| 成人a大片在线观看| 四虎影视库| 深夜做爰性大片中文| 成人免费观看网欧美片| 国产不卡精品一区二区三区| 精品国产亚洲人成在线| 日韩免费片| 99色精品| 日韩在线观看视频黄| 久久99青青久久99久久| 国产一区精品| 精品视频免费在线| 天天色成人网| 亚洲 欧美 成人日韩| 成人a级高清视频在线观看| 成人a大片在线观看| 欧美激情一区二区三区视频 | 国产伦理精品| 日韩女人做爰大片| 亚洲 国产精品 日韩| 天堂网中文字幕| 日韩字幕在线| 欧美1卡一卡二卡三新区| 欧美a级成人淫片免费看| 成人免费一级毛片在线播放视频| 九九久久99综合一区二区| 欧美激情中文字幕一区二区| 国产网站麻豆精品视频| 久久成人性色生活片| 免费一级片网站| 亚洲爆爽| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 亚洲天堂一区二区三区四区|