JavaScript原生实现HTML元素8方位拉伸拖拽

实现思路

拖拽元素(窗口)的实现很简单,在此不过多阐述,主要是选中元素,计算相对位置,然后将事件聚焦到待拖动的元素里面,计算移动的距离,应用到元素的CSS样式上,最后释放事件就可以了。
8方位的拉伸,网上现在先行的比较流行的代码是在一个DIV里面添加8个DIV以确定方位角,(但是这种方法真的是low爆了)完全不符合现行的模块化开发思路。(我总不能为了做个拉伸,还得在里面添加8个无用的DIV吧)所以,最好的方式,就是鼠标到元素(窗口)的指定位置,就能变换光标样式,(就和你在window里面拉动窗口一样)这样就必然会使用到mousemove事件,所以只要能确定元素的X/Y向偏移和元素自身的长宽,这个问题就很好解决了。
对于拉伸而言,方位检测一旦完成,拉伸就很好做了,和拖拽的思路基本一致,拖拽是改变元素的top/left值,而拉伸改变的是height/width/top/left的值罢了。

代码实现

<html>
  <head>
  </head>
  <body>
    <div id="main" style="width: 200px; height: 200px; background: #cccccc;"></div>
    <script>
      const el = document.querySelector('#main')
      el.style.position = 'absolute'
      el.style.top = '100px'
      el.style.left = '100px'
      el.style.zIndex = "99"
      const accuracy = 10
      const minWidth = 100
      const minHeight = 100
      el.onmousemove = (event) => {
   
        const x = event.clientX
        const y = event.clientY
        const topYUpperLimit = el.offsetTop + accuracy, topYLowerLimit = el.offsetTop
        const bottomYUpperLimit = el.offsetTop + el.clientHeight, bottomYLowerLimit = el.offsetTop + el.clientHeight - accuracy
        const leftXUpperLimit = el.offsetLeft + accuracy, leftXLowerLimit = el.offsetLeft
        const rightXUpperLimit = el.offsetLeft + el.clientWidth, rightXLowerLimit = el.offsetLeft + el.clientWidth - accuracy
        const CENTER = 0, LEFTTOP = 1, TOP = 2, RIGHTTOP = 3, RIGHT = 4, RIGHTBOTTOM = 5, BOTTOM = 6, LEFTBOTTOM = 7, LEFT = 8
        const checkWindowSize = (el) => {
   
          if 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值