今天偶然看到 HTML5 的拖拽新特性,比较感兴趣,通过一个简单的 demo 学习学习。
不废话,先看看最终实现的样子:
我称之为《鬼灭之圣诞之拖拽排序🎄》:)
用鬼灭的图做了个九宫格,可拖放任意一张调整九张图的顺序。
实现过程, 首先把页面结构和样式写好:
1 |
|
1 |
|
关于拖放
写排序功能前,需要先了解一下我们拖放 API:
在 HTML5 标准实施之前,拖拽也是被广泛使用的,web 开发者将 click、mouseover,mousemove 组合起来实现拖放逻辑,过程略显冗余和繁琐。
在 HTML5 中,拖放成为了标准的一部分,只需将元素 draggable 属性设为 true,就能够拖放元素。拖放流程大致如下图(省略了 dragleave 和 dragexit):
HTML5 不仅仅定义了拖拽的事件类型,还在事件对象中规范了一个重量级的对象:dataTransfer
。借助它可以实现数据传输、拖拽图案设定、拖拽文件上传,可通过event.dataTransfer
来访问该对象。
添加拖放事件
由于拖动是实时的,所以没有使用drop
而是使用了dragover
。并且用一个变量来保存当前拖动的元素。这里使用事件委托,直接使用#container
来监听。
1 |
|
OK,这样基本的排序就做好了,如果觉得图片切换过于生硬的话,还可以添加一些动画效果,让过渡再平滑一些。