返回
打造灵活可拖动、自动收缩的Vue侧边组件按钮
前端
2023-12-11 09:33:16
前言
在当今快节奏的数字世界中,用户体验变得至关重要。为了增强用户与网站或应用程序的互动,我们可以添加一些交互元素,例如悬浮可拖动的侧边组件按钮。这种按钮不仅美观实用,还能让用户自定义其位置和大小,从而提升整体用户体验。
创建Vue项目
首先,我们需要创建一个新的Vue项目。您可以使用Vue CLI或其他您熟悉的工具。在终端中输入以下命令:
vue create vue-draggable-sidebar
安装必要的依赖项
接下来,我们需要安装一些必要的依赖项。
npm install vue-draggable-resizable
创建组件
现在,让我们创建一个新的Vue组件。在src
目录下创建一个名为Sidebar.vue
的文件,并添加以下代码:
<template>
<div
class="sidebar"
:style="{
top: top + 'px',
left: left + 'px',
width: width + 'px',
height: height + 'px'
}"
>
<div class="handle" @mousedown="startDrag" @touchstart="startDrag">
<i class="icon"></i>
</div>
<div class="content">
<slot></slot>
</div>
</div>
</template>
<script>
import { ref } from 'vue'
import draggable from 'vue-draggable-resizable'
export default {
name: 'Sidebar',
components: { draggable },
props: {
top: {
type: Number,
default: 0
},
left: {
type: Number,
default: 0
},
width: {
type: Number,
default: 300
},
height: {
type: Number,
default: 300
}
},
setup() {
const top = ref(0)
const left = ref(0)
const width = ref(300)
const height = ref(300)
const startDrag = (e) => {
e.stopPropagation()
e.preventDefault()
document.addEventListener('mousemove', onDrag)
document.addEventListener('touchmove', onDrag)
document.addEventListener('mouseup', stopDrag)
document.addEventListener('touchend', stopDrag)
}
const onDrag = (e) => {
e.stopPropagation()
e.preventDefault()
top.value = e.pageY - e.offsetY
left.value = e.pageX - e.offsetX
}
const stopDrag = () => {
document.removeEventListener('mousemove', onDrag)
document.removeEventListener('touchmove', onDrag)
document.removeEventListener('mouseup', stopDrag)
document.removeEventListener('touchend', stopDrag)
}
return {
top,
left,
width,
height,
startDrag
}
}
}
</script>
<style scoped>
.sidebar {
position: absolute;
z-index: 999;
background: #fff;
border: 1px solid #ccc;
border-radius: 5px;
}
.handle {
width: 20px;
height: 20px;
background: #333;
border-radius: 50%;
cursor: move;
}
.content {
padding: 10px;
}
.icon {
color: #fff;
font-size: 16px;
}
</style>
使用组件
现在,我们可以在主组件中使用这个侧边组件按钮。在App.vue
文件中添加以下代码:
<template>
<div>
<sidebar>
<p>This is a sidebar.</p>
</sidebar>
</div>
</template>
<script>
import Sidebar from './Sidebar.vue'
export default {
name: 'App',
components: { Sidebar }
}
</script>
实现自动收缩功能
为了实现自动收缩功能,我们需要在Sidebar.vue
组件中添加一些额外的代码。在<script>
标签中添加以下代码:
watch: {
top(newValue) {
if (newValue < 0) {
this.top = 0
} else if (newValue + this.height > window.innerHeight) {
this.top = window.innerHeight - this.height
}
},
left(newValue) {
if (newValue < 0) {
this.left = 0
} else if (newValue + this.width > window.innerWidth) {
this.left = window.innerWidth - this.width
}
}
}
结语
通过本教程,我们成功地创建了一个悬浮可拖动且可自定义的Vue侧边组件按钮,并实现了自动收缩功能。这种按钮在实际的业务开发中非常实用,可以根据业务需要进行调整。希望本教程对您有所帮助,也期待您分享更多有价值的经验和技巧。