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>

效果展示:

相关推荐
去伪存真3 分钟前
不用动脑,手把手跟着我做,就能掌握Gitlab+Jenkins提交代码自动构部署
前端·jenkins
天天扭码39 分钟前
深入解析 JavaScript 中的每一类函数:从语法到对比,全面掌握适用场景
前端·javascript·面试
小希爸爸1 小时前
4、中医基础入门和养生
前端·后端
kooboo china.1 小时前
Tailwind CSS 实战:基于 Kooboo 构建企业官网页面(一)
前端·css·编辑器
uhakadotcom1 小时前
Fluid:云原生数据加速与管理的简单入门与实战
前端
鬼面瓷1 小时前
CAPL编程_03
前端·数据库·笔记
帅云毅1 小时前
Web漏洞--XSS之订单系统和Shell箱子
前端·笔记·web安全·php·xss
北上ing2 小时前
同一页面下动态加载内容的两种方式:AJAX与iframe
前端·javascript·ajax
小墨宝3 小时前
js 生成pdf 并上传文件
前端·javascript·pdf
HED3 小时前
用扣子快速手撸人生中第一个AI智能应用!
前端·人工智能