首先说下HTML5里新增的draggable属性
在Html5中,默认<img.../>和设置了href的<a>是可拖动的,其他都需手动把元素的draggable属性设置为true
然后使元素携带数据应该为被拖动元素的ondragstart(开始拖动触发该事件)事件指定监听器,在监听器中让拖动操作可以携带数据。
之后为了让document接受放的动作,为documen的ondragover事件设定监听器,在监听器中取消document对拖动事件的默认行为。
然而,不同浏览器在元素拖到指定位置释放之后默认的动作是不同的(firefox释放后会跳转到新页面,chrome则没有任何动作),所以
我们要取消拖放操作的默认动作,为document的ondrop绑定监听器
例如,一个允许自由拖动的div:
附:触发事件
- ondragstart:开始拖动时触发
- ondrag:拖动过程中不断触发
- ondragend:拖动结束时触发
- ondragenter:被拖动元素进入本元素的范围内时触发
- ondragover:被拖动元素进入本元素的范围内拖动时不断触发
- ondragleave:被拖动元素离开本元素时触发
- ondrop:其他元素被放到了本元素时触发
再来说下DataTransfer对象
拖放触发的拖放事件有一个dataTransfer的属性,该属性值是一个DataTransfer对象
对象属性:
- dataTransfer.dropEffect:设置或返回拖放目标上允许发生的拖放行为。如果此处设置的拖放行为不再effectAllowed属性设置的多种拖放行为之内,拖放操作将会失败。该属性值只允许为“null”、“copy”、“link”和“move”四值之一。
- dataTransfer.effectAllowed:设置或返回被拖动元素允许发生的拖动行为。该属性值可设为“none”、“copy”、“copyLink”、“copyMove”、“link”、“linkMove”、“move”、“all”和“uninitialized”。
- dataTransfer.items:该属性返回DataTransferItems对象,该对象代表了拖动数据。
- dataTransfer.setDragImage(element,x,y):设置拖放操作的自定义图标。其中element设置自定义图表,x,y分别为鼠标水平方向和竖直方向的距离。
- dataTransfer.addElement(element):添加自定义图标。
- dataTransfer.types:该属性返回一个DOMStringList对象,该对象包括了存入dataTransfer中数据的所有类型。
- dataTransfer.getData(ormat):获取DataTransfer对象中format格式的数据
- dataTransfer.setData(format,data):向DataTransfer对象中设置format格式的数据。
- dataTransfer.clearData([format]):清除DataTransfer对象中format格式的数据,如果省略format,则清楚全部数据。
下面展示一个允许通过拖动来添加,删除”收藏夹“功能