div不占位置_js组件-可改变大小的div

在实现了可拖动div的组件后,又联想到拖拽可改变div大小的需求,话不多说先看效果,再来慢慢分析

55277a1e34aedae55af604355f4bfb28.gif

可所以改变大小的div

组件分析

  • 给目标div增加四周的边框,并且在边框的八个方向增加拖拽点,分别用方向的首字母组合代替
  • 当鼠标落在八个点上时,鼠标形状变成向各个方向拖拽的形状
  • 当鼠标按下并拖拽时,计算div新的位置和大小,并改变div

逻辑挺简单的,我们一步步实现

对目标div增加边框

增加边框的逻辑很简单,就是增加一个比目标div大点的div,然后设置边框。代码如下

53d3fa9f5ee6010a5163ac4e73938792.png

生成边框的逻辑

对目标div增加拖动点

对于八个点的信息,我定义了个对象数组分表代表,比如,东面的点我这样表示

a45645f7783654afd11b95d5faa3bc22.png

class:e用于标记这个点的方位为东面,right、top和transform是用来定位点的具体位置,cursor用来设定光标形状(每个方向的光标是不同的),其他方位和这个类似,文末会附上代码

然后遍历这八个对象,分别生成点,并增加鼠标事件监听

40571a58b83e17d5db6726016fe5559c.png

生成点的逻辑

这八个点的拖动处理逻辑有所不同,所以单独写了个函数,函数返回每个方向的处理函数,函数名称和点的class一样,这样就可以直接根据class获取到处理函数,并添加到鼠标监听事件中。这个函数这样定义的:

73c6fb00f694aead959eda7824b6b0cf.png

拖拽函数对象

将生成的边框和点半绑定到目标div

边框和点都有了,接下来就简单了,直接添加到目标div就行(因为生成的都是绝对定位,所以在目标div内部也不影响)

整个组件的结构如下,内容有点多就不贴代码了,感兴趣的可以私信我。

98663045af62c66b53adc3213a2c5c15.png

组件结构

使用就更简单了,和之前一样

e0d5bcdfb1bac3f3f076c7eb94a37b72.png

ps:之前对js组件有篇说明,点此链接,之前的拖拽改动位置的也可以参考下,传送门

源码链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值