前言
有这么一种人,很多地方都会需要他,有这么一种人他一辈子只做一件事,并且做的足够好,在任何地方都能落地生根,服务大众。比如说保洁阿姨,也就是说这里被需求的它是大众化的,可被抽象化的,如果我们用程序中的专有名词来形容可以为组件,组件的存在就是干一件事,有自己存在的目标( 意义 ),有自己的行为,自己的动作,甚至这里的组件是可以被调用者配置的,就好像保洁阿姨是可以被公司分配到不同的工作地点,薪资也是可配置的。这篇文章就是讲如何将一个组件从0到1的过程( 注意暂时这个组件不会涉及到配置部分 )
需求
你可以点击上面的两个链接提前感受一下这个插件可能要完成的功能,以及点击源码地址查看源代码。其实非常的平常,他要做的事就是允许用户通过鼠标拖拽来改变页面上某些元素的位置,从而完成类似排序的功能
使用方式
先引入dragToSort.js文件
- 每个组件都有自己的html结构,所以需要遵循以下的html结构
|
|
- 调用 以下两句代码既可以完成以上所诉需求
|
|
源代码分析
插件以面向对象的形式完成,构造函数内部有一些原型上需要用到的一些数据,挂在到原型上面的方法完成插件的主要功能。
构造函数
构造函数 主要存储插件方法中需要用到的数据
|
|
原型
>
|
|
接下来开始详细解释各段代码
getPos
通过对需要拖拽的元素,进行遍历,用数组将其位置信息存储起来,并给每个元素设置一个初始的索引值(为什么要用到索引值,后面会说到)
|
|
css
设置元素样式的的简易函数封装,接受一个元素对象,和设置css样式的对象
|
|
getStyle
获取元素样式兼容函数封装
|
|
startMove
动画函数
|
|
setPos
将浮动布局转化为定位布局
|
|
crash
检查两个物体是否发生碰撞,要检查两个物体是否发生碰撞,值需要检查它们的位置关系就可以,也就是两物体没有重叠区域。如图,另一个物体处于红色圆圈位置便不会发生碰撞,反之
|
|