背景:项目需要,我们引入了前端框架就是目前最流行的框架之一vue,同时引入了一套由饿了吗维护的ui库,由于我们是在pc端使用发现它竟然没有提供可随意拖动的窗口,可能用的更多的时移动端吧吧,于是就随手写了一个,比较简单吧,但是做过的就会知道也是有一些小小的技巧,记录下吧留作备用。
由于不是很难,就不做过多解释了,直接上代码:
<template>
<el-container v-bind:id="id"
v-if="dialogVisible">
<el-header>
<div @mousedown="mousedown">
<h2 v-html=" "></h2>
<div @click.stop="closeDialog()" style="position: absolute;top: 0px; right: 20px;">
<span>
<svg class="icon" aria-hidden="false">
<use x :href='#el-icon-ext-close'></use>
</svg>
</span>
</div>
</div>
</el-header>
<el-main>
<slot>这里是内容</slot>
</el-main>
<el-footer>
<span class="dialog-footer">
<el-button @click="closeDialog">取 消</el-button>
<el-button type="primary" @click="closeDialog">确 定</el-button>
</span>
</el-footer>
</el-container>
</template>
< >
export default {
name: 'Window',
props: {
x: String,
id: [String, Number]
},
data() {
return {
: '标题',
selectElement: ''
}
},
computed: {
dialogVisible: {
get: function () {
return this.$store.state.dialogVisible
},
set: function (newValue) {
this.$store.commit('newDialogVisible', newValue)
}
}
},
methods: {
closeDialog(e) {
this.dialogVisible = false
// alert(this.dialogVisible)
this.$store.commit('newDialogVisible', false)
},
mousedown(event) {
this.selectElement = document.getElementById(this.id)
var div1 = this.selectElement
this.selectElement.style.cursor = 'move'
this.isDowm = true
var distanceX = event.clientX - this.selectElement.offsetLeft
var distanceY = event.clientY - this.selectElement.offsetTop
// alert(distanceX)
// alert(distanceY)
console.log(distanceX)
console.log(distanceY)
document. = function (ev) {
var oevent = ev || event
div1.style.left = oevent.clientX - distanceX + 'px'
div1.style.top = oevent.clientY - distanceY + 'px'
}
document. = function () {
document. = null
document. = null
div1.style.cursor = 'default'
}
}
}
}
</ >
<style scoped>
.el-container {
position: absolute;
height: 500px;
width: 500px;
border: 1px;
top: 20%;
left: 35%;
border-radius: 2px;
}
.dialog-footer {
text-align: right;
}
.el-main {
background-color: white;
}
.el-footer {
background-color: white;
}
.el-header {
background-color: white;
color: #333;
line-height: 60px;
}
.el-aside {
color: #333;
}
</style>
备注:解决了鼠标拖动过快移除窗口后终端问题,其它优点请自测,如有问题请留言!
以上这篇VUE实现可随意拖动的弹窗组件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
继续阅读与本文标签相同的文章
上一篇 :
学习机器学习和数据科学必看的十个资源
下一篇 :
为什么成千上万的人工智能研究人员抵制新自然杂志?
-
阿里云数据库RDS通用型和独享型区别在哪?如何选择?
2026-05-18栏目: 教程
-
如何选购配置云数据库RDS MySQL 的流程 新手必看
2026-05-18栏目: 教程
-
跨境电商女装开发风向标
2026-05-18栏目: 教程
-
线上线下场景全方面打通,小程序成为家居行业的新卖点!
2026-05-18栏目: 教程
-
下载一款手机软件后,为何总是要让我们授权一些,看似毫无关联的权限?
2026-05-18栏目: 教程
