zoukankan      html  css  js  c++  java
  • vue中 拖动元素边框 改变元素宽度

    先上效果图:

    如图所示,通过拖动来改变表单的宽度。

    但实际上,这边并不是表单的边框,而是一个单独的组件。通过监听鼠标的down,move以及up事件。

    我们可以单独的写个组件handle.vue。

    <template>
      <div class="x-handle" @mousedown="mouseDown"></div>
    </template>
    
    <script>
    export default {
      name: "XHandle",
      data() {
        return {
          lastX: ""
        };
      },
    
      created() {
        document.addEventListener("mouseup", this.mouseUp);
      },
    
      destroyed() {
        document.removeEventListener("mouseup", this.mouseUp);
      },
    
      methods: {
        mouseDown(event) {
          document.addEventListener("mousemove", this.mouseMove);
          this.lastX = event.screenX;
        },
        mouseMove(event) {
          this.$emit("widthChange", this.lastX - event.screenX);
          this.lastX = event.screenX;
          console.log(this.lastX, "...", event.screenX);
        },
        mouseUp() {
          this.lastX = "";
          document.removeEventListener("mousemove", this.mouseMove);
        }
      }
    };
    </script>
    <style lang="less">
    .x-handle {
       2px;
      cursor: w-resize;
      z-index: 10;
      background: #ccc;
    }
    </style>
    

    监听事件并this.$emit将值传给父组件,父组件通过传过来的值来动态的修改需要改变宽度的元素。

    如效果图所示,写一个有需求组件,并引入handle组件

    <div class='sss'>    
      <div  :style="{  width + 'px' }" ></div> // 这里是你自己需要改变宽度的组件
      <XHandle class="myxhandle" @widthChange="widthChange" />
    </div>
    
    <script>
    import XHandle from "@/components/Xhandle";
    export default {
      data() {
        return {
           700,
        };
      },
      components: {
        XHandle
      },
    
      methods: {
        widthChange(movement) {
          console.log(movement, "~~~");
          this.width -= movement;
          if (this.width < 300) {
            this.width = 300;
          }
          if (this.width > 700) {
            this.width = 700;
          }
        }
      }
    };
    </script>
    
    <style lang="less" scoped>
    .sss {
      display: flex;
    }
    </style>
    

    这里将需要改变宽度的元素给一个双向绑定的值,然后通过子组件传来的值修改。再将两个元素弹性布局,相当于hanle组件就会

    贴着我们需要拖动的元素,看上去是再拖动我们要改变宽度的元素,其实是在拖动我们的handle。

  • 相关阅读:
    关于jar包的创建及引用相关问题
    关于Android系统一次能创建多大的Bitmap?
    Android开发导入第三方Jar包
    Javascript操作表格
    installanywhere 打包j2ee的方法II(转)
    C#网页自动登录和提交POST信息的多种方法
    JavaScript手册javascript语法javascript函数
    javascript 禁止复制网页
    [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式(转)
    android消息处理系统原理
  • 原文地址:https://www.cnblogs.com/wangnothings/p/12752382.html
Copyright © 2011-2022 走看看