自定义vue指令使elementUI的el-dialog弹窗可全屏和拉伸

更新时间:2023-05-16 21:45:39 阅读: 评论:0

⾃定义vue指令使elementUI的el-dialog弹窗可全屏和拉伸
import Vue from 'vue';
/*
*  定义公共js⾥,在⼊⼝⽂件main.js中import;
*  给elementUI的dialog上加上 v-dialogDrag 指令就可以实现弹窗的全屏和拉伸了。
*/
幼儿园调查问卷
// v-dialogDrag: 弹窗拖拽+⽔平⽅向伸缩
Vue.directive('dialogDrag', {
bind(el, binding, vnode, oldVnode) {
//弹框可拉伸最⼩宽⾼
let minWidth = 400;
let minHeight = 300;
//初始⾮全屏
let isFullScreen = fal;
//当前宽⾼
let nowWidth = 0;
let nowHight = 0;
//当前顶部⾼度
let nowMarginTop = 0;
//获取弹框头部(这部分可双击全屏)
const dialogHeaderEl = el.querySelector('.el-dialog__header');
//弹窗
const dragDom = el.querySelector('.el-dialog');
//给弹窗加上overflow auto;不然缩⼩时框内的标签可能超出dialog;
dragDom.style.overflow = "auto";
//清除选择头部⽂字效果
长跑加油稿
//头部加上可拖动cursor
dialogHeaderEl.style.cursor = 'move';
// 获取原有属性 ie dom元素.currentStyle ⽕狐⾕歌 ComputedStyle(dom元素, null);
const sty = dragDom.currentStyle || ComputedStyle(dragDom, null);
let moveDown = (e) => {
// ⿏标按下,计算当前元素距离可视区的距离
const disX = e.clientX - dialogHeaderEl.offtLeft;
const disY = e.clientY - dialogHeaderEl.offtTop;
// 获取到的值带px 正则匹配替换
let styL, styT;
// 注意在ie中第⼀次获取到的值为组件⾃带50% 移动之后赋值为px
if (sty.left.includes('%')) {
styL = +document.body.clientWidth * (+place(/\%/g, '') / 100);
styT = +document.body.clientHeight * (+place(/\%/g, '') / 100);word制表位
} el {
styL = +place(/\px/g, '');
styT = +place(/\px/g, '');
};
// 通过事件委托,计算移动的距离
const l = e.clientX - disX;
const t = e.clientY - disY;
// 移动当前元素
dragDom.style.left = `${l + styL}px`;
好听歌曲p = `${t + styT}px`;
//将此时的位置传出去江西好玩的地方
//binding.value({x:e.pageX,y:e.pageY})
};
};
}
//双击头部效果
if (isFullScreen == fal) {
nowHight = dragDom.clientHeight;
nowWidth = dragDom.clientWidth;
nowMarginTop = dragDom.style.marginTop;
dragDom.style.left = 0;
p = 0;
dragDom.style.height = "100VH";
dragDom.style.width = "100VW";
dragDom.style.marginTop = 0;
isFullScreen = true;
dialogHeaderEl.style.cursor = 'initial';
} el {
dragDom.style.height = "auto";
dragDom.style.width = nowWidth + 'px';
dragDom.style.marginTop = nowMarginTop;
isFullScreen = fal;
dialogHeaderEl.style.cursor = 'move';
}
}
//拉伸
let ateElement("div");
dragDom.appendChild(resizeEl);
//在弹窗右下⾓加上⼀个10-10px的控制块
resizeEl.style.cursor = '-resize';
resizeEl.style.position = 'absolute';
resizeEl.style.height = '10px';
resizeEl.style.width = '10px';
resizeEl.style.right = '0px';
resizeEl.style.bottom = '0px';
//⿏标拉伸弹窗
// 记录初始x位置
const clientX = e.clientX;
// ⿏标按下,计算当前元素距离可视区的距离
const disX = e.clientX - resizeEl.offtLeft;
const disY = e.clientY - resizeEl.offtTop;
e.preventDefault(); // 移动时禁⽤默认事件
// 通过事件委托,计算移动的距离
const x = e.clientX - disX + (e.clientX - clientX);//这⾥由于elementUI的dialog控制居中的,所以⽔平拉伸效果是双倍        const y = e.clientY - disY;
//⽐较是否⼩于最⼩宽⾼
二战海战电影dragDom.style.width = x > minWidth ? `${x}px` : minWidth + 'px';
dragDom.style.height = y > minHeight ? `${y}px` : minHeight + 'px';
};
//拉伸结束
};
};
qq小号网}
伤感朋友圈}
})
/**
*  注意:如果是el-dialog弹出的表单el-form,最好不要把提交按钮当做el-form-item(elementUI⽂档是这么⽤的),放在el-dialog⾥。 *  不然按钮会同el-dialog中标签⼀样被overflow;
*/

本文发布于:2023-05-16 21:45:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/905369.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:弹窗   头部   拉伸   距离
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图