校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

html5指南-3.如何實現(xiàn)html元素拖拽功能

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

復(fù)制代碼
代碼如下:

<!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.處理拖拽事件
現(xiàn)在我們來了解拖拽相關(guān)的事件,有兩種類型的事件,一種是拖拽對象的事件,一種是投放區(qū)的事件。拖拽事件包括:dragstart:當(dāng)元素拖拽開始觸發(fā);drag:在元素拖拽過程中觸發(fā);dragend:元素拖拽結(jié)束時觸發(fā)。下面我們就看一個例子:

復(fù)制代碼
代碼如下:

<!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.創(chuàng)建投放區(qū)
我們來看投放區(qū)相關(guān)的事件:dragenter:當(dāng)拖拽對象進(jìn)入投放區(qū)時觸發(fā);dragover:拖拽對象在投放區(qū)內(nèi)移動時觸發(fā);dragleave:拖拽對象沒有投放到投放區(qū),離開投放區(qū)的時候觸發(fā);drop:拖拽對象投放在投放區(qū)時觸發(fā)。
我們來看一個例子:

復(fù)制代碼
代碼如下:

<!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>

運行結(jié)果:


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

復(fù)制代碼
代碼如下:

<!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,我們可以結(jié)合其他特性一起使用,比如結(jié)合拖拽特效,如下例:

復(fù)制代碼
代碼如下:

<!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對象,我們可以把他當(dāng)做file數(shù)組對象,file包含下面屬性:name:文件名字;type:文件類型(MIME類型);size:文件大小。
運行效果:


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

復(fù)制代碼
代碼如下:

<!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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《html5指南-3.如何實現(xiàn)html元素拖拽功能》,本文關(guān)鍵詞  html5,指南,-3.,如何,實現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《html5指南-3.如何實現(xiàn)html元素拖拽功能》相關(guān)的同類信息!
  • 本頁收集關(guān)于html5指南-3.如何實現(xiàn)html元素拖拽功能的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    精品成人一区二区| 亚洲男人电影天堂| 精品久久久久久久人人人人传媒 | 91精品国产福利在线观看 | 亚洲高清免费视频| 日韩电影免费在线看| 日韩中文字幕区一区有砖一区| 亚洲精品国产精华液| 亚洲亚洲人成综合网络| 蜜臀av性久久久久av蜜臀妖精| 日韩精品乱码av一区二区| 久久99国产精品尤物| 日韩中文字幕91| 日韩福利视频导航| 国产一区二区三区在线观看免费视频 | 亚洲精品成a人| 日本午夜精品一区二区三区电影| 久久国产精品99精品国产| 国产ts人妖一区二区| 欧美日韩国产高清一区| 亚洲精品一区二区三区在线观看| 中文字幕一区二区三区乱码在线| 亚洲男同性恋视频| 肉丝袜脚交视频一区二区| 亚洲精品一区二区三区在线观看| 国产精品乱码久久久久久| 国产午夜精品久久久久久免费视| 国产无人区一区二区三区| 国产精品日韩成人| 日本色综合中文字幕| 国产精品一区二区你懂的| 欧美日韩中文字幕一区二区| 精品国产人成亚洲区| 国产精品二区一区二区aⅴ污介绍| 午夜电影网一区| 国产不卡一区视频| 日韩三级高清在线| 亚洲情趣在线观看| 国产麻豆日韩欧美久久| 欧美一区二区三区性视频| 26uuu久久天堂性欧美| 亚洲一级二级三级| 国产不卡在线一区| 日韩视频国产视频| 午夜av一区二区| 在线观看网站黄不卡| 精品国产三级a在线观看| 国产精品免费aⅴ片在线观看| 韩国视频一区二区| 精品福利av导航| 免费成人美女在线观看| 欧美日韩一区在线| 日韩激情中文字幕| 91精品国产欧美日韩| 亚洲线精品一区二区三区八戒| 99re66热这里只有精品3直播 | 日韩欧美电影一二三| 亚洲h精品动漫在线观看| 成人免费视频app| 最新中文字幕一区二区三区 | 欧美性猛交一区二区三区精品| 国产精品麻豆一区二区| 国产成人免费在线视频| 国产日韩精品视频一区| 91啪在线观看| 久久综合色之久久综合| 亚洲欧美电影院| 欧美日本乱大交xxxxx| 麻豆国产91在线播放| 久久亚区不卡日本| 国产成人精品三级| 国产亚洲精久久久久久| 色婷婷精品久久二区二区蜜臀av| 亚洲成年人网站在线观看| 久久日一线二线三线suv| a在线欧美一区| 黑人巨大精品欧美黑白配亚洲| 久久精品人人做人人综合| 色老头久久综合| 国产高清精品网站| 奇米影视在线99精品| 国产精品全国免费观看高清 | 不卡一区二区在线| 久久99精品久久久久久| 亚洲精品老司机| 国产日韩欧美不卡在线| 欧美综合天天夜夜久久| 国产精一品亚洲二区在线视频| 亚洲免费av高清| 国产亚洲短视频| 欧美va亚洲va香蕉在线| 777精品伊人久久久久大香线蕉| 成人av午夜电影| 精品制服美女丁香| 久久99国产精品成人| 青草国产精品久久久久久| 日本成人超碰在线观看| 五月婷婷久久综合| 一卡二卡三卡日韩欧美| 亚洲一区二区三区免费视频| 亚洲人精品午夜| 一区二区三区在线视频观看| 亚洲欧美日韩电影| 亚洲欧美成人一区二区三区| 国产日本亚洲高清| 精品精品欲导航| 欧美最猛性xxxxx直播| 欧美亚洲综合久久| 国产日产亚洲精品系列| 中文字幕一区视频| 精东粉嫩av免费一区二区三区| 久久97超碰国产精品超碰| 处破女av一区二区| 91网站黄www| 欧美美女一区二区| 精品国产免费视频| 日韩亚洲欧美中文三级| 亚洲色大成网站www久久九九| 亚洲三级理论片| 美女视频黄a大片欧美| 韩国精品主播一区二区在线观看| 成人免费视频caoporn| 欧美日韩成人在线一区| 日韩一级高清毛片| 亚洲丝袜美腿综合| 久久精品72免费观看| av福利精品导航| 欧美日韩三级一区二区| 日本一区二区视频在线观看| 午夜激情久久久| 一本色道久久综合亚洲aⅴ蜜桃| 日韩欧美高清在线| 亚洲一区二区视频| 国v精品久久久网| 26uuu久久天堂性欧美| 日韩在线一区二区| 欧美一区二区精品在线| 香蕉久久一区二区不卡无毒影院 | 亚洲成人动漫av| 国内精品国产成人国产三级粉色| 一本久道久久综合中文字幕| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩视频在线永久播放| 精品一区免费av| 国产欧美日韩精品一区| av一区二区不卡| 亚洲综合一二三区| 欧美一区日韩一区| 精品一区二区三区在线视频| 中文字幕免费一区| 欧美三级中文字幕| 国产成人丝袜美腿| 亚洲一二三级电影| 欧美成人bangbros| 欧美综合一区二区三区| 麻豆国产精品视频| 亚洲丝袜制服诱惑| 久久伊人蜜桃av一区二区| 欧美做爰猛烈大尺度电影无法无天| 日韩电影在线免费看| 欧美国产精品一区| 精品粉嫩aⅴ一区二区三区四区 | 久久综合狠狠综合久久综合88| 国产91综合网| 极品销魂美女一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 国产视频一区在线观看| 91麻豆精品国产91久久久久| 99精品一区二区| 粉嫩欧美一区二区三区高清影视| 日韩电影网1区2区| 午夜精品久久一牛影视| 一区二区三区在线免费观看| 国产精品沙发午睡系列990531| 久久众筹精品私拍模特| 日韩一卡二卡三卡| 国产精品电影一区二区| 日本伊人色综合网| 一本久久a久久免费精品不卡| 欧美一区二区三区婷婷月色| 欧美精品一区二区三区一线天视频| 欧美丰满美乳xxx高潮www| 国产精品久久影院| 一区二区三国产精华液| 国产精品一区二区在线观看网站| 色域天天综合网| 国产精品亲子伦对白| 国产综合色在线| 欧美一区二区三区免费| 午夜精品久久久久久久久久| 91啪九色porn原创视频在线观看| 国产日韩一级二级三级| 青娱乐精品在线视频| 欧美日韩高清影院| 亚洲成人av一区二区| 精品视频在线免费| 亚洲国产精品影院| 欧美亚洲免费在线一区| 亚洲五码中文字幕| 一区二区三区中文字幕|