ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

3 个设置让 Layer 抽屉效果不再撑爆屏幕

3 个设置让 Layer 抽屉效果不再撑爆屏幕 3 个设置让 Layer 抽屉效果不再撑爆屏幕【免费下载链接】layui一套遵循浏览器原生态开发模式的 Web UI 组件库。项目地址: https://gitcode.com/GitHub_Trending/la/layuiLayer 抽屉从屏幕右侧弹出后内容一宽就把抽屉撑满整个视口小屏下主内容区被完全盖住。问题出在 area、maxWidth、offset 三个参数的组合上。下面直接拆源码里的宽度计算逻辑再给出三处可直接落地的写法。现象抽屉比屏幕还宽layer.open弹出一个带滑入动画的 type: 1 抽屉后先看一眼抽屉完全展开时宽度是贴住了视口右边缘还是把整页盖住。常见现象是拖窄窗口后抽屉右缘依旧贴着视口内容横向滚动。这时别急着改 CSS问题多半在打开时的参数组合。看 auto() 函数里的宽度逻辑在src/components/layer.js中抽屉的宽度判定集中在 auto 方法。核心判断是两行只有 area 第一项是空字符串或auto、且 maxWidth 大于 0 时才会执行钳制——抽屉 outerWidth 超过 maxWidth就把宽度强制设为 maxWidth。由此推出两个结论area 写死像素宽如500px时maxWidth 的钳制整体跳过这是maxWidth 不生效最常见的原因初始化时 Layer 把 maxWidth 默认设为屏幕宽减 30px左右各留 15px 边距所以只要内容比这更宽抽屉就会把屏幕撑满。另注意这次钳制只在抽屉打开时执行一次后面有个坑正源于此。area 设 automaxWidth 封顶offset 贴右边✅ 最小可运行的抽屉写法layer.open({ type: 1, offset: r, // 贴右边缘left 屏幕宽 - 抽屉宽 anim: slideLeft, // 从右向左滑入 area: auto, // 宽随内容这是 maxWidth 生效的前提 maxWidth: 420, // 内容超过 420px 时钳到 420横向滚动 content: div classdrawer抽屉内容可放表单或列表/div });效果抽屉宽度跟着内容走但不超过 420px多余内容由抽屉内横向滚动条承接。需要固定高度就把 area 写成[auto, 90%]只留宽度项为 auto。⚠️ 宽度写成具体像素值会直接让 maxWidth 钳制失效这是设置不生效的头号原因。第二个坑缩窗口抽屉不缩抽屉打开后拖动浏览器变窄位置会重算fixed 为 true 时默认跟随 resize但 auto() 的宽度钳制只在 area 是百分比时才重跑。于是area: automaxWidth: 420打开的抽屉在 375px 的窗口上依然是 420px 宽会伸出屏幕。改法一打开前按屏幕宽计算var maxWidth Math.min(420, $(window).width() - 30); layer.open({ offset: r, anim: slideLeft, area: auto, maxWidth: maxWidth });改法二把 area 宽度写成百分比例如[80%, 90%]窗口变化时 resize 会自动重算宽度抽屉全程贴着屏幕缩放。关闭动作再快一点高频开关抽屉的场景把isOutAnim设为 false关闭时直接移除而不播放退出动画省一帧动画开销。完整参数说明见 docs/layer/detail/options.md。快速回顾area 写auto或百分比maxWidth 的钳制才会执行固定像素宽直接失效打开前用屏幕宽算 maxWidth或改用百分比 area防止小屏溢出offset: ranim: slideLeft构成右侧抽屉高频关闭配isOutAnim: false【免费下载链接】layui一套遵循浏览器原生态开发模式的 Web UI 组件库。项目地址: https://gitcode.com/GitHub_Trending/la/layui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表