亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

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

legendmohe / 1091人閱讀

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

什么是 Drag and Drop (拖放)?

簡(jiǎn)單來(lái)說(shuō),HTML5 提供了 Drag and Drop API,允許用戶(hù)用鼠標(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 的元素類(lèi)型,一個(gè)典型的 drag 操作是這樣開(kāi)始的:用戶(hù)用鼠標(biāo)選中一個(gè)可拖動(dòng)的(draggable)元素,移動(dòng)鼠標(biāo)到一個(gè)可放置的(droppable)元素,然后釋放鼠標(biāo)。 在操作期間,會(huì)觸發(fā)一些事件類(lèi)型,有一些事件類(lèi)型可能會(huì)被多次觸發(fā)(比如drag 和 dragover 事件類(lèi)型)。

總結(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)用戶(hù)開(kāi)始拖動(dòng)一個(gè)元素或選中的文本時(shí)觸發(fā)。
drag 當(dāng)拖動(dòng)元素或選中的文本時(shí)觸發(fā)。
dragend 當(dāng)拖拽操作結(jié)束時(shí)觸發(fā) (比如松開(kāi)鼠標(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)元素或選中的文本離開(kāi)一個(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)事件行為,以防止打開(kāi)一個(gè)新的標(biāo)簽

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

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

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

DataTransfer 常用屬性
屬性 類(lèi)型 描述
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ù)的類(lèi)型列表作為第一項(xiàng),順序與被添加數(shù)據(jù)的順序一致。如果沒(méi)有添加數(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ù)傳輸類(lèi)型,例如:text/plain

功能檢測(cè)

想象一下我們想開(kāi)發(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è)用戶(hù)瀏覽器是否支持 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,避免用戶(hù)在拖拽時(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://www.ezyhdfw.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è)置屬性為,表示該元素可以被拖拽。 拖放是很常見(jiàn)的一種交互效果,很多時(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
  • 原生JS快速實(shí)現(xiàn)拖放(drag and drop)效果

    摘要:接下來(lái)我們就用原生和快速實(shí)現(xiàn)這樣的拖放效果的內(nèi)容很簡(jiǎn)單,就是五個(gè)空的容器和一個(gè)可以被拖拽的元素注意點(diǎn)容器的的為,用于接收被拖拽的元素,可被拖拽的元素為,同時(shí)設(shè)置屬性為,表示該元素可以被拖拽。 拖放是很常見(jiàn)的一種交互效果,很多時(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è)置屬性為,表示該元素可以被拖拽。 拖放是很常見(jiàn)的一種交互效果,很多時(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

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

0條評(píng)論

legendmohe

|高級(jí)講師

TA的文章

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