React 抽屉显示和隐藏

html 复制代码
<div className={styles.content}>
      <div className={styles.left} ref={leftRef}>
      	<div className={styles.drawer} onClick={drawerChange}>
          我是抽屉开关
        </div>

        <div>
        	我是左边内容
        </div>
      </div>
      <div className={styles.right} ref={rightRef}>
        我是右边
      </div>
</div>
css 复制代码
// less文件语法
.content {
    position: relative;
    display: flex;
    height: 100%;
}

.drawer {
    position: absolute;
    top: 50%;
    right: -24px;
    transform: translateX(-50%);
    cursor: pointer;
    z-index: 999;
}

.left {
    height: 100%;
    position: absolute;
    left: 0;
    transition: left 0.3s ease;
    width: 312px;
}

.right {
    flex: 1;
    padding-left: 312px;
    transition: padding-left 0.3s ease;
}
javascript 复制代码
const [isOpen, setIsOpen] = useState<boolean>(true)
const leftRef = useRef<any>();
const rightRef = useRef<any>();

const drawerChange = () => {
    setIsOpen(!isOpen)
    const leftDom= leftRef?.current as any;
    const rightDom = rightRef?.current as any;

    leftDom.style.left = isOpen ? "-312px" : "0";
    rightDom.style.paddingLeft = isOpen ? "0" : "312px";
    rightDom.style.width = isOpen ? "100%" : 'calc(100% - 312px)';
}
相关推荐
xujing_064 分钟前
跑马灯组件vue3+es6
前端·javascript·es6
我只是来分享的16 分钟前
Js也能写外挂?8 行代码改掉《植物大战僵尸》的阳光值!对于js来说超越调用大漠超越调用memory.js
javascript
Mahut19 分钟前
我们是怎么用 TanStack 全家桶的
前端·javascript·架构
说实话起个名字真难啊39 分钟前
前端JS审计:渗透测试的“破局之钥”
开发语言·前端·javascript·测试工具
吴声子夜歌39 分钟前
TypeScript——编译器和编译选项
前端·javascript·typescript
Traced back1 小时前
[特殊字符] Vue3 常用指令大全
前端·javascript·vue.js
Highcharts.js1 小时前
在React中使用图表库时,优先选择组件化方案可以降低开发复杂度
前端·javascript·react.js·数据可视化·highcharts
西洼工作室1 小时前
React城市选择模块功能实现
前端·react.js·前端框架
竹林8181 小时前
从零到一:在 React 前端中集成 The Graph 查询 NFT 持有者数据实战
前端·javascript
山西茄子1 小时前
GstAggregator的aggregate
开发语言·前端·javascript·gstreamer