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