DOM 练习 拖拽便签

129 阅读1分钟

效果

便签可以在视口移动, 但不会超出视口. 动画.gif

步骤

  1. mousedown 事件 开始监听
  2. mousemove 事件 记录鼠标移动轨迹
  3. 改变 note left top 位置
  4. 安全边界检查
  5. keyup 事件 取消监听

结构

image.png

记录信息

onmousedown 鼠标按下

  1. 视口宽高
  2. 鼠标按下位置X,Y
  3. 便签宽高
  4. 计算安全边界值(maxLeft,maxTop)

onmousemove 鼠标按下移动

  1. 记录偏移量(e.clientX-鼠标按下时X)
  2. 计算便签位置,加偏移量
  3. 便签安全边界判定
  4. 便签移动位置

onmouseup 鼠标抬起

  1. 清除onmousemove事件
  2. 清除onmouseup事件

边界检查

image.png note 的最大移动宽度, 最大移动高度为绿色区域

maxLeft = 视口宽度 - div实际宽度

maxTop = 视口高度 - div实际高度

最终代码

image.png