拖放操作可以分成两个动作:在某个元素上按下鼠标并移动鼠标 (没有松开鼠标),此时开始拖动;在拖动过程中,只要没有松开鼠标,将会不断地产生拖动事件这个过程被称为 “拖”,把被拖动的元素拖动到另外一个元素上并松开鼠标这个动作被称为“放”。拖放操作由 “拖”和“放”两个动作组成。
1.启动拖动
在HTML 5 中,﹤img../﹥默认是可以拖动的;而﹤a.../﹥元素只要设置了href属性,它默认也是可以拖动的。
对于普通元素而言,如果希望把他变成可拖动的,开发者只要把该元素的draggable属性改为true即可。但仅仅设置该元素的draggable 属性还不够,因为仅仅设置了 draggable="true"只表示该元素可拖动,但拖动时并未携带数据,因此用户看不到拖动效果。
为了让拖动操作能携带数据,应该为被拖动元素的 ondragstart 事件指定监听器,在该监听器中让拖动操作可以携带数据。
2.接受”放“
拖动图片、拖动﹤div../﹥时,被拖到“目的地” 并不接受被拖动的元素——这是因为当被拖动元素被“拖过”document 对象时,document 对象默认阻止了拖动事件,而其他的HTML组件也是位于document对象内的,因此他们也不能接受”放“
为了让document可以接受”放“,应该为document的ondragover事件指定监听器,在监听器中取消document对拖动事件的默认行为。
当用户把﹤div../﹥元素拖到指定位置释放后,Firefox 浏览器默认会打开一个新页面,页面的 URL 正是拖放操作携带的数据。但如果使用 Chrome 浏览器来浏览该页面,当用户把﹤div../﹥元素拖到指定位置释放后,Chrome 浏览器并没有执行任何默认动作。
由此可见,不同浏览器对于拖放操作的默认动作并不相同,如果开发者希望取消拖放操作的默认动作,则可以为 document 的ondrop 事件鄉定监听器。