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>

效果展示:

相关推荐
代码小库8 小时前
【课程作业必备】Web开发技术HTML静态网站模板 - 校园动漫社团主题完整源码
前端·html
珹洺9 小时前
Bootstrap-HTML(二)深入探索容器,网格系统和排版
前端·css·bootstrap·html·dubbo
BillKu9 小时前
VS Code HTML CSS Support 插件详解
前端·css·html
xixixin_9 小时前
【React】中 Body 类限定法:优雅覆盖挂载到 body 的组件样式
前端·javascript·react.js
换日线°9 小时前
NFC标签打开微信小程序
前端·微信小程序
张3蜂10 小时前
Python 四大 Web 框架对比解析:FastAPI、Django、Flask 与 Tornado
前端·python·fastapi
南风知我意95710 小时前
【前端面试5】手写Function原型方法
前端·面试·职场和发展
qq_124987075310 小时前
基于Java Web的城市花园小区维修管理系统的设计与实现(源码+论文+部署+安装)
java·开发语言·前端·spring boot·spring·毕业设计·计算机毕业设计
小安驾到11 小时前
【前端的坑】vxe-grid表格tooltip提示框不显示bug
前端·vue.js
去码头整点薯条9811 小时前
python第五次作业
linux·前端·python