From 946ef6d9a54768f34db60b43de5c35f683b4799c Mon Sep 17 00:00:00 2001
From: zhangxiaoxu123 <819527061@qq.com>
Date: 星期三, 05 七月 2023 15:16:14 +0800
Subject: [PATCH] 图片文件

---
 src/libs/animateCSS.js |   18 +++++++++
 src/libs/dialogDrag.js |   75 +++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 0 deletions(-)

diff --git a/src/libs/animateCSS.js b/src/libs/animateCSS.js
new file mode 100644
index 0000000..721e891
--- /dev/null
+++ b/src/libs/animateCSS.js
@@ -0,0 +1,18 @@
+const animateCSS = (element, animation, prefix = 'animate__') =>
+// We create a Promise and return it
+new Promise((resolve, reject) => {
+  const animationName = `${prefix}${animation}`;
+  const node = document.querySelector(element);
+  node.classList.add(`${prefix}animated`, animationName);
+
+  // When the animation ends, we clean the classes and resolve the Promise
+  function handleAnimationEnd(event) {
+    event.stopPropagation();
+    node.classList.remove(`${prefix}animated`, animationName);
+    resolve('Animation ended');
+  }
+
+  node.addEventListener('animationend', handleAnimationEnd, {once: true});
+});
+
+export default animateCSS
diff --git a/src/libs/dialogDrag.js b/src/libs/dialogDrag.js
new file mode 100644
index 0000000..a138096
--- /dev/null
+++ b/src/libs/dialogDrag.js
@@ -0,0 +1,75 @@
+import Vue from 'vue';
+// v-dialogDrag: 寮圭獥鎷栨嫿灞炴��
+Vue.directive('dialogDrag', {
+  bind(el, binding, vnode, oldVnode) {
+    const dialogHeaderEl = el.querySelector('.el-dialog__header');
+    const dragDom = el.querySelector('.el-dialog');
+    // dialogHeaderEl.style.cursor = 'move';
+    dialogHeaderEl.style.cssText += ';cursor:move;';
+    dragDom.style.cssText += ';top:0px;';
+
+    // 鑾峰彇鍘熸湁灞炴�� ie dom鍏冪礌.currentStyle 鐏嫄璋锋瓕 window.getComputedStyle(dom鍏冪礌, null);
+    const sty = (function() {
+      if (window.document.currentStyle) {
+        return (dom, attr) => dom.currentStyle[attr];
+      } else {
+        return (dom, attr) => getComputedStyle(dom, false)[attr];
+      }
+    })();
+    dialogHeaderEl.onmousedown = e => {
+      // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂�
+      const disX = e.clientX - dialogHeaderEl.offsetLeft;
+      const disY = e.clientY - dialogHeaderEl.offsetTop;
+      const screenWidth = document.body.clientWidth; // body褰撳墠瀹藉害
+      const screenHeight = document.documentElement.clientHeight; // 鍙鍖哄煙楂樺害(搴斾负body楂樺害锛屽彲鏌愪簺鐜涓嬫棤娉曡幏鍙�)
+      const dragDomWidth = dragDom.offsetWidth; // 瀵硅瘽妗嗗搴�
+      const dragDomheight = dragDom.offsetHeight; // 瀵硅瘽妗嗛珮搴�
+      const minDragDomLeft = dragDom.offsetLeft;
+      const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
+      const minDragDomTop = dragDom.offsetTop;
+      const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
+      // 鑾峰彇鍒扮殑鍊煎甫px 姝e垯鍖归厤鏇挎崲
+      let styL = sty(dragDom, 'left');
+      let styT = sty(dragDom, 'top');
+      // 娉ㄦ剰鍦╥e涓� 绗竴娆¤幏鍙栧埌鐨勫�间负缁勪欢鑷甫50% 绉诲姩涔嬪悗璧嬪�间负px
+      if (styL.includes('%')) {
+        // eslint-disable-next-line no-useless-escape
+        styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100);
+        // eslint-disable-next-line no-useless-escape
+        styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100);
+      } else {
+        styL = +styL.replace(/\px/g, '');
+        styT = +styT.replace(/\px/g, '');
+      }
+
+      document.onmousemove = function(e) {
+        // 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈
+        let left = e.clientX - disX;
+        let top = e.clientY - disY;
+
+        // 杈圭晫澶勭悊
+        if (-left > minDragDomLeft) {
+          left = -minDragDomLeft;
+        } else if (left > maxDragDomLeft) {
+          left = maxDragDomLeft;
+        }
+        if (-top > minDragDomTop) {
+          top = -minDragDomTop;
+        } else if (top > maxDragDomTop) {
+          top = maxDragDomTop;
+        }
+
+        // 绉诲姩褰撳墠鍏冪礌
+        dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
+      };
+
+      document.onmouseup = function(e) {
+        document.onmousemove = null;
+        document.onmouseup = null;
+      };
+      return false;
+    };
+  }
+});
+
+

--
Gitblit v1.9.1