实战Directive -- 图片拖拽显示
前言
Directive即Angular中常说的"指令",在Angular中通过如下代码:
@Directive({
selector: [appMyDirctive]
})
export class MyDirective {
...
}
将一个类标注为指令(只指定selector是指令的最简化的定义)。这样我们在html模板中使用的时候就可以通过这样的方式:
<div MyDirective></div>
给使用了我们的指令的DOM中的元素添加自定义行为,如上述代码中的div。
本篇文章通过一个图片拖拽的例子让大家对Directive的使用有一个具体的了解。实现效果为:拖动一个图片到指定的框中,能显示图片。
拖放事件
首先我们需要对HTML中的拖放特性有一个简单的了解。拖放我们可以将它看作是一个传输数据的动作,它有一个源(data source)以及一个目标(data target),也就是说拖放将数据从source传到了target。
拖放有如下对象/事件:
- DataTransfer对象:我们通过这个对象来传递数据,使用方式为Event.dataTransfer。
- draggable属性:即标签元素设置draggable=true才有效果。
- ondragstart 事件:当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上。
- ondragenter 事件:当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上。
- ondragover 事件:拖拽元素在目标元素上移动的时候触发的事件,此事件作用在目标元素上。
- ondragleave 事件:拖拽元素在目标元素上移动的时候触发的事件,此事件作用在目标元素上。
- ondrop 事件:被拖拽的元素在目标元素上同时滑鼠放开触发的事件,此事件作用在目标元素上。
- ondragend 事件:当拖拽完成后触发的事件,此事件作用在被拖曳元素上。
- event.preventDefault() 方法:阻止默认的事件方法等执行。在ondragover中一定要执行preventDefault(),否则ondrop事件不会被触发。另外,如果是从其他应用软体或是文件中拖东西进来,尤其是图片的时候,默认的动作是显示这个图片或是相关信息,并不是真的执行drop。此时需要用用document的ondragover事件把它直接干掉。
- event.setDataTransfer.effectAllowed 属性:就是拖拽的效果。
- evetn.setDataTransfer.setDragImage() 方法:指定图片或者文档元素做拖动时的视觉效果。
上述是在HTML5中的拖放事件说明,在Angular稍显区别: