前言
近期有个项目需求,需要用到拖动事件。由于不需要考虑IE8等低端浏览器的兼容性, 所以想到HTML5中的drag
事件, 但是发现移动端 android & IOS
并不支持 drag
事件。所有新事物的产生都不是偶然, 所以决定自己去实现一个页面元素的拖动。
实现页面元素的主要思路,是通过监听事件(touchstart
)判断要拖动的元素并定位该元素; 然后监听移动事件(touchmove
)判断手指移动的方向距离并将这些参数转换为元素的移动方向距离,通过 transform
(当然也可以通过定位top&left
等)移动元素; 当然有开始就有停下来,所以还要监听结束(touchend
)事件,在结束的时候进行相应的处理,返回初始位置,或者停在结束的位置。
现在整体思路有了,然后就是一步步的实现。
demo (请在移动端打开或者模拟移动端打开)
手机请扫
js实现拖动操作
初始化
就像盖房子需要打地基一样,写程序实现一个功能需要初始化。
初始化主要是对传入参数处理,然后做一些基本定义。在这里实现的拖动操作, 以将页面元素拖入垃圾箱为背景来进行一系列的操作。
首先, 我们需要定义可操作的元素,即需要被拖动的元素。接下来就是对可操作元素进行操作,这里需要绑定事件,也就是touch事件,包括 touchstart/touchmove/touchend
。在对应的事件内进行相应的操作,从而完成拖动
事件绑定
初始化之后,我们就需要对可操作元素进行事件的绑定,
先上代码,以下分别是对应touch事件以及对应的操作
|
|
注:以上代码是基于将元素拖入垃圾箱的相应事件函数,可根据自己项目情况进行调整,这里提供思路。
有了事件监听,探知了我们手指触摸、移动、抬起等,我们要将对应的操作实现到页面内的元素,便需要一个移动元素的操作,便是上边的 setMove
函数(以下方法使用前确定你的浏览器支持)
|
|
没错就是简单粗暴的调整 css
来实现移动元素
当然再加上验证元素是否越界(这个界限根据自己情况指定,可以在自己设定的一个盒模型内,也可以是整个屏幕,根据自己情况而定,这里不贴代码)
因为我这里有个垃圾桶,所以需要判断拖动元素是否落入垃圾桶,然后进行后续操作
|
|
致此整个移动过程都已实现
此处只是指出思路,具体执行过程根据自己的项目情况进行相应的调整
欢迎留言交流,如需转载请注明出处