自定義 draggable 拖拽樣式


使用場景

發生拖動時,瀏覽器會基於元素自動生成半透明圖。但是業務可能需要修改樣式/圖的透明度,這時候就需要自定義樣式

api

查找 MDN 的 api 后可以發現,DataTransfer.setDragImage() 可以修改拖拽圖片,但是介紹說是 img 或者 canvas

圖像通常是一個 <image> 元素,但也可以是<canvas> 或任何其他圖像元素

經實驗,實際上該 api 可以用任意元素

使用虛擬 DOM

雖然實驗是可以用任意元素,但如果使用虛擬 DOM 會發現拖拽圖片是無效的,因為規范規定

Otherwise, image should be a visible node and the drag image will be created from this.

所以使用虛擬 DOM 必須需要插入 DOM 樹中,並在瀏覽器中可見
但是大部分情況下我們並不需要顯示該虛擬 DOM,於是需要方案可以隱藏該 DOM,但是對瀏覽器可見
經試驗,可以設置元素樣式為

position: absolute;
left: -100px; /* 或者 top */

此時,該元素對用戶不可見,但是對瀏覽器可見
ps. 虛擬 DOM 的插入和移除可以分別放在 dragstartdragend

參考鏈接

Setting a custom ghost image when using HTML5 drag and drop
DataTransfer.setDragImage()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM