博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vue 中添加拖动指令
阅读量:4092 次
发布时间:2019-05-25

本文共 1788 字,大约阅读时间需要 5 分钟。

目录


 

一、源码

直接上核心代码, my-drag.js

(重点)注意:

  1. 事件 onmousemove 和 onmouseup 使用的是 document,不能使用 el,否则会有拖动卡顿问题。
  2. 但事件 onmousedown 使用 el
import Vue from 'vue';   Vue.directive('myDrag', {    //1.bind:只调用一次,指令第一次绑定到元素时调用。    //2.每个函数中第一个参数永远是el,表示绑定指令的元素,el参数是原生js对象    //3.通过el.focus()是无法获取焦点的,因为只有插入DOM后才生效    bind: function(el) {},    //inserted 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。    inserted: function(el) {        // 注意这里是 el.onmousedown        el.onmousedown = function (e) {            // 鼠标样式为 move             el.style.cursor = 'move';            let disx = e.clientX - el.offsetLeft;            let disy = e.clientY - el.offsetTop;            // 注意这里是 document.onmousemove             document.onmousemove = (e) => {                let left = e.clientX - disx;                let top = e.clientY - disy;                if(left <= 0) {                    left = 0;                }                //窗口可见宽度                if(left > (window.innerWidth - el.offsetWidth)) {                    left = (window.innerWidth - el.offsetWidth)                }                if(top <= 0) {                    top = 0;                }                //窗口可见高度                if(top > (window.innerHeight - el.offsetHeight)) {                    top = (window.innerHeight - el.offsetHeight)                }                el.style.left = left + 'px'                el.style.top = top + 'px'            }            // 注意这里是 document.onmouseup            document.onmouseup = (e) => {                // 鼠标样式为 default                el.style.cursor = 'default';                document.onmousemove = document.onmouseup = null;            }        }    },    //当VNode更新的时候会执行updated,可以触发多次    updated: function (el) { }})

二、引入

这里使用全局引入, main.js 中 import 即可。

import './my-drag.js';

三、使用

要拖动的元素上添加以 v- 开头的指令名

 

转载地址:http://oanii.baihongyu.com/

你可能感兴趣的文章
openstack虚拟机创建流程
查看>>
Android中AsyncTask的简单用法
查看>>
Jenkins 启动命令
查看>>
剑指offer算法题分析与整理(三)
查看>>
JVM并发机制探讨—内存模型、内存可见性和指令重排序
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
QT打开项目提示no valid settings file could be found
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
如何用好碎片化时间,让思维更有效率?
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
fastcgi_param 详解
查看>>
Winform多线程
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
《PostgreSQL技术内幕:查询优化深度探索》养成记
查看>>