背景:項目需要,我們引入了前端框架就是目前最流行的框架之一vue,同時引入了一套由餓了嗎維護的ui庫,由于我們是在pc端使用發現它竟然沒有提供可隨意拖動的窗口,可能用的更多的時移動端吧吧,于是就隨手寫了一個,比較簡單吧,但是做過的就會知道也是有一些小小的技巧,記錄下吧留作備用。
由于不是很難,就不做過多解釋了,直接上代碼:
<template>
<el-container v-bind:id="id"
v-if="dialogVisible">
<el-header>
<div @mousedown="mousedown">
<h3 v-html="title"></h3>
<div @click.stop="closeDialog()" >
<span>
<svg class="icon" aria-hidden="false">
<use xlink: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>
<script>
export default {
name: 'Window',
props: {
titlex: String,
id: [String, Number]
},
data() {
return {
title: '標題',
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.onmousemove = function (ev) {
var oevent = ev || event
div1.style.left = oevent.clientX - distanceX + 'px'
div1.style.top = oevent.clientY - distanceY + 'px'
}
document.onmouseup = function () {
document.onmousemove = null
document.onmouseup = null
div1.style.cursor = 'default'
}
}
}
}
</script>
<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實現可隨意拖動的彈窗組件就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。