github地址:https://github.com/qiangzi7723/draggablegit
目前这个库的兼容作到了兼容IE8,因此若是须要兼容IE8的朋友不妨试试。库里面写了不少的注释,对于想看源码的同窗是一个很好的选择。若是以为不错能够到github上点个star,谢谢各位了。
库的思路部分参考draggabilly的实现,可是由于draggabilly也依赖了几个小的库,致使源码有点臃肿,做者也没去优化,因此我就有个这个想法,写一个新的拖拽库,兼容到IE8。github
打造跨平台的轻量级原生拖拽库api
本身写的一个拖拽库,基于原生JS实现,无任何依赖,同时还作了IE8的兼容,在IE8的状况下transform
回退到position
实现。拖拽的动画经过绑定在render
函数上的requestAnimationFrame
实现而不是使用mousemove
回调。另外库里面还写了不少的注释,方便对源码的解读与交流。若是你以为这个库写的不错或者有值得学习的经验不妨点下右上角的star
,谢谢各位。app
直接从src
文件夹中引入便可函数
<div id='app'></div>
能够直接传入选择器学习
new Draggable('#app');
或者传入DOM节点优化
var elem=document.querySelector('#app'); new Draggable(elem);
若是须要为多个元素添加拖拽,请循环遍历动画
var elem=document.querySelectorAll('.app'); for(var i=0,len=elem.length;i<len;i++){ new Draggable(elem[i]); }
new Draggable('#app',{ parentMove:'#container', backToPosition:false, axis:'x', grid:{x:40}, addClassName:'is-dragging', cursorCancel:false, });
默认的拖拽动画是经过transform
属性实现的,因此若是想使用position
属性实现拖拽动画可使用该参数调试
new Draggable('#app',{ backToPosition:true });
在IE8下会自动使用position
实现拖拽code
经过设置parentMove
能够设置移动的父元素,如
new Draggable('#app',{ parentMove:'#container' });
代表当点击app
元素时,app
元素不会被拖拽,拖拽移动的是整个的container
元素,这个API在须要定义顶部拖拽条的时候颇有用
设置该参数代表只容许某个方向可拖拽
new Draggable('#app',{ axis:'x' });
设置拖拽的时候移动的单位
new Draggable('#app',{ grid:{x:40,y:40} });
为拖拽的过程添加className
,方便增长拖拽样式
new Draggable('#app',{ addClassName:'is-dragging' });
在初始化的时候默认为可拖拽的元素添加cursor:move
属性,若是须要取消能够
new Draggable('#app',{ cursorCancel:true });