financial-bigscreen/src_old/config/drag.js
2024-11-14 15:27:41 +08:00

55 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Vue from 'vue';
//使用Vue.directive()定义一个全局指令
//1.参数一指令的名称定义时指令前面不需要写v-
//2.参数二:是一个对象,该对象中有相关的操作函数
//3.在调用的时候必须写v-
const drag = Vue.directive('drag', {
//1.指令绑定到元素上回立刻执行bind函数只执行一次
//2.每个函数中第一个参数永远是el表示绑定指令的元素el参数是原生js对象
//3.通过el.focus()是无法获取焦点的因为只有插入DOM后才生效
bind: function (el) {
el.style.cursor = "move"; //鼠标样式变move样式
},
//inserted表示一个元素插入到DOM中会执行inserted函数只触发一次
inserted: function (el) {
el.onmousedown = function (e) {
var distX = e.pageX - el.offsetLeft;
var distY = e.pageY - el.offsetTop;
console.log("元素本身的高:" + el.clientHeight + ",元素本身的宽:" + el.clientWidth)
if (e.preventDefault) {
e.preventDefault();
} else{
e.returnValue=false;
};//解决快速拖动滞后问题
document.onmousemove = function (e) {
// 用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
let left = e.clientX - distX;
let top = e.clientY - distY;
if (left <= 0) {
left = 5; //设置成5是为了不离边缘太近
} else if (left > document.documentElement.clientWidth - el.clientWidth) {
//document.documentElement.clientWidth 屏幕的可视宽度
left = document.documentElement.clientWidth - el.clientWidth - 5
}
if (top <= 0) {
top = 5;
} else if (top > document.documentElement.clientHeight - el.clientHeight) {
top = document.documentElement.clientHeight - el.clientHeight - 5
}
el.style.left = left + 'px';
el.style.top = top + 'px';
}
document.onmouseup = function () {
document.onmousemove = document.onmouseup = null;
}
}
},
//当VNode更新的时候会执行updated可以触发多次
updated: function (el) {}
})
export default drag;