ASP.NET项目:用CSS过渡与JavaScript实现按钮控制面板显隐
按钮触发带CSS过渡的面板显示/隐藏解决方案
修正后的完整代码
HTML 结构
<button class="btn-primary floating-btn1" id="clickerBranch" onclick="togglePanel('branchPanelWrap')">Branches</button> <button class="btn-primary floating-btn" id="clickerService" onclick="togglePanel('servicePanelWrap')">Service Prices</button> <!-- Branches 面板容器 --> <div class="panel-wrap" id="branchPanelWrap"> <div class="panel branch-panel">Branches 内容展示区</div> </div> <!-- Service Prices 面板容器 --> <div class="panel-wrap" id="servicePanelWrap"> <div class="panel service-panel">Service Prices 内容展示区</div> </div>
CSS 样式(含过渡效果)
/* 调整按钮位置避免重叠 */ .floating-btn1 { width: 80px; height: 80px; background: #267410; display: flex; align-items: center; justify-content: center; color: aliceblue; font-size: 16px; font-style: oblique; position: fixed; box-shadow: 2px 2px 5px rgba(0,0,0,0.25); right: 20px; bottom: 150px; border-radius: 50%; border: none; cursor: pointer; } .floating-btn { width: 80px; height: 80px; background: #267410; display: flex; align-items: center; justify-content: center; color: aliceblue; font-size: 16px; font-style: oblique; position: fixed; box-shadow: 2px 2px 5px rgba(0,0,0,0.25); right: 20px; bottom: 50px; border-radius: 50%; border: none; cursor: pointer; } /* 面板容器核心样式:初始隐藏+过渡动画 */ .panel-wrap { position: fixed; top: 0; bottom: 0; left: 0; width: 100%; transform: translateX(-100%); /* 默认从左侧移出屏幕 */ transition: transform 0.3s ease-in-out; /* 0.3秒平滑过渡 */ z-index: 999; /* 确保面板在最上层 */ } /* 激活状态:面板滑入显示 */ .panel-wrap.active { transform: translateX(0%); } /* 面板通用样式 */ .panel { height: 100%; overflow: auto; padding: 1em; } /* 区分两个面板的样式 */ .branch-panel { background: #333; color: #fff; } .service-panel { background: aliceblue; color: #000; } *, *:before, *:after { box-sizing: border-box; }
JavaScript 逻辑(原生JS)
function togglePanel(panelId) { const targetPanel = document.getElementById(panelId); // 切换当前面板的显示/隐藏状态 targetPanel.classList.toggle('active'); // 可选:开启下面代码,实现点击一个面板时自动关闭另一个面板 /* const otherPanels = document.querySelectorAll('.panel-wrap:not(#' + panelId + ')'); otherPanels.forEach(panel => { panel.classList.remove('active'); }); */ }
关键修改说明
- HTML 修正:给每个面板容器添加唯一ID,让按钮能精准定位目标;统一面板class,避免原代码中
ServicePanel和panel2的类名不匹配问题。 - CSS 过渡实现:给
.panel-wrap添加transition属性定义平滑动画,用transform控制面板的滑入滑出,替代原复选框的触发逻辑;将面板容器改为fixed定位,确保全屏覆盖不受页面滚动影响。 - JS 逻辑修复:原代码中
$("ServicePanel")缺少类选择器的.,改用原生JS切换active类更轻量,同时支持点击同一按钮切换显示/隐藏状态,可选添加互斥逻辑确保仅显示一个面板。
内容的提问来源于stack exchange,提问作者Dev Beginner
相关产品推荐
相关产品推荐

