【HTML】draggable 屬性:解鎖網頁交互新維度

一、簡介

  1. 在Web開發中,用戶與內容的交互方式直接影響用戶體驗的深度。
  2. 在 HTML 中,draggable 是一個全局屬性,通過簡單配置即可讓任意元素實現拖拽功能。
  3. 也可通過結合 draggable 屬性和 JavaScript 事件,可以實現豐富的拖放交互功能。
  4. 為構建可視化編輯器、任務看板、工作流拖拽等場景提供了原生支持。
  5. 本文將系統解析該屬性的使用方法、事件機制及 dataTransfer 實現跨元素數據交互等要點。

二、基本語法

draggable 它是一個布爾屬性,可以設置為 truefalse,默認值為 false(除非元素是默認可拖動的,如 <img><a> 標簽)。

<element draggable="true|false|auto">

屬性值與作用范圍

draggable作為全局布爾屬性,支持三種取值:

  • true:強制啟用拖拽(如<div draggable="true">
  • false:禁用拖拽(覆蓋默認行為)
  • auto(默認):遵循瀏覽器規則(鏈接/圖片默認可拖拽)

特殊說明

  • 表單控件(<input>/<button>)和表格結構元素(<th>/<td>)默認不支持拖拽
  • 文本選中狀態下拖拽會觸發系統默認的文本復制行為
  • 移動端需配合觸摸事件或第三方庫(如interact.js)實現兼容

eg:示例代碼

1.使 <div> 可拖動

<div draggable="true" style="width: 100px; height: 100px; background: lightblue;">拖動我!
</div>
  1. 禁止圖片拖動(覆蓋默認行為)
<img src="example.jpg" draggable="false" alt="不可拖動的圖片">

三、拖拽事件生命周期

要實現完整的拖放功能,需要結合 JavaScript 監聽拖放相關事件:

完整的拖拽操作涉及7個關鍵事件,按觸發順序如下:

事件類型觸發場景典型用途
dragstart用戶開始拖拽元素時設置拖拽數據、預覽樣式
drag拖拽過程中持續觸發(每350ms)實時反饋位置(需節流處理)
dragend拖拽結束時(無論成功/取消)清理臨時狀態
dragenter拖拽元素進入放置區域時高亮顯示放置區域
dragover拖拽元素在放置區域內移動時必須調用preventDefault()
dragleave拖拽元素離開放置區域時恢復放置區域樣式
drop元素在放置區域釋放時處理業務邏輯

四、數據傳遞

通過 dataTransfer 對象在拖放事件中傳遞數據

  • dataTransfer 對象是 HTML5 拖放 API 的核心部分。
  • 它允許在拖放操作期間在不同元素之間傳遞數據。
  • 通過 setData() 方法設置數據,通過 getData() 方法獲取數據
  • 實現步驟
  1. dragstart 事件中,使用 setData() 設置要傳遞的數據
  2. drop 事件中,使用 getData() 獲取之前設置的數據

eg:示例代碼

<!DOCTYPE html>
<html><head><title>拖放數據傳遞示例</title><style>#dragItem {width: 100px;height: 50px;background-color: #3498db;color: white;text-align: center;line-height: 50px;cursor: move;margin: 20px;}#dropZone {width: 300px;height: 200px;border: 2px dashed #7f8c8d;background-color: #ecf0f1;text-align: center;line-height: 200px;margin: 20px;}</style>
</head><body><div id="dragItem" draggable="true">拖我</div><div id="dropZone">放到這里</div><script>const dragItem = document.getElementById('dragItem');const dropZone = document.getElementById('dropZone');/*** dragItem 元素處理拖動開始事件* 1. 設置數據,第一個參數是數據格式,第二個參數是數據內容*/dragItem.addEventListener('dragstart', function (e) {console.log('開始拖動,設置數據');// 設置數據,第一個參數是數據格式,第二個參數是數據內容e.dataTransfer.setData('text/plain', '這是通過dataTransfer傳遞的消息');e.dataTransfer.setData('application/json', JSON.stringify({ id: 1, name: '示例對象' }));});/*** dropZone 元素處理拖拽經過放置區事件* 1. 阻止默認行為以允許放置*/dropZone.addEventListener('dragover', function (e) {e.preventDefault();});/*** dropZone 元素處理放置事件 * 1. 阻止默認行為以允許放置* 2. 獲取之前設置的數據* 3. 顯示接收到的數據* 4. 改變背景色以示反饋*/dropZone.addEventListener('drop', function (e) {e.preventDefault();// 獲取之前設置的數據,第一個參數是數據格式,第二個參數是數據內容const textData = e.dataTransfer.getData('text/plain');const jsonData = e.dataTransfer.getData('application/json');console.log('獲取到的文本數據:', textData);console.log('獲取到的JSON數據:', JSON.parse(jsonData));dropZone.textContent = `已接收數據: ${textData}`;dropZone.style.backgroundColor = '#2ecc71';});</script>
</body></html>

五、注意事項

  1. 默認可拖動元素:如 <img><a>(帶 href)默認支持拖動,無需設置 draggable="true"
  2. 移動端兼容性:部分移動設備對拖放支持有限,需測試目標平臺。
  3. 數據傳遞:通過 dataTransfer 對象在拖放事件中傳遞數據(如示例中的 setData/getData

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95315.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在Github中創建倉庫?如何將本地項目上傳到GitHub中?

1.1 點擊New repository&#xff08;這個是創建代碼倉庫的意思&#xff09;初次完成后只有一個文件最后&#xff1a;在本地git clone 項目地址然后把項目文件復制到git的文件夾內再提交到遠程倉庫git add . git commit -m "修改https"git push origin mainmain為分支…

【前端教程】HTML 基礎界面開發

一、網站導航欄設計與實現 導航欄是網站的重要組成部分&#xff0c;負責引導用戶瀏覽網站的各個板塊。以下是一個實用的導航欄實現方案&#xff1a; 實現代碼 HTML 結構&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /&…

【學Python自動化】 6. Python 模塊系統學習筆記

一、模塊基礎 什么是模塊&#xff1f;包含 Python 定義和語句的 .py 文件解決代碼復用和組織問題每個模塊有自己的命名空間創建模塊示例# fibo.py - 斐波那契模塊 def fib(n):"""打印小于n的斐波那契數列"""a, b 0, 1while a < n:print(a, e…

機器學習-時序預測2

門控循環單元GRU 接著機器學習-時序預測1-CSDN博客這個說&#xff0c;GRU是LSTM的一個簡化而高效的變體&#xff0c;都使用“門控機制”來控制信息流&#xff0c;但它通過合并一些組件&#xff0c;使結構更簡單、參數更少、計算更快&#xff0c;同時在許多任務上性能與 LSTM 相…

數據湖與數據倉庫

大數據前沿技術詳解 目錄 數據湖技術湖倉一體架構數據網格實時流處理技術云原生數據技術數據治理與血緣AI原生數據平臺邊緣計算與大數據 核心內容包括&#xff1a; 數據湖技術 - 架構模式、技術棧、面臨的挑戰 湖倉一體架構 - Delta Lake、Iceberg、Hudi等主流實現 數據網格…

Python OpenCV圖像處理與深度學習:Python OpenCV入門-圖像處理基礎

Python OpenCV入門實踐&#xff1a;圖像處理基礎 學習目標 通過本課程&#xff0c;學員們將了解OpenCV的基本概念、安裝方法&#xff0c;掌握如何使用Python和OpenCV進行基本的圖像處理操作&#xff0c;包括圖像的讀取、顯示、保存以及簡單的圖像變換。 相關知識點 Python Open…

【lua】Lua 入門教程:從環境搭建到基礎編程

Lua 入門教程&#xff1a;從環境搭建到基礎編程 Lua 是一種輕量級、可擴展的腳本語言&#xff0c;廣泛應用于游戲開發&#xff08;如《魔獸世界》《Roblox》&#xff09;、嵌入式系統、Web 后端等領域。它語法簡潔、運行高效&#xff0c;非常適合作為編程入門語言或輔助開發工…

MySQL索引事務(未完成)

索引的相關操作1.查看索引show index from 表名;2.創建索引create index 索引名字 on 表名(列名);創建索引&#xff0c;是一個危險操作創建索引的時候&#xff0c;需要針對現有的數據&#xff0c;進行大規模的重新整理如果當前表是一個空表&#xff0c;或者數據不多&#xff0c…

Docker一鍵快速部署壓測工具,高效測試 API 接口性能

以下是對該壓測工具的簡單介紹&#xff1a; 這是一個簡易的在線壓測工具&#xff0c;可以對 API 接口/頁面、websocket服務等進行壓力測試&#xff0c;檢驗服務的并發能力使用 thinkphp ant design pro 構建&#xff0c;壓測能力驅動基于 wrk 、 php 多進程協程實現支持在線授…

前端緩存問題詳解

前端緩存是提升網頁性能和用戶體驗的重要手段&#xff0c;但也常導致資源更新不及時等問題。以下是關于前端緩存的核心知識點和解決方案&#xff1a; 一、緩存類型及工作原理HTTP緩存&#xff08;最核心&#xff09; 強緩存&#xff1a;直接從本地讀取&#xff0c;不請求服務器…

webpack升級

一、調研對比維度Webpack 4 狀態Webpack 5 改進與優勢構建速度較慢&#xff0c;增量構建效率低? 引入 持久化緩存&#xff08;filesystem cache&#xff09;&#xff0c;二次構建速度提升高達 90%Tree Shaking支持基礎 Tree Shaking&#xff0c;需手動配置? 更強的 Tree Shak…

Logstash數據遷移之es-to-kafka.conf詳細配置

在 Logstash 中配置從 Elasticsearch (ES) 讀取數據并輸出到 Kafka 是一個相對高級但強大的用法&#xff0c;通常用于數據遷移、重新索引、或構建新的數據管道。 下面我將詳細解釋配置文件的各個部分和細節。 核心配置文件結構 (es-to-kafka.conf) 一個完整的配置文件主要包含三…

在OracleLinux9.4系統上靜默滾動打補丁安裝Oracle19c

OracleLinux9.4系統 安裝Oracle19c 文章目錄OracleLinux9.4系統 安裝Oracle19c一、安裝準備1、yum安裝預檢查需要的包2、系統資源二、滾動安裝一、安裝準備 1、yum安裝預檢查需要的包 yum install libnsl yum install -y oracle-database-preinstall-19c # 最新的unzip yum i…

Android原生HttpURLConnection上傳圖片方案

創建上傳方法object FormUploader {private val BOUNDARY "Boundary-" System.currentTimeMillis()private const val LINE_FEED "\r\n"Throws(IOException::class)fun uploadImage(url: String, imageFile: File, params: MutableMap<String?, Str…

落葉清掃機器人cad+三維圖+設計說明書

摘 要 城市公共場所、校園等環境中&#xff0c;落葉的清掃一直是一個繁瑣而耗時的任務。傳統的人工清掃方式不僅效率低下&#xff0c;還存在人力浪費和安全隱患等問題。因此&#xff0c;研發一款能夠自主完成落葉清掃任務的機器人成為了當今研究的熱點之一。隨著科技的不斷進…

國別域名的SEO優勢:是否更利于在當地搜索引擎排名?

當你盯著搜索引擎結果頁發呆時&#xff0c;有沒有想過——憑什么那個.jp域名的網站能排在.ca前面&#xff1f;別扯什么內容質量&#xff0c;上周幫客戶優化新加坡市場時&#xff0c;親眼見著兩個內容相似度90%的頁面&#xff0c;.sg域名比.com.au在Google Singapore上高出3個排…

動態配置最佳實踐:Spring Boot 十種落地方式與回滾審計指南(含實操與避坑)

作為一名Spring Boot開發者&#xff0c;正在運維一個高可用微服務系統&#xff1a;業務需求變化頻繁&#xff0c;需要實時調整配置如數據庫連接或日志級別&#xff0c;但每次修改都得重啟應用&#xff0c;造成服務中斷和用戶投訴。這不是小麻煩&#xff0c;而是配置管理的痛點—…

vue社區網格化管理系統(代碼+數據庫+LW)

摘要 隨著城市化進程的加快&#xff0c;社區管理的復雜性逐漸增大&#xff0c;傳統的管理模式已無法滿足現代社區管理的需求。社區網格化管理系統作為一種新的管理模式&#xff0c;通過將社區劃分為多個網格單元&#xff0c;使得管理更加精細化、智能化和高效化。本論文基于Sp…

使用EasyExcel實現Excel單元格保護:自由鎖定表頭和數據行

使用EasyExcel實現Excel單元格保護&#xff1a;鎖定表頭和第二行數據 前言 在日常開發中&#xff0c;我們經常需要導出Excel文件&#xff0c;有時還需要對Excel中的某些單元格進行保護&#xff0c;防止用戶誤修改。本文將介紹如何使用EasyExcel 4.0.3實現鎖定Excel表頭和第二行…

dify docker知識庫topk最大值參數配置

1 問題說明 dify構建RAG知識庫過程中&#xff0c;通過會遇到一些默認配置不能解決的問題。 比如topk&#xff0c;topk默認最大10&#xff0c;對語義模糊的檢索&#xff0c;目標文檔可能沒進前10&#xff0c;出現在10-30區間。 所以&#xff0c;需要調整topk最大值參數。 # T…