jQuery 版“元素拖拽改变大小” jquery拖动改变dom大小

436 阅读1分钟

jQuery 版“元素拖拽改变大小”原型,底层原理为对鼠标事件中的鼠标位置进行计算,将计算后的数值重新付给dom的宽高即可。其实可以修改成原生js的。
当然有很多插件可以做到,更为方便。但这个代码不长,倒是可以临时用用。
不是我写的,是https://www.cnblogs.com/yelaiju/archive/2012/02/16/2354602.html

<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>jQuery 版“元素拖拽改变大小”原型</title>
    <!--引用jquery-->
		<script
		type="text/javascript"
		src="../../../js/jquery-1.4.4.min.js"
	></script>
    <script type="text/javascript">
    
      $(function () {
        //绑定需要拖拽改变大小的元素对象
				bindResize(document.getElementById("test"));
				console.log(document)
      });
      function bindResize(el) {
        //初始化参数
        var els = el.style,
          //鼠标的 X 和 Y 轴坐标
          x = (y = 0);
        //邪恶的食指
        $(el).mousedown(function (e) {
          //按下元素后,计算当前鼠标与对象计算后的坐标
          (x = e.clientX - el.offsetWidth), (y = e.clientY - el.offsetHeight);
          //在支持 setCapture 做些东东
          el.setCapture
            ? //捕捉焦点
              (el.setCapture(),
              //设置事件
              (el.onmousemove = function (ev) {
                mouseMove(ev || event);
              }),
              (el.onmouseup = mouseUp))
            : //绑定事件
              $(el).bind("mousemove", mouseMove).bind("mouseup", mouseUp);
          //防止默认事件发生
          e.preventDefault();
        });
        //移动事件
        function mouseMove(e) {
          //宇宙超级无敌运算中...
          (els.width = e.clientX - x + "px"),
            (els.height = e.clientY - y + "px");
        }
        //停止事件
        function mouseUp() {
          //在支持 releaseCapture 做些东东
          el.releaseCapture
            ? //释放焦点
              (el.releaseCapture(),
              //移除事件
              (el.onmousemove = el.onmouseup = null))
            : //卸载事件
              $(el)
                .unbind("mousemove", mouseMove)
                .unbind("mouseup", mouseUp);
        }
      }
    </script>
    <style type="text/css">
      #test {
        position: absolute;
        top: 0;
        left: 0;
        width: 400px;
        height: 300px;
        background: #f1f1f1;
        text-align: center;
        line-height: 100px;
        border: 1px solid #ccc;
        cursor: se-resize;
      }
    </style>
  </head>
  <body>
    <div id="test">这是内容</div>
  </body>
</html>

备注:

<template>
  <div class="wrap" @mouseup="handleUp">

    <div id="tuozhuai" class="tuozhuai" @mousedown="handleDown"></div>

  </div>

</template>

<script>

export default {

  name: 'pdf',

  data () {

    return {

    }

  },

  methods: {

    handleUp () {

      var tuozhuaiNode = document.getElementById('tuozhuai')

      tuozhuaiNode.onmousemove = null

    },

    handleDown (edown) {

      var tuozhuaiNode = document.getElementById('tuozhuai')

      var xNum = edown.clientX - tuozhuaiNode.offsetWidth

      tuozhuaiNode.onmousemove = function (eMove) {

        tuozhuaiNode.style.width = eMove.clientX - xNum + 'px'

      }

    }

  }

}

</script>

<style lang="scss" scoped>

.wrap {

  width: 100%;

  height: 100%;

  background-color: pink;

}

.tuozhuai {

  width: 100px;

  height: 500px;

  border: 1px solid blue;

  cursor: e-resize;

}
</style>