zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    细说WebSocket -- Node.js篇
    跨域CORS原理及调用具体示例
    详解5种跨域方式及其原理
    java后台对json格式数据的解析
    serializeArray()和.serialize()的区别、联系
    JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
    Jquery 遍历数组之$().each方法与$.each()方法介绍
    JQuery.Ajax()的data参数类型
    并发,并行,进程,线程,同步,异步
    Java之控制反转和依赖注入
  • 原文地址:https://www.cnblogs.com/Alex-Song/p/12768854.html
Copyright © 2011-2022 走看看