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)';
}
相关推荐
ZC跨境爬虫8 分钟前
跟着 MDN 学 JavaScript day_1:什么是 JavaScript?
开发语言·前端·javascript·ecmascript
xiaofeichaichai24 分钟前
Vue 响应式原理
前端·javascript·vue.js
提子拌饭13324 分钟前
模态窗鸿蒙PC Electron框架实现技术详解 - 饮料含糖量应用案例分析
前端·javascript·华为·electron·前端框架·开源·鸿蒙
光影少年1 小时前
react的Context 和 Redux 区别?
前端·javascript·react.js·前端框架
前端 贾公子1 小时前
uni-app工程化实战:基于vue-i18n和i18n-ally的国际化方案 (上)
前端·javascript·vue.js
甜味弥漫2 小时前
React 快速入门:从 JSX 到列表渲染
react.js·前端框架·node.js
vim怎么退出2 小时前
Dive into React——Diff 算法
前端·react.js·源码阅读
半个落月2 小时前
面试必问的 JS 原型链,我用 16 个示例给你彻底讲明白
javascript
丷丩2 小时前
12. 渲染:MapLibre GL JS 集成与多源瓦片联动
javascript·矢量瓦片·maplibre gl js·地图服务器
橘子星2 小时前
别再懵圈!JS 执行机制的 “千层套路” 全揭秘
前端·javascript