re-resizable 实现分析

553 阅读1分钟

1. 简介

  使用代码版本 6.9.11 , git : git@github.com:bokuweb/re-resizable.git

2. Resizable 组件内容

 使用 enable 属性控制每个方向是否需要绘制 Resizer

 Resizer:控制当前方向上的鼠标事件 , 然后在鼠标事件内计算新的 width 和 height 设置 Wrapper div的 style 属性,达到调整 width 和 height 的功能

   1.png

render 代码

2.png renderSizer 代码

3.png

3. 代码分析

 1. 在 Resizer 组件内监听 mouseDown 和 touchdown 事件 ,触发 外层 组件 onResizeStart 事件

4.png 2. onResizeStart 方法会执行绑定 mouseUp 和 touchUp 事件,以及 保存开始拖拽 ,计算 比例 等 开始拖拽的一些数据

image.png

6.png

  1. 此时绑定的新的 mouseMove 会执行,根据一些限制条件 比如 min 和 max 的width 和 height 计算出 最后拖拽的 width 和 height 设置给 state ,组件会重新render

7.png

8.png

  1. 重新render的时候会将width 和 heigth 设置给 Wrapper(默认是div)

9.png

10.png

  1. 鼠标up的时候,会解绑 鼠标事件 ,设置拖拽结束属性。所以mouch和 touch 事件是在每次 执行拖拽的时候绑定的,在结束拖拽的时候会解绑

如果设置了props的 size 属性会覆盖 计算得到的 width 和 height

11.png

12.png

13.png