成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用 Drag and Drop 給Web應(yīng)用提升交互體驗(yàn)

legendmohe / 985人閱讀

摘要:注意點(diǎn)在鼠標(biāo)操作拖放期間,有一些事件可能觸發(fā)多次,比如和??赏献г?,建議使用,設(shè)定可拖拽元素的鼠標(biāo)游標(biāo),提升交互。在中使用拖拽中使用可以直接綁定到組件上。

什么是 Drag and Drop (拖放)?

簡(jiǎn)單來(lái)說(shuō),HTML5 提供了 Drag and Drop API,允許用戶用鼠標(biāo)選中一個(gè)可拖動(dòng)元素,移動(dòng)鼠標(biāo)拖放到一個(gè)可放置到元素的過(guò)程。

我相信每個(gè)人都或多或少接觸過(guò)拖放,比如瀏覽器多標(biāo)簽頁(yè)之間的可拖放排序、手機(jī)中的App可以隨便拖放排序等等,Drag and Drop 已經(jīng)給我們提供了更便捷、更靈活的網(wǎng)絡(luò)應(yīng)用體驗(yàn)。

HTML5 Drag and Drop

DnD 規(guī)范定義了基于事件的拖放機(jī)制和附加標(biāo)記,以標(biāo)記網(wǎng)頁(yè)上幾乎所有 draggable 的元素類型,一個(gè)典型的 drag 操作是這樣開始的:用戶用鼠標(biāo)選中一個(gè)可拖動(dòng)的(draggable)元素,移動(dòng)鼠標(biāo)到一個(gè)可放置的(droppable)元素,然后釋放鼠標(biāo)。 在操作期間,會(huì)觸發(fā)一些事件類型,有一些事件類型可能會(huì)被多次觸發(fā)(比如drag 和 dragover 事件類型)。

總結(jié)起來(lái)很簡(jiǎn)單:

Drag Source(What to drag) => Drop Target(Where to drop)

拖拽事件

所有的拖拽事件都對(duì)應(yīng)一個(gè) global event handler,Dnd API 一個(gè)有8個(gè)事件,可以分為綁定在 Drag Source 上3個(gè)、綁定在 Drag Target 上5個(gè)

Drag Source
Event Description
dragstart 當(dāng)用戶開始拖動(dòng)一個(gè)元素或選中的文本時(shí)觸發(fā)。
drag 當(dāng)拖動(dòng)元素或選中的文本時(shí)觸發(fā)。
dragend 當(dāng)拖拽操作結(jié)束時(shí)觸發(fā) (比如松開鼠標(biāo)按鍵或敲“Esc”鍵)。
Drop Target
Event Description
dragenter 當(dāng)拖動(dòng)元素或選中的文本到一個(gè)可釋放目標(biāo)時(shí)觸發(fā)。
dragover 當(dāng)元素或選中的文本被拖到一個(gè)可釋放目標(biāo)上時(shí)觸發(fā)(每100毫秒觸發(fā)一次)。
dragexit 當(dāng)元素變得不再是拖動(dòng)操作的選中目標(biāo)時(shí)觸發(fā)。
dragleave 當(dāng)拖動(dòng)元素或選中的文本離開一個(gè)可釋放目標(biāo)時(shí)觸發(fā)。
drop 當(dāng)元素或選中的文本在可釋放目標(biāo)上被釋放時(shí)觸發(fā)。

注意點(diǎn)

在鼠標(biāo)操作拖放期間,有一些事件可能觸發(fā)多次,(比如:dragdragover)。使用時(shí)注意防抖節(jié)流

dragover 事件中使用 event.preventDefault() 阻止默認(rèn)事件行為時(shí),才能正確觸發(fā) drop 事件

在 Firefox 瀏覽器中觸發(fā) drop 時(shí)要使用 event.preventDefault() 阻止默認(rèn)事件行為,以防止打開一個(gè)新的標(biāo)簽

數(shù)據(jù)接口

HTML拖拽的數(shù)據(jù)接口有三個(gè) DataTransfer、DataTransferItemDataTransferItemList。

在進(jìn)行拖放操作時(shí),DataTransfer 對(duì)象用來(lái)保存,通過(guò)拖放動(dòng)作,拖動(dòng)到瀏覽器的數(shù)據(jù)。它可以保存一項(xiàng)或多項(xiàng)數(shù)據(jù)、一種或者多種數(shù)據(jù)類型。

DataTransfer 常用屬性
屬性 類型 描述
dropEffect String 獲取 / 設(shè)置實(shí)際的放置效果,它應(yīng)該始終設(shè)置成 effectAllowed 的可能值之一,copy、move、link、none
effectAllowed String 用來(lái)指定拖動(dòng)時(shí)被允許的效果。
Files FileList 保存一個(gè)被存儲(chǔ)數(shù)據(jù)的類型列表作為第一項(xiàng),順序與被添加數(shù)據(jù)的順序一致。如果沒有添加數(shù)據(jù)將返回一個(gè)空列表。
types DOMStringList 包含一個(gè)在數(shù)據(jù)傳輸上所有可用的本地文件列表。如果拖動(dòng)操作不涉及拖動(dòng)文件,此屬性是一個(gè)空列表。
DataTransfer 常用方法

void clearData([in String type])

String getData(in String type)

void setData(in String type, in String data)

void setDragImage(in nsIDOMElement image, in long x, in long y)

注意點(diǎn)

通過(guò)定義 MIME (Multipurpose Internet Mail Exchange)來(lái)指定數(shù)據(jù)傳輸類型,例如:text/plain

功能檢測(cè)

想象一下我們想開發(fā)一個(gè)使用HTML5 DnD API來(lái)實(shí)現(xiàn)的豐富可交互式的應(yīng)用。結(jié)果因?yàn)闉g覽器不支持,是不是很糟糕。對(duì)我們是否需要使用降級(jí)方案還是有很重要的參考意義的。

下面有兩種常用的方法來(lái)幫助我們來(lái)檢測(cè)。

caniuse

Modernizr

Modernizr 是一個(gè)出色的可用于檢測(cè)用戶瀏覽器是否支持 HTML5CSS3 功能的庫(kù)。

if (Modernizr.draganddrop) {
  // Browser supports HTML5 DnD.
} else {
  // Fallback to a library solution.
}
實(shí)現(xiàn)拖拽 HTML Attribute

實(shí)現(xiàn)拖拽元素只需要在dom標(biāo)簽上加入 draggable="true"

CSS User Interface

user-select

可拖拽元素,建議使用 user-select,避免用戶在拖拽時(shí)選取到內(nèi)部元素。

[draggable="true"] {
  /*
   To prevent user selecting inside the drag source
  */
  user-select: none;
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
}

cursor

可拖拽元素,建議使用 cursor,設(shè)定可拖拽元素的鼠標(biāo)游標(biāo),提升交互。

[draggable="true"] {
  cursor: move;
}
在 Vue 中使用拖拽

Vue 中使用 dnd 可以直接綁定 event 到組件上。

下面栗子包含的內(nèi)容:

使用Vue實(shí)現(xiàn)拖放

拖放事件以及事件觸發(fā)的時(shí)機(jī)

拖放事件的一些效果處理

拖拽系統(tǒng)文件到瀏覽器

https://codesandbox.io/embed/...

DnD 能做什么?

提升網(wǎng)頁(yè)上操作交互體驗(yàn)

提供列表排序功能

本機(jī)與瀏覽器交互

HTML5游戲

...更多

推薦一些不錯(cuò)的DnD庫(kù)

interact.js - JavaScript drag and drop, resizing and multi-touch gestures with inertia and snapping for modern browsers (and also IE9+)

Sortable - Sortable — is a JavaScript library for reorderable drag-and-drop lists on modern browsers and touch devices.

draggable - The JavaScript Drag & Drop library your grandparents warned you about.

Vue.Draggable - Vue component allowing drag-and-drop sorting in sync with View-Model. Based on Sortable.js

vue-grid-layout - A draggable and resizable grid layout, for Vue.js.

vue-draggable-resizable - Vue2 Component for draggable and resizable elements.

react-dnd - Drag and Drop for React

react-beautiful-dnd - Beautiful and accessible drag and drop for lists with React

react-grid-layout - A draggable and resizable grid layout with responsive breakpoints, for React.

參考

Mozilla HTML_Drag_and_Drop_API

Native HTML5 Drag and Drop

caniuse

Working with HTML5 Drag-and-Drop

原文:使用 Drag and Drop 給Web應(yīng)用提升交互體驗(yàn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/53304.html

相關(guān)文章

  • 原生JS快速實(shí)現(xiàn)拖放(drag and drop)效果

    摘要:接下來(lái)我們就用原生和快速實(shí)現(xiàn)這樣的拖放效果的內(nèi)容很簡(jiǎn)單,就是五個(gè)空的容器和一個(gè)可以被拖拽的元素注意點(diǎn)容器的的為,用于接收被拖拽的元素,可被拖拽的元素為,同時(shí)設(shè)置屬性為,表示該元素可以被拖拽。 拖放是很常見的一種交互效果,很多時(shí)候我們都會(huì)借助于第三方的控件來(lái)實(shí)現(xiàn),其實(shí)用原生js實(shí)現(xiàn)起來(lái)也非常的方便。接下來(lái)我們就用原生js和css快速實(shí)現(xiàn)這樣的拖放效果: showImg(https://s...

    objc94 評(píng)論0 收藏0
  • 原生JS快速實(shí)現(xiàn)拖放(drag and drop)效果

    摘要:接下來(lái)我們就用原生和快速實(shí)現(xiàn)這樣的拖放效果的內(nèi)容很簡(jiǎn)單,就是五個(gè)空的容器和一個(gè)可以被拖拽的元素注意點(diǎn)容器的的為,用于接收被拖拽的元素,可被拖拽的元素為,同時(shí)設(shè)置屬性為,表示該元素可以被拖拽。 拖放是很常見的一種交互效果,很多時(shí)候我們都會(huì)借助于第三方的控件來(lái)實(shí)現(xiàn),其實(shí)用原生js實(shí)現(xiàn)起來(lái)也非常的方便。接下來(lái)我們就用原生js和css快速實(shí)現(xiàn)這樣的拖放效果: showImg(https://s...

    arashicage 評(píng)論0 收藏0
  • 原生JS快速實(shí)現(xiàn)拖放(drag and drop)效果

    摘要:接下來(lái)我們就用原生和快速實(shí)現(xiàn)這樣的拖放效果的內(nèi)容很簡(jiǎn)單,就是五個(gè)空的容器和一個(gè)可以被拖拽的元素注意點(diǎn)容器的的為,用于接收被拖拽的元素,可被拖拽的元素為,同時(shí)設(shè)置屬性為,表示該元素可以被拖拽。 拖放是很常見的一種交互效果,很多時(shí)候我們都會(huì)借助于第三方的控件來(lái)實(shí)現(xiàn),其實(shí)用原生js實(shí)現(xiàn)起來(lái)也非常的方便。接下來(lái)我們就用原生js和css快速實(shí)現(xiàn)這樣的拖放效果: showImg(https://s...

    jzzlee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

legendmohe

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<