当前位置: 首页 > Web前端 > HTML

使用DragandDrop提高Web应用的交互体验

时间:2023-04-02 11:20:22 HTML

什么是DragandDrop(拖放)?简单来说,HTML5提供了DragandDropAPI,允许用户用鼠标选择一个可拖动的元素,移动鼠标拖放一个可以放置在该元素上的过程。相信大家或多或少都接触过拖放,比如浏览器中多个标签页之间的拖放排序,手机中app的拖放排序等等,拖放已经为我们提供了更方便、更灵活的网络应用体验。HTML5DragandDropDnD规范定义了一种基于事件的拖放机制和附加标签来标记网页上几乎所有的可拖动元素类型。一个典型的拖动操作是这样开始的:用户用鼠标选择一个可拖动(draggable)的元素,将鼠标移到一个可放置的元素上,然后释放鼠标。在操作过程中,某些事件类型会被触发,而某些事件类型可能会被触发多次(例如drag和dragover事件类型)。总结起来很简单:DragSource(Whattodrag)=>DropTarget(Wheretodrop)dragevent所有的拖动事件都对应一个全局的事件处理函数,DndAPI有8个事件,可以分为绑定在3个ontheDragSource,5boundontheDragTargetDragSourceEventDescriptiondragstart当用户开始拖动元素或选定文本时触发。drag在拖动元素或选定文本时触发。dragend当拖动操作结束时触发(例如释放鼠标按钮或按下“Esc”键)。DropTargetEventDescriptionDragenter当元素或选定的文本被拖动到放置目标时触发。dragover当元素或选定的文本被拖动到放置目标上时触发(每100毫秒)。dragexit当元素不再是拖动操作的选定目标时触发。dragleave当拖动的元素或选定的文本离开可放置的目标时触发。drop当一个元素或选定的文本被放置在一个可放置的目标上时触发。注意在鼠标操作拖放过程中,有些事件可能会被触发多次,(如:draganddragover)。使用时注意防抖或节流。当使用event.preventDefault()来阻止dragover事件中的默认事件行为时,可以正确触发drop事件。在Firefox浏览器中触发drop时,使用event.preventDefault()来阻止默认的事件行为,防止打开新标签页数据界面HTML拖拽数据界面有DataTransfer、DataTransferItem和DataTransferItemList三个。在拖放操作过程中,DataTransfer对象用于保存通过拖放动作拖拽到浏览器的数据。它可以保存一种或多种数据,一种或多种数据类型。DataTransfer公共属性属性类型说明dropEffectString获取/设置实际的放置效果,应该始终设置为effectAllowed、copy、move、link的可能值之一,noneeffectAllowedString用于指定拖动时允许的效果。FilesFileList将存储的数据类型列表作为第一项,其顺序与添加数据的顺序相同。如果没有添加数据,则返回一个空列表。typesDOMStringList包含数据传输中可用的所有本地文件的列表。如果拖动操作不涉及拖动文件,则该属性为空列表。DataTransfer常用方法voidclearData([inStringtype])StringgetData(inStringtype)voidsetData(inStringtype,inStringdata)voidsetDragImage(innsIDOMElementimage,inlongx,inlongy)通过定义注意点MIME(MultipurposeInternetMailExchange)来指定数据传输类型,例如:text/plainfunctiondetection想象一下,我们要开发一个使用HTML5DnDAPI实现的丰富的交互式应用程序。事实证明它很糟糕,因为浏览器不支持它。对我们是否需要使用降级方案还是有很大的参考意义的。下面介绍两种常用的方法来帮助我们检测。caniuseModernizrModernizr是一个优秀的库,可以用来检测用户的浏览器是否支持HTML5和CSS3特性。if(Modernizr.draganddrop){//BrowsersupportsHTML5DnD.}else{//Fallbacktoalibrarysolution.}要实现拖放HTML属性实现拖放元素只需要添加draggable="true"

CSS用户界面用户选择可以拖放元素。推荐使用user-select来防止用户在拖动时选择内部元素。[draggable="true"]{/*防止用户在拖动源内选择*/user-select:none;-moz-用户选择:无;-webkit-用户选择:无;-ms-user-select:none;}cursor是一个可拖动的元素。建议使用cursor来设置可拖动元素的鼠标光标,以提高交互性。[draggable="true"]{cursor:move;}在Vue中使用拖放在Vue中使用dnd可以直接将事件绑定到组件上。下面举个栗子:用Vue实现拖拽事件和事件触发的时机。拖拽事件的一些效果处理拖拽系统文件到浏览器https://codesandbox.io/embed/...DnD能做什么??改善网页上的操作和交互体验提供列表排序功能原生和浏览器交互HTML5游戏...更多推荐一些不错的DnD库interact.js-JavaScript拖放、调整大小和多点触控手势,具有惯性和捕捉功能,适用于现代浏览器(以及IE9+)Sortable-Sortable-是一个JavaScript库,用于现代浏览器和触摸设备上的可重新排序的拖放列表。draggable-你的祖父母警告过你的JavaScript拖放库。Vue.Draggable-Vue组件允许拖动-与View-Model同步的删除排序。基于Sortable.jsvue-grid-layout-可拖动和可调整大小的网格布局,适用于Vue.js.vue-draggable-resizable-用于可拖动和可调整大小元素的Vue2组件。react-dnd-用于React-beautiful-dnd的拖放-带有React-react-grid-layout的列表的漂亮且可访问的拖放-用于React的具有响应断点的可拖动和可调整大小的网格布局.参考MozillaHTML_Drag_and_Drop_APINativeHTML5DragandDropcaniuseWorkingwithHTML5Drag-and-Drop原文:使用拖放增强Web应用程序的交互体验