• vue的自定义指令directives及自定义指令简单实现拖拽功能


    1、局部自定义指令,实现拖拽

    <template>
      <div style="100%">
        <!-- 自定义指令绑定元素 -->
        <button v-drag>拖拽</button>
      </div>
    </template>
    
    <script>
    export default {
      name: "List",
      data() {
        return {};
      },
      directives: {
        // drag指令名称  
        drag: {
        //   el指令绑定的dom元素
          inserted: function(el) {
            el.style.position = "absolute";
            // e对应事件对象
            el.onmousedown = e => {
                // 按下鼠标
              var ex = e.clientX - el.offsetLeft;
              var ey = e.clientY - el.offsetTop;
              el.onmousemove = e => {
                // 移动鼠标
                var ex1 = e.clientX - ex;
                var ey1 = e.clientY - ey;
                el.style.left = ex1 + "px";
                el.style.top = ey1 + "px";
              };
              el.onmouseup = e => {
                // 抬起鼠标
                el.onmousemove = null;
              };
            };
          }
        }
      }
    };
    </script>

    附截图:

     2、全局自定义指令以及多个指令的使用

    1)新建js文件directive,内容如下:

    import Vue from "vue";
    const Drag1=Vue.directive(
        'drag1',{
          inserted: function(el) {
            el.style.position = "absolute";
            el.onmousedown = e => {
              var ex = e.clientX - el.offsetLeft;
              var ey = e.clientY - el.offsetTop;
              el.onmousemove = e => {
                  var ex1=e.clientX-ex
                  var ey1=e.clientY-ey
                  el.style.left=ex1+'px'
                  el.style.top=ey1+'px'
              };
              el.onmouseup=e=>{
                  el.onmousemove=null
              }
            };
          }
        }
    )
    const Drag2=Vue.directive(
        'drag2',{
          inserted: function(el) {
            el.style.position = "absolute";
            el.onmousedown = e => {
              var ex = e.clientX - el.offsetLeft;
              var ey = e.clientY - el.offsetTop;
              el.onmousemove = e => {
                  var ex1=e.clientX-ex
                  var ey1=e.clientY-ey
                  el.style.left=ex1+'px'
                  el.style.top=ey1+'px'
              };
              el.onmouseup=e=>{
                  el.onmousemove=null
              }
            };
          }
        }
    )
    export default{
      Drag1,
      Drag2
    }

    2)在main.js中引入js文件

    import "./lib/directives"

    3)在需要使用的vue文件中正常使用

    <button v-drag1>自定义事件</button>
  • 相关阅读:
    各大OJ刷题进度和分类
    (HDU)1785 -- You Are All Excellent (你天赋异禀)
    (HDU)1720 -- A+B Coming (A+B来了)
    (HDU)1718 -- Rank (段位)
    (HDU)1708 -- Shopaholic (购物狂)
    (HDU)1678 -- Shopaholic (购物狂)
    (HDU)1673 -- Optimal Parking (停车位)
    (HDU)1587 -- Flowers (花)
    (HDU)1570 -- A C
    (HDU)1563 -- Find your present! (找到你的礼物)
  • 原文地址:https://www.cnblogs.com/Alex-Song/p/12768854.html
Copyright © 2020-2023  润新知