使用vue和element-ui实现具体代码:”新标签”按钮,点击新标签后,弹出悬窗(悬窗可实现自由移动、调整大小、弹出后不影响背景页面的查看、可随着背景页面TAB页的切换而移动
时间: 2024-02-03 11:02:23 浏览: 86
好的,以下是一个简单的实现示例:
1. 新建一个Vue组件,命名为"NewTab",包含一个按钮和一个弹出框:
```
<template>
<div>
<el-button type="primary" @click="showDialog">新标签</el-button>
<el-dialog
title="新标签"
:visible.sync="dialogVisible"
:modal-append-to-body="false"
:close-on-click-modal="false"
:destroy-on-close="true"
:custom-class="'new-tab-dialog'"
:style="{position: 'fixed', top: dialogTop + 'px', left: dialogLeft + 'px', width: dialogWidth + 'px', height: dialogHeight + 'px'}"
:before-close="beforeCloseDialog"
>
<div class="new-tab-content">
// 在这里添加您自己的内容
</div>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
dialogVisible: false,
dialogTop: 100,
dialogLeft: 100,
dialogWidth: 400,
dialogHeight: 300,
}
},
methods: {
showDialog() {
this.dialogVisible = true;
},
beforeCloseDialog(done) {
// 清空弹出框的内容,防止下次打开时出现残留
this.$nextTick(() => {
const dialogContent = this.$el.querySelector('.new-tab-content');
if (dialogContent) {
dialogContent.innerHTML = '';
}
done();
});
},
},
mounted() {
// 监听浏览器tab页切换事件,实现悬浮窗口的移动
window.addEventListener('focus', () => {
const activeElement = document.activeElement;
if (activeElement && activeElement.tagName === 'IFRAME') {
const rect = activeElement.getBoundingClientRect();
this.dialogTop = rect.top;
this.dialogLeft = rect.left;
}
});
},
}
</script>
<style scoped>
.new-tab-dialog .el-dialog__body {
overflow: hidden;
}
.new-tab-content {
height: 100%;
overflow: auto;
}
</style>
```
2. 在需要使用该组件的页面中引入并使用:
```
<template>
<div>
// 其他内容
<new-tab></new-tab>
</div>
</template>
<script>
import NewTab from '@/components/NewTab';
export default {
components: {
NewTab,
},
}
</script>
```
以上代码使用了Element UI组件库中的Button和Dialog组件,并且使用了Vue的响应式数据来控制弹出框的显示状态和位置。在mounted钩子函数中监听了浏览器的tab页切换事件,实现了悬浮窗口的移动。您可以根据自己的需求修改样式和事件处理逻辑。
阅读全文