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)';
}
相关推荐
icebreaker28 分钟前
重新思考 weapp-tailwindcss 的未来
前端·javascript·css
涤生啊1 小时前
一键搭建 Coze 智能体对话页面:支持流式输出 + 图片直显,开发效率拉满!
javascript·html5
吃饺子不吃馅1 小时前
⚡️ Zustand 撤销重做利器:Zundo 实现原理深度解析
前端·javascript·github
远航_2 小时前
10 个被严重低估的 JS 特性,直接少写 500 行代码
前端·javascript
小高0072 小时前
当前端面临百万级 API 请求:从"修 CSS 的"到架构师的进化之路
前端·javascript·面试
LateFrames2 小时前
使用 Winform / WPF / WinUI3 / Electron 实现异型透明窗口
javascript·electron·wpf·winform·winui3
前端老宋Running2 小时前
为什么react~Hooks只能在组件最顶层调用
前端·react.js·面试
Asort2 小时前
React类组件精要:定义机制与生命周期方法进阶教程
前端·javascript·react.js
陳陈陳2 小时前
从“变量提升”到“调用栈爆炸”:V8 引擎是如何偷偷执行你的 JavaScript 的?
javascript
San303 小时前
深入理解JavaScript执行机制:从变量提升到内存管理
javascript·编程语言·代码规范