可拖拽条
实现效果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/71be7e70ae36ca57a7a026b3987f19ad.png)
实现代码
<style lang="scss" scope>
.aside {
width: 18%;
min-width: 260px;
display: flex;
flex-direction: column;
flex-shrink: 0;
flex-grow: 0;
position: relative;
background-color: #fff;
height: 100%;
padding: 0;
}
.spliter {
position: absolute;
right: -6px;
top: 0;
height: 100%;
cursor: col-resize;
transition: all ease .2s;
background-color: #f6f6f6;
&:before {
width: 6px;
height: 9px;
background-image: url('../drag-tips.svg');
background-size: contain;
background-repeat: no-repeat;
content: '';
position: absolute;
top: 50%;
margin-top: -5px;
}
&:hover {
background-color: #eee;
}
}
.content-wrap {
flex: 1;
padding-left: 6px;
}
<style>
<template>
<div ref="aside" class="aside">可伸缩内容区</div>
<div
class="spliter"
@dblclick="onDoubleBlindSlide"
@mousedown="onBindSlide"
/>
<div ref="content-wrap" class="content-wrap">右侧内容区</div>
</template>
<script>
export default {
methods: {
onDoubleBlindSlide (e){
const asideDOM = this.$refs['aside']
cosnt width = '18%'
asideDOM.style.flexBasis = width
},
onBindSlide (e) {
cosnt pageX = e.clientX
const contentDOM = this.$refs['content-wrap']
contentDOM.style.userSelect = 'none'
const asideDOM = this.$refs['aside']
const width = asideDOM.offsetWidth
document.onmousemove = mouseMoveEvent => {
const result = width + (mouseMoveEvent .clientX - pageX)
if (result < 100 || result > 1000) return
asideDOM.style.flexBasis = `${result}px`
}
document.onmouseup = () => {
contentDOM.style.userSelect = 'inherit'
document.onmousemove = null
document.onmouseup = null
}
}
}
}
</script>