Vue3封装一个左侧可拖拽折叠的侧边栏布局

news/2024/7/10 0:34:39 标签: vue, 前端

功能

1、点击左侧侧边栏可折叠或打开
2、左侧侧边栏可拖拽

代码

<template>
  <div class="fold-left-box">
    <div class="fold-left-box-left" :style="{ width: asideWidth + 'px' }" v-show="asideWidth > 0">
      left
    </div>
    <div
      class="fold-left-box-line"
      :style="{ cursor: asideWidth === 0 ? '' : 'col-resize' }"
      ref="drag"
    >
      <el-button size="mini" circle class="fold-left-box-line-button" @click="foldLeft">{{
        asideWidth === 0 ? '开' : '关'
      }}</el-button>
    </div>
    <div class="fold-left-box-main">main</div>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
onMounted(() => {
  bindDrop()
})
function foldLeft() {
  asideWidth.value = asideWidth.value === 0 ? 250 : 0
}
const drag = ref(null)
const asideWidth = ref(300)
function bindDrop() {
  drag.value.onmousedown = function () {
    document.onmousemove = function (e) {
      asideWidth.value = asideWidth.value + e.movementX
      if (asideWidth.value < 20) {
        document.onmouseup()
        asideWidth.value = 0
      }
    }
    document.onmouseup = function () {
      document.onmousemove = null
      document.onmouseup = null
    }
    return false
  }
}
</script>
<style scoped>
.fold-left-box {
  height: 500px;
  overflow: hidden;
  display: flex;
}
.fold-left-box-left {
  height: 100%;
  overflow: hidden;
}
.fold-left-box-line {
  width: 4px;
  height: 100%;
  position: relative;
  border-left: 1px solid #e6e6e6;
}
.fold-left-box-main {
  height: 100%;
  flex: 1;
  padding-left: 12px;
  overflow: hidden;
}
.fold-left-box-line-button {
  position: absolute;
  top: 50%;
  right: -10px;
}
</style>

效果图

vue2链接: Vue封装一个左侧可拖拽折叠的侧边栏布局


http://www.niftyadmin.cn/n/4939335.html

相关文章

ORCA优化器浅析——IMDRelation Storage type of a relation GP6与GP7对比

如上图所示IMDRelation作为Interface for relations in the metadata cache&#xff0c;其定义了Storage type of a relation表的存储类型&#xff0c;如下所示&#xff1a; enum Erelstoragetype {ErelstorageHeap,ErelstorageAppendOnlyCols,ErelstorageAppendOnlyRows,Erels…

vue element 多图片组合预览

定义组件&#xff1a;preview-image <template><div><div class"imgbox"><divclass"preview-img":class"boxClass"v-if"Imageslist 3 ||Imageslist 5 ||Imageslist 7 ||Imageslist 8 ||Imageslist > 9"&…

无涯教程-Perl - select函数

描述 此函数将输出的默认文件句柄设置为FILEHANDLE,如果未指定文件句柄,则设置由print和write等功能使用的文件句柄。如果未指定FILEHANDLE,则它将返回当前默认文件句柄的名称。 select(RBITS,WBITS,EBITS,TIMEOUT)使用指定的位调用系统功能select()。 select函数设置用于处理…

Linux服务器上配置HTTP和HTTPS代理

本文将向你分享如何在Linux服务器上配置HTTP和HTTPS代理的方法&#xff0c;解决可能遇到的问题&#xff0c;让你的爬虫项目顺利运行&#xff0c;畅爬互联网&#xff01; 配置HTTP代理的步骤 1. 了解HTTP代理的类型&#xff1a;常见的有正向代理和反向代理两种类型。根据实际需求…

七夕特辑:所以结婚到底有什么好处?

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 伊姐 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩天津录音间 七夕来临&#xff0c;“记者下班”第一次和大家聊聊亲密关系。 无论是青梅竹马、相识二十年的阿福&#…

【计算机设计大赛】国赛一等奖项目分享——基于多端融合的化工安全生产监管可视化系统

文章目录 一、计算机设计大赛国赛一等奖二、项目背景三、项目简介四、系统架构五、系统功能结构六、项目特色&#xff08;1&#xff09;多端融合&#xff08;2&#xff09;数据可视化&#xff08;3&#xff09;计算机视觉&#xff08;目标检测&#xff09; 七、系统界面设计&am…

【C/C++】STL queue 非线程安全接口,危险!

STL 中的 queue 是非线程安全的&#xff0c;一个组合操作&#xff1a;front(); pop() 先读取队首元素然后删除队首元素&#xff0c;若是有多个线程执行这个组合操作的话&#xff0c;可能会发生执行序列交替执行&#xff0c;导致一些意想不到的行为。因此需要重新设计线程安全的…

无涯教程-Perl - seekdir函数

描述 此功能将DIRHANDLE中的当前位置设置为POS。 POS的值必须是Telldir先前返回的值。 seekdir()函数类似于Unix seekdir()系统调用。 语法 以下是此函数的简单语法- seekdir DIRHANDLE, POS返回值 如果失败,此函数返回0,如果成功,则返回1。 例 以下是显示其基本用法的…