HTML5--拖放(Drag&Drop)隨筆

来源:http://www.cnblogs.com/Alice-zy2/archive/2017/11/08/7803919.html
-Advertisement-
Play Games

在 HTML5 中,拖放是標準的一部分,即抓取對象以後拖到另一個位置(添加已定義好的父級元素里),任何元素都能夠拖放。 瀏覽器支持 Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。 *註釋:在 Safari 5.1.2 中不支 ...


在 HTML5 中,拖放是標準的一部分,即抓取對象以後拖到另一個位置(添加已定義好的父級元素里),任何元素都能夠拖放。

瀏覽器支持

Internet Explorer 9、Firefox、Opera 12、Chrome 以及 Safari 5 支持拖放。

*註釋:在 Safari 5.1.2 中不支持拖放。

1、設置元素為可拖放

讓元素可拖動,把 draggable 屬性設置為 true 。

eg:

<p id="txt" draggable="true">拖拽文字</p>

2、拖動什麼 - ondragstart 和 setData()

然後,規定當元素被拖動時,會發生什麼。

ondragstart 屬性調用了一個函數,drag(event),它規定了被拖動的數據。

<p id="txt" draggable="true" ondragstart="drag(event)">拖拽文字</p>

dataTransfer.setData() 方法設置被拖數據的數據類型和值。

1 function drag(e1){
2     e1.dataTransfer.setData('text',e1.target.id);
3 }

*數據類型是 "Text",值是可拖動元素的 id ("drag1")。

3、放到何處 - ondragover

ondragover 事件規定在何處放置被拖動的數據。

預設地,無法將數據/元素放置到其他元素中。如果需要設置允許放置,我們必須阻止對元素的預設處理方式。

這要通過調用 ondragover 事件的 event.preventDefault() 方法。

4、進行放置 - ondrop

當放置被拖數據時,會發生 drop 事件。

ondrop 屬性調用了一個函數,drop(event)。

html :

<div id="box" style="height: 200px; border:2px solid deeppink;" ondrop="drop(event)" ondragover="allow(event)"></div>

js:

1 function allow(e){
2     e.preventDefault();
3 }
4 function drop(e){
5     var tag=e.dataTransfer.getData('text');                    document.getElementById('box').appendChild(document.getElementById(tag))
6 }
View Code

HTML5拖放示例

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <div id="box" style="height: 200px; border:2px solid deeppink;" ondrop="drop(event)" ondragover="allow(event)">
 9         </div>
10         <p id="txt" draggable="true" ondragstart="drag(event)">拖拽文字(添加已定義好的父級元素里)(功能一般為清除的垃圾箱)</p>
11         
12         <script type="text/javascript">
13             function drag(e1){
14                 e1.dataTransfer.setData('text',e1.target.id);
15             }
16             function allow(e){
17                 e.preventDefault();
18             }
19             function drop(e){
20                 var tag=e.dataTransfer.getData('text');
21                 document.getElementById('box').appendChild(document.getElementById(tag))
22             }
23         </script>
24     </body>
25 </html>
View Code

代碼解釋:

  • 調用 preventDefault() 來避免瀏覽器對數據的預設處理(drop 事件的預設行為是以鏈接形式打開)
  • 通過 dataTransfer.getData("Text") 方法獲得被拖的數據。該方法將返回在 setData() 方法中設置為相同類型的任何數據。
  • 被拖數據是被拖元素的 id ("drag1")
  • 把被拖元素追加到放置元素(目標元素)中

轉自:w3school.com

 

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <title>Title</title>
  5     <meta charset="utf-8">
  6     <style>
  7         #draggable {
  8             width: 200px;
  9             height: 20px;
 10             text-align: center;
 11             background: white;
 12             margin: 0 auto;
 13         }
 14         .dropzone {
 15             box-sizing: border-box;
 16             width: 400px;
 17             height: 60px;
 18             background: blueviolet;
 19             margin: 10px auto;
 20             padding: 20px;
 21         }
 22     </style>
 23 </head>
 24 <body>
 25 <!--dropzone:表示可釋放的區域-->
 26 <div class="dropzone">
 27     <!--可拖動的元素 draggable="true"-->
 28     <div id="draggable" draggable="true" >
 29         來拖動我啊
 30     </div>
 31 </div>
 32 <div class="dropzone"></div>
 33 <div class="dropzone"></div>
 34 <div class="dropzone"></div>
 35 
 36 
 37 <script>
 38     /*儲存拖動的目標*/
 39     var dragged;
 40 
 41 
 42     /*開始拖動的時觸發。 只觸發一次*/
 43     document.addEventListener("dragstart", function (event) {
 44 //        console.log("開始拖動了");
 45         // 保存被拖動的元素對象
 46         dragged = event.target;
 47         // 把拖動元素的該成半透明。
 48         event.target.style.opacity = .3;
 49     }, false);
 50 
 51     /* 拖動的過程中觸發。 只要元素在拖動,會一直重覆觸發 */
 52     document.addEventListener("drag", function (event) {
 53 //        console.log("被拖的感覺真爽")
 54     }, false);
 55 
 56     /*進入另外一個元素的區域時觸發*/
 57     document.addEventListener("dragenter", function (event) {
 58         // 判斷當前的目標是否進入了潛在的 dropzone區域,如果是則高量這個潛在的目標區域
 59         if (event.target.className == "dropzone") {
 60 //            console.log("進入潛在的目標區域");
 61             event.target.style.background = "purple";
 62         }
 63 
 64     }, false);
 65 
 66     /* 在潛在目標區域的上方的時候會重覆觸發 */
 67     document.addEventListener("dragover", function (event) {
 68 //        console.log("在潛在的目前區域上方");
 69         // 因為預設情況下,拖放目標是不允許接受元素的。阻值預設行為,可以隨時是否元素。
 70         event.preventDefault();  //必須阻止預設行為,否則的後面的drop事件不會觸發
 71     }, false);
 72 
 73     /*鬆開滑鼠拖放結束。*/
 74     document.addEventListener("dragend", function (event) {
 75         console.log("拖放結束");
 76         // 把元素的透明重新設置為1
 77         event.target.style.opacity = "1";
 78     }, false);
 79 
 80     /*從潛在目標元素上方離開的時候觸發*/
 81     document.addEventListener("dragleave", function (event) {
 82         console.log("離開目標元素");
 83         // 因為進入一個元素的時候更改了目標元素的北京,所以離開的時候要重置背景
 84         if (event.target.className == "dropzone") {
 85             event.target.style.background = "";
 86         }
 87 
 88     }, false);
 89 
 90     /*釋放拖動元素的時候觸發。  這個事件是在dropend事件觸發前觸發。*/
 91     document.addEventListener("drop", function (event) {
 92         console.log("drog.....");
 93         // prevent default action (open as link for some elements)
 94         event.preventDefault();
 95         // 把拖動的元素移動目標區域中
 96         if (event.target.className == "dropzone") {
 97             event.target.style.background = "";
 98             //把拖動元素從他原來的父節點中移除。
 99             dragged.parentNode.removeChild(dragged);
100             //插入到目標元素中。
101             event.target.appendChild(dragged);
102         }
103 
104     }, false);
105 </script>
106 </body>
107 </html>
eg2

轉自:完善飛躍

 拓展學習--經典例子:

HTML5--拖拽API(含超經典例子):http://blog.csdn.net/baidu_25343343/article/details/53215193

 


HTML5——拖拽相關API及其他學習分享

1、HTML5 Sortable 是一個輕量級排序插件,使用原生的 HTML5拖放 API 創建排序列表和網格。

 2、 Draggabilly 是一個很小的 JavaScript 庫,只需要簡單的設置參數就可以在你的網站用添加拖放功能。相容 IE8+ 瀏覽器,支持多點觸摸。可以靈活綁定事件,支持 RequireJS 以及 Bower 安裝。中文可參照:http://blog.csdn.net/auven_zj/article/details/74611887。

3、html5和js超實用的拖放UI界面設計

[來自:jQuery之家]
4、11個好用的jQuery拖拽拖放插件   2017-11-08
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • transform變換 rotate旋轉 rotate(angle) 2D旋轉;rotateX(angle) 沿著x軸旋轉;rotateY(angle) 沿著y軸旋轉;rotate(angle) 沿著z軸旋轉; deg角度、rad弧度、turn圈、grad梯度 90deg = 100grad = 0 ...
  • 手機號碼正則表達式驗證: 或者 固定電話號碼正則表達式: 身份證正則: 其他 ...
  • <link>標簽定義了當前文檔與 Web 集合中其他文檔的關係。link 元素是一個空元素,它僅包含屬性。此元素只能存在於 head 部分,不過它可出現任何次數。在 HTML 中,<link> 標簽沒有結束標簽。在 XHTML 中,<link> 標簽必須被正確的關閉。 除了HTML的標準通用屬性之外 ...
  • 明白何謂Margin Collapse 不同於其他很多屬性,盒模型中垂直方向上的Margin會在相遇時發生崩塌,也就是說當某個元素的底部Margin與另一個元素的頂部Margin相鄰時,只有二者中的較大值會被保留下來,可以從下麵這個簡單的例子來學習: .square { width: 80px; h ...
  • 引子 之前的我的博客中對於meta有個介紹,例如:http://www.haorooms.com/post/liulanq_think_ie 瀏覽器安全性想到的這篇文章,中間介紹了meta下麵IE的一些屬性,可以實現頁面之間的過渡轉換。已經SEO優化中有所提及。下麵具體介紹一下meta的功能和使用。 ...
  • 花了1天多的時間, 終於把這個框架搭建起來了。 好了, 不多說了, 直接進入主題了。前提是安裝了nodejs,至於怎麼安裝, 網上都有教程。 這裡就不多說了, 這邊使用的IDE是idea。1.在E:/my-project(我的電腦上) 新建文件夾vueDemo,用idea直接打開, idea控制台會 ...
  • 一、基本類型和引用類型 ECMAScipt變數可能分為兩種數據類型:基本類型和引用類型。 基本類型:指簡單的數據段;包括Undefined、Null、Boolean、Number、String;可以操作保存在變數中值(棧記憶體),所以稱為按值訪問;不能添加屬性。 引用類型:可能由多個值構成的對象;包括 ...
  • 前言 現在,我們被稱為前端工程師。然而,早年給我們的稱呼卻是頁面仔。或許是職責越來越大,整體的前端井噴式的發展,使我們只關註了js,而疏遠了css和html。 其實,我們可能經常在聊組件化,咋地咋地。但是,回過頭來思考一下,如果你看到一張設計稿的時候,連佈局都不清不楚,談何組件化呢。所以,我們需要在 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...