uniapp 仿企微左边公司切换页

示例代码:

html 复制代码
<template>
  <view class="container">
    <!-- 遮罩层 -->
    <view class="mask" v-if="showSidebar" @click="closeSidebar"></view>
    
    <!-- 侧边栏 -->
    <view class="sidebar" :class="{ active: showSidebar }">
      <!-- 用户信息区域 -->
      <view class="user-info">
        <image class="avatar" src="/static/default-avatar.png"></image>
        <view class="user-details">
          <text class="username">用户名</text>
          <text class="company">公司名称</text>
        </view>
      </view>
      
      <!-- 菜单列表 -->
      <view class="sidebar-content">
        <view class="sidebar-item">
          <text class="iconfont icon-message"></text>
          <text class="item-text">消息</text>
        </view>
        <view class="sidebar-item">
          <text class="iconfont icon-contacts"></text>
          <text class="item-text">通讯录</text>
        </view>
        <view class="sidebar-item">
          <text class="iconfont icon-workbench"></text>
          <text class="item-text">工作台</text>
        </view>
        <view class="sidebar-item">
          <text class="iconfont icon-profile"></text>
          <text class="item-text">我的</text>
        </view>
      </view>
    </view>
    
    <!-- 主内容区域包装器 -->
    <view class="main-content" :class="{ 'content-shifted': showSidebar }">
      <!-- 主页面内容 -->
      <button @click="openSidebar" class="menu-button">
        <u-icon name="list" size="28"></u-icon>
      </button>
      
      <!-- 这里可以放置其他主页面内容 -->
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      showSidebar: false
    }
  },
  methods: {
    openSidebar() {
      this.showSidebar = true
    },
    closeSidebar() {
      this.showSidebar = false
    }
  }
}
</script>

<style>
.container {
  position: relative;
  width: 100%;
  height: 100vh;
}

.mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.3);
  z-index: 998;
}

/* 主内容区域样式 */
.main-content {
  position: relative;
  min-height: 100vh;
  background-color: #fff;
  transition: transform 0.3s ease-in-out; /* 确保与sidebar使用相同的过渡时间 */
  z-index: 997;
}

.content-shifted {
  transform: translateX(70%);
}

/* 修改sidebar的样式 */
.sidebar {
  position: fixed;
  top: 0;
  left: 0;
  width: 70%;
  height: 100vh;
  background-color: #2f2f2f;
  z-index: 999;
  transition: transform 0.3s ease-in-out; /* 确保与main-content使用相同的过渡时间 */
  color: #fff;
  transform: translateX(-100%);
}

.sidebar.active {
  transform: translateX(0);
}

.user-info {
  padding: 20px;
  background-color: #393939;
  display: flex;
  align-items: center;
}

.avatar {
  width: 60px;
  height: 60px;
  border-radius: 6px;
  margin-right: 15px;
}

.user-details {
  flex: 1;
}

.username {
  font-size: 18px;
  font-weight: 500;
  margin-bottom: 5px;
  display: block;
}

.company {
  font-size: 14px;
  color: #999;
  display: block;
}

.sidebar-content {
  padding: 10px 0;
}

.sidebar-item {
  padding: 16px 20px;
  display: flex;
  align-items: center;
}

.sidebar-item:active {
  background-color: #393939;
}

.iconfont {
  font-size: 24px;
  margin-right: 12px;
}

.item-text {
  font-size: 16px;
}

.menu-button {
  position: absolute;
  top: 15px;
  left: 15px;
  background: none;
  border: none;
  padding: 10px;
  z-index: 997;
}

.menu-button::after {
  border: none;
}

/* 注意:需要引入iconfont字体文件 */
@font-face {
  font-family: 'iconfont';
  src: url('/static/iconfont.ttf') format('truetype');
}

.iconfont {
  font-family: 'iconfont';
}
</style>

效果展示:

相关推荐
蓝婷儿1 小时前
前端面试每日三题 - Day 34
前端·面试·职场和发展
CopyLower1 小时前
苹果计划将AI搜索集成至Safari:谷歌搜索下降引发的市场变革
前端·人工智能·safari
我是Superman丶3 小时前
【技巧】前端VUE用中文方法名调用没效果的问题
前端·javascript·vue.js
斯~内克3 小时前
Vue 3 中 watch 的使用与深入理解
前端·javascript·vue.js
蜡笔小柯南4 小时前
解决:npm install报错,reason: certificate has expired
前端·npm·node.js
骑450的皮卡丘5 小时前
uniapp设置 overflow:auto;右边不显示滚动条的问题
css·uni-app·css3
lqj_本人5 小时前
鸿蒙OS&UniApp实现个性化的搜索框与搜索历史记录#三方框架 #Uniapp
华为·uni-app·harmonyos
lqj_本人5 小时前
鸿蒙OS&UniApp制作多选框与单选框组件#三方框架 #Uniapp
前端·javascript·uni-app
@PHARAOH6 小时前
WHAT - 前端开发流程 SOP(标准操作流程)参考
前端·领导力
松树戈7 小时前
plus-ui&RuoYi-Vue-Plus 基于pgSql本地运行实践
前端·vue.js·spring boot·ui