亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

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

2024-08-26 00:15:03
字體:
來源:轉載
供稿:網友
本文的內容是關于在HTML5/">html5中如何實現html元素拖拽功能。在html5之前要實現拖拽,需要借助js,現在html5內部就支持了拖拽的功能,但是要實現稍微復雜的功能還是少不了js的幫忙。下面我們看幾個例子。
1.創建拖拽對象
我們可以通過draggable屬性告訴瀏覽器,哪些元素需要實現拖拽功能。draggable有三個值:true:元素可以被拖拽;false:元素不能被拖拽;auto:瀏覽器自己判斷元素是否能被拖拽。
系統默認值是auto,但auto情況下瀏覽器對不同元素拖拽功能的支持是不一樣,如:支持img對象,不支持div對象。所以,如果需要拖拽一個元素,最好還是把draggale設置為true。下面我們看一個例子:

復制代碼 代碼如下:www.CuoXIn.com

<!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:元素拖拽結束時觸發。下面我們就看一個例子:

復制代碼 代碼如下:www.CuoXIn.com

<!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:拖拽對象投放在投放區時觸發。
我們來看一個例子:

復制代碼 代碼如下:www.CuoXIn.com

<!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一樣:

復制代碼 代碼如下:www.CuoXIn.com

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

復制代碼 代碼如下:www.CuoXIn.com

<!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上傳文件的實例。

復制代碼 代碼如下:www.CuoXIn.com

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩视频在线观看| 亚洲精品日韩欧美| 久久色精品视频| 欧美激情欧美狂野欧美精品| 日韩av在线不卡| 欧美丝袜美女中出在线| 亚洲二区在线播放视频| 欧美精品18videosex性欧美| 国产精品亚洲片夜色在线| 亚洲成人在线视频播放| 蜜月aⅴ免费一区二区三区| 亚洲午夜精品视频| 岛国视频午夜一区免费在线观看| 久久久国产91| 亚洲一区二区自拍| 国产综合久久久久久| 亚洲男女性事视频| 日韩中文第一页| 自拍偷拍亚洲区| 欧美专区在线播放| 久久亚洲精品小早川怜子66| 亚洲综合精品一区二区| 亚洲无限乱码一二三四麻| 91麻豆桃色免费看| 亚洲韩国欧洲国产日产av| 97国产精品视频人人做人人爱| 欧美日韩亚洲国产一区| 久久精品在线播放| 久久久精品2019中文字幕神马| 91久久精品日日躁夜夜躁国产| 国内免费精品永久在线视频| 亚洲自拍偷拍第一页| 亚洲人午夜色婷婷| 亚洲精品国产精品久久清纯直播| 日韩电影大全免费观看2023年上| 国产成人精品av| 日韩欧美一区视频| 亚洲国产精品专区久久| 亚洲欧洲国产精品| 久精品免费视频| 日韩人在线观看| 亚洲激情视频在线播放| 日韩天堂在线视频| 亚洲人成网站免费播放| 欧美日韩亚洲国产一区| 久久精品2019中文字幕| 欧美大片第1页| 亚洲人精品午夜在线观看| 国产精品嫩草影院一区二区| 中日韩美女免费视频网站在线观看| 亚洲iv一区二区三区| xxxxxxxxx欧美| 亚洲精品电影在线观看| 国产精品免费一区二区三区都可以| 欧美一性一乱一交一视频| 97在线观看视频国产| 亚洲第一视频网站| 国产精品96久久久久久| 日韩免费看的电影电视剧大全| 久久久久久亚洲精品中文字幕| 国产成人精品电影| 91精品久久久久久久久久久久久| 精品久久久久久国产| 亚洲国产成人爱av在线播放| 日韩视频欧美视频| 午夜精品久久久99热福利| 日韩最新av在线| 亚洲女同精品视频| 91免费在线视频| 黄色成人在线免费| 中文字幕欧美在线| 国产一区二区三区久久精品| 一区二区三区国产在线观看| 欧美电影在线免费观看网站| 九九热精品视频在线播放| 在线精品视频视频中文字幕| 欧日韩不卡在线视频| 欧美一级在线亚洲天堂| 久久久久久国产免费| 久久久成人精品| 最新国产精品拍自在线播放| 欧美日本亚洲视频| 在线视频中文亚洲| 97成人超碰免| 国产精品久久久久999| 国产欧美在线视频| 欧美不卡视频一区发布| 中文字幕不卡av| 日韩av综合中文字幕| 欧美最猛性xxxxx亚洲精品| 亚洲精品久久久久久久久久久久| 精品亚洲一区二区三区四区五区| 亚洲精品短视频| 亚洲va国产va天堂va久久| 97精品视频在线观看| 国产精品成人av性教育| 亚洲第一中文字幕在线观看| 成人疯狂猛交xxx| 欧美高清第一页| 亚洲精品美女久久| 亚洲电影在线看| 国产欧美日韩亚洲精品| 国产精品视频精品| 欧美体内谢she精2性欧美| 欧美交受高潮1| 日韩在线免费视频观看| 91精品免费久久久久久久久| 色婷婷**av毛片一区| 国产亚洲欧美一区| 欧美精品aaa| 国产精品久久久久久久7电影| 国产精品av免费在线观看| 久久久久久久久91| 亚洲级视频在线观看免费1级| 2019日本中文字幕| 最近2019好看的中文字幕免费| 亚洲精品国精品久久99热| 91网站免费看| 亚洲激情中文字幕| 国产精品99导航| 欧美亚洲成人精品| 国产脚交av在线一区二区| 亚洲女人天堂av| 欧美丝袜美女中出在线| 91在线色戒在线| 亚洲成**性毛茸茸| 欧美激情在线视频二区| 亚洲图片欧美午夜| 97婷婷大伊香蕉精品视频| 国产一级揄自揄精品视频| 亚洲性69xxxbbb| 亚洲精品一区av在线播放| 亚洲成人激情在线| 日本老师69xxx| 欧美性资源免费| 欧美激情欧美激情| 最近2019年好看中文字幕视频| 国产999视频| 国产欧美日韩最新| 成人有码视频在线播放| 久久久免费观看| 国产精品对白刺激| 日韩av在线最新| 日韩在线播放视频| 91精品在线观看视频| 九九热精品在线| 色综合天天综合网国产成人网| 国产精品入口免费视| 日韩免费观看视频| 九九热这里只有精品6| 久久精品成人欧美大片| 欧美性理论片在线观看片免费| 最近2019年手机中文字幕| 久久亚洲精品一区| 亚洲影院色无极综合| 久久69精品久久久久久久电影好| 日韩av一卡二卡| 欧美日韩高清在线观看| 在线观看欧美日韩国产| 隔壁老王国产在线精品| 国产精品扒开腿做爽爽爽的视频| 久久精品电影网| 麻豆国产精品va在线观看不卡| 欧美一区二区三区免费视|