完成的效果是,父元素内的单个元素item可以通过拖拽定位。在线地址
ps:目前效果是拖拽目标以及定位目标互换位置,后面一点会做拖拽目标添加到定位目标之前,定位目标之后的元素一次向下移动
实现思路是每一个li标签都是一个可以成为拖拽目标的元素,也就是我会触发每一个li标签的dragover以及drop事件,而拖拽的内容我会放到li标签的子元素中,这里我用的a标签。通过dragstart事件setData我需要的属性,也就是拖动目标的index,这里我使用了jq的index(),获得拖动a标签的父元素li在整个ul中的index。然后在drop事件中使用getData获得index,进行后续操作。
dom结构,dragbox是用来盛放拖动元素的,以及触发drop事件,dragList是需要拖动的元素。
绑定dragstart事件。需要注意的是setData中设置存储内容类型为text,name后面的值一定要为string类型,在比较宽容的chorme中不会出现问题,但是在固执傲娇的ie下就GG了。
还有一个大大的bug就是,在chorme下依旧没有问题,但是在ie下存在的就是,设置的dragbox允许拖拽放置框需要有自己的高度,最开始我给.dragbox设置padding,以及用a标签撑起高度,在ie下并不会捕捉到dragbox的dragover,drop事件,所以需要手动的为每一个盒子设置高度。
兼容性还是不错的chorme,firefox都是没有问题的,safari我没有测试过,ie10,ie11都是没有问题,网上有很多在ie9下有这个api但是需要做其他的兼容才能使用,但是我给box添加了height以后,ie9至少现在是完美支持的。
这算是我实习一个月以来,自己认真爬的第一坑。drag其实我用了不止一次的,但是第一次这么不草率的去研究了一下他,成就感是有的,但是就是对ie的唾弃感更加强烈了。。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。