新闻中心
优化jQuery控制的侧边栏菜单初始化行为

本文旨在解决使用jquery控制侧边栏菜单时,在页面加载时默认收起状态下首次点击需要双击才能展开的问题。核心问题在于j*ascript状态变量与实际dom状态不匹配,导致首次点击未能正确触发展开逻辑。解决方案是通过调整j*ascript中控制侧边栏状态的布尔变量的初始值,使其与页面加载时的视觉状态保持一致,从而确保单次点击即可顺利展开菜单。
引言
在现代Web应用中,侧边栏菜单(Sidebar Menu)是常见的导航元素,它通常支持展开和收起两种状态,以适应不同屏幕尺寸或用户偏好。通过J*aScript和CSS的协同作用,我们可以实现平滑的过渡效果。然而,一个常见的问题是,当侧边栏在页面加载时被设置为默认收起状态时,用户首次点击展开按钮可能需要双击才能生效,之后则恢复正常。这通常是由于J*aScript中维护的菜单状态与DOM元素的实际视觉状态不一致所导致的。
问题分析
我们来分析一下导致侧边栏需要双击才能展开的根本原因。在提供的代码片段中,J*aScript逻辑通过一个名为 toggle 的布尔变量来管理侧边栏的展开/收起状态。
原始代码如下:
var toggle = true; // 初始状态为 true
$(".page-container").addClass("sidebar-collapsed"); // 页面加载时将侧边栏设置为收起状态
$(".sidebar-icon").click(function() {
if (toggle) // 如果 toggle 为 true
{
// 执行收起操作(但侧边栏已经收起)
$(".page-container").addClass("sidebar-collapsed").removeClass("sidebar-collapsed-back");
$("#menu span").css({"position":"absolute"});
}
else // 如果 toggle 为 false
{
// 执行展开操作
$(".page-container").removeClass("sidebar-collapsed").addClass("sidebar-collapsed-back");
setTimeout(function() {
$("#menu span").css({"position":"relative"});
}, 400);
}
toggle = !toggle; // 翻转 toggle 状态
});问题出在 toggle 变量的初始值和页面加载时侧边栏的实际DOM状态之间存在矛盾:
- toggle 变量初始化为 true: 这意味着J*aScript逻辑“认为”侧边栏当前处于展开状态。
- $(".page-container").addClass("sidebar-collapsed"): 这行代码在页面加载时立即执行,将 .page-container 元素添加 sidebar-collapsed 类,从而使侧边栏在视觉上处于收起状态。
当用户首次点击 .sidebar-icon 时:
- toggle 的值为 true。
- 代码进入 if (toggle) 分支。
- 该分支执行的操作是 addClass("sidebar-collapsed").removeClass("sidebar-collapsed-back"),这实际上是将一个已经收起的侧边栏再次设置为收起状态。由于侧边栏在视觉上已经收起,这个操作没有实际效果,侧边栏保持收起。
- toggle 的值被翻转为 false。
此时,侧边栏仍然是收起状态,但 toggle 变量已经变为 false。当用户进行第二次点击时:
MarsCode
字节跳动旗下的免费AI编程工具
339
查看详情
- toggle 的值为 false。
- 代码进入 else 分支。
- 该分支执行的操作是 removeClass("sidebar-collapsed").addClass("sidebar-collapsed-back"),这正确地将侧边栏从收起状态切换到展开状态。
- toggle 的值被翻转为 true。
这就是导致首次点击无效,需要双击才能展开的根本原因:J*aScript的状态变量 toggle 没有正确反映侧边栏的初始视觉状态。
解决方案
要解决这个问题,我们需要确保 toggle 变量的初始值与页面加载时侧边栏的实际视觉状态保持一致。由于我们在页面加载时通过 addClass("sidebar-collapsed") 将侧边栏设置为收起状态,那么 toggle 变量的初始值应该反映这种“收起”状态,即 false。
将 toggle 的初始值从 true 修改为 false 即可解决此问题。
var toggle = false; // 将初始状态改为 false,与侧边栏的初始视觉状态(收起)匹配
$(".page-container").addClass("sidebar-collapsed"); // 页面加载时将侧边栏设置为收起状态
$(".sidebar-icon").click(function() {
if (toggle) {
// 如果 toggle 为 true(表示当前为展开状态),则执行收起操作
$(".page-container").addClass("sidebar-collapsed").removeClass("sidebar-collapsed-back");
$("#menu span").css({
"position": "absolute"
});
} else {
// 如果 toggle 为 false(表示当前为收起状态),则执行展开操作
$(".page-container").removeClass("sidebar-collapsed").addClass("sidebar-collapsed-back");
setTimeout(function() {
$("#menu span").css({
"position": "relative"
});
}, 400);
}
toggle = !toggle; // 翻转 toggle 状态,为下一次点击做准备
});通过将 toggle 变量初始化为 false,首次点击时,if (toggle) 条件将为 false,从而直接执行 else 分支,正确地将侧边栏从收起状态切换到展开状态。
代码实现
以下是完整的HTML、CSS和J*aScript代码,其中包含了已修复的J*aScript逻辑。
HTML 结构 (index.html)
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>可折叠侧边栏教程</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="page-container"
;>
<div class="sidebar-menu">
<div class="logo">
<a href="#" class="sidebar-icon">
<svg width="37" height="26" viewBox="0 0 37 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M27.6667 9.33333H2M35 2H2M35 16.6667H2M27.6667 24H2" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
</div>
<div class="menu">
<ul id="menu">
<li><a href="#">
<svg width="36" height="33" viewBox="0 0 36 33" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.0051 31.5649V29.7669C15.0051 28.8132 14.6339 27.8986 13.9731 27.2242C13.3122 26.5499 12.4159 26.171 11.4814 26.171H4.4339C3.49935 26.171 2.60307 26.5499 1.94224 27.2242C1.28141 27.8986 0.910156 28.8132 0.910156 29.7669V31.5649M11.4814 18.9792C11.4814 20.9652 9.90376 22.5751 7.95765 22.5751C6.01153 22.5751 4.4339 20.9652 4.4339 18.9792C4.4339 16.9932 6.01153 15.3833 7.95765 15.3833C9.90376 15.3833 11.4814 16.9932 11.4814 18.9792Z" stroke="white" stroke-width="1.71232" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M34.386 31.5649V29.7669C34.386 28.8132 34.0147 27.8986 33.3539 27.2242C32.6931 26.5499 31.7968 26.171 30.8622 26.171H23.8148C22.8802 26.171 21.9839 26.5499 21.3231 27.2242C20.6623 27.8986 20.291 28.8132 20.291 29.7669V31.5649M30.8622 18.9792C30.8622 20.9652 29.2846 22.5751 27.3385 22.5751C25.3924 22.5751 23.8148 20.9652 23.8148 18.9792C23.8148 16.9932 25.3924 15.3833 27.3385 15.3833C29.2846 15.3833 30.8622 16.9932 30.8622 18.9792Z" stroke="white" stroke-width="1.71232" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M32.624 6.09421C32.626 6.88523 32.4449 7.66555 32.0954 8.37161C31.681 9.21769 31.044 9.92934 30.2557 10.4268C29.4674 10.9243 28.5589 11.188 27.632 11.1884C26.8568 11.1905 26.0922 11.0056 25.4003 10.649L22.0527 11.7877L23.1686 8.37161C22.8191 7.66555 22.638 6.88523 22.64 6.09421C22.6404 5.14834 22.8988 4.22125 23.3863 3.41679C23.8738 2.61233 24.5712 1.96226 25.4003 1.5394C26.0922 1.18277 26.8568 0.997955 27.632 1.00002H27.9256C29.1497 1.06893 30.3059 1.59619 31.1728 2.48084C32.0397 3.36549 32.5564 4.54536 32.624 5.79455V6.09421Z" stroke="white" stroke-width="0.933995" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2.67292 6.09421C2.6709 6.88522 2.85201 7.66554 3.20148 8.37161C3.61586 9.21769 4.25288 9.92934 5.0412 10.4268C5.82952 10.9243 6.738 11.188 7.66489 11.1884C8.44003 11.1905 9.20469 11.0056 9.89659 10.649L13.2441 11.7877L12.1283 8.37161C12.4778 7.66554 12.6589 6.88522 12.6569 6.09421C12.6565 5.14834 12.3981 4.22125 11.9106 3.41679C11.4231 2.61233 10.7257 1.96226 9.89659 1.5394C9.20469 1.18277 8.44003 0.997955 7.66489 1.00002H7.37124C6.14713 1.06893 4.99093 1.59619 4.12403 2.48084C3.25714 3.36549 2.74046 4.54536 2.67292 5.79455V6.09421Z" stroke="white" stroke-width="0.933995" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Counseling</span></a></li>
<li><a href="#">
<svg width="24" height="27" viewBox="0 0 24 27" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22.6111 25.6401V23.0134C22.6111 21.6201 22.0576 20.2839 21.0724 19.2987C20.0872 18.3135 18.751 17.7601 17.3577 17.7601H6.85101C5.45773 17.7601 4.12152 18.3135 3.13633 19.2987C2.15113 20.2839 1.59766 21.6201 1.59766 23.0134V25.6401M17.3577 7.25335C17.3577 10.1547 15.0057 12.5067 12.1044 12.5067C9.20302 12.5067 6.85101 10.1547 6.85101 7.25335C6.85101 4.35201 9.20302 2 12.1044 2C15.0057 2 17.3577 4.35201 17.3577 7.25335Z" stroke="white" stroke-width="2.62668" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Coaching</span></a></li>
<li><a href="#">
<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.7879 7.68604H14.1466C13.64 7.68604 13.1541 7.8873 12.7958 8.24555C12.4376 8.6038 12.2363 9.0897 12.2363 9.59635V24.8788C12.2363 25.3855 12.4376 25.8714 12.7958 26.2296C13.1541 26.5879 13.64 26.7891 14.1466 26.7891H25.6085C26.1151 26.7891 26.601 26.5879 26.9593 26.2296C27.3175 25.8714 27.5188 25.3855 27.5188 24.8788V13.417M21.7879 7.68604L27.5188 13.417M21.7879 7.68604V13.417H27.5188M23.6982 18.1927H16.0569M23.6982 22.0134H16.0569M17.9673 14.3721H16.0569" stroke="white" stroke-width="1.91031" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M20.8336 5.77578C20.8336 5.26913 20.6323 4.78324 20.2741 4.42498C19.9158 4.06673 19.4299 3.86547 18.92以上就是优化jQuery控制的侧边栏菜单初始化行为的详细内容,更多请关注其它相关文章!
# 自定义
# 推广代理的营销方式
# 泌阳关键词排名优化专业
# 淘宝店铺推广营销
# 海口互联网营销网站建设
# 铁岭公司网站建设套餐
# 山东seo公司案例分析
# 长春网站优化电池
# 推广商户营销方案
# 营销推广会策划案
# 海宁外贸多语言网站建设
# 切换到
# 值为
# 时将
# css
# 布尔
# 复选框
# 双击
# 设置为
# 加载
# 首次
# ai
# svg
# go
# html
# jquery
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
c++项目目录结构应该如何组织_c++工程化项目结构规范
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
天眼查企业查询官网入口 天眼查官方网页版查询
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
QQ官网正版登录链接 QQ在线登录入口最新
uc浏览器网页版入口 uc浏览器网页版最新网址
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
深入理解J*aScript Promise异步执行与微任务队列
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
我的世界官方游戏入口 我的世界官网平台直达链接
python3时间如何用calendar输出?
j*a toString()的覆盖
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
微信聊天记录怎么加密_微信聊天记录加密方法
qq邮箱日历功能怎么用_创建日程与会议邀请的技巧
深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量
163邮箱官方主页登录 直达网易邮箱登录核心页面
一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证
如何在J*a中使用Locale处理多语言环境
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法
菜鸟取件码是什么怎么查 最全查询渠道汇总
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
PHP 枚举:根据字符串获取枚举案例的策略与实现
J*aScript map 迭代中检测空数组元素的有效方法
DLsite中文平台入口 DLsite官网内容在线查看
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器
UC浏览器网页版登录入口官网 电脑版网址入口
怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法
深入理解J*a链表中的IPosition接口与使用
Pandas DataFrame:高效添加条件计算列
Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】
J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析
邮政快递包裹最新位置 邮政快递实时追踪入口
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】
电脑IP地址怎么查 查看本机IP地址的几种方法
单12V-2×6实现为RTX 5090供电750W!甚至都没敢跑分
漫蛙漫画官方首页 漫蛙2漫画在线阅读入口
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置
在python-socketio事件处理器中安全访问Flask应用上下文
高德地图怎么看全景照片_高德地图全景照片浏览教程


2025-10-22
浏览次数:次
返回列表
;>
<div class="sidebar-menu">
<div class="logo">
<a href="#" class="sidebar-icon">
<svg width="37" height="26" viewBox="0 0 37 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M27.6667 9.33333H2M35 2H2M35 16.6667H2M27.6667 24H2" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
</div>
<div class="menu">
<ul id="menu">
<li><a href="#">
<svg width="36" height="33" viewBox="0 0 36 33" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.0051 31.5649V29.7669C15.0051 28.8132 14.6339 27.8986 13.9731 27.2242C13.3122 26.5499 12.4159 26.171 11.4814 26.171H4.4339C3.49935 26.171 2.60307 26.5499 1.94224 27.2242C1.28141 27.8986 0.910156 28.8132 0.910156 29.7669V31.5649M11.4814 18.9792C11.4814 20.9652 9.90376 22.5751 7.95765 22.5751C6.01153 22.5751 4.4339 20.9652 4.4339 18.9792C4.4339 16.9932 6.01153 15.3833 7.95765 15.3833C9.90376 15.3833 11.4814 16.9932 11.4814 18.9792Z" stroke="white" stroke-width="1.71232" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M34.386 31.5649V29.7669C34.386 28.8132 34.0147 27.8986 33.3539 27.2242C32.6931 26.5499 31.7968 26.171 30.8622 26.171H23.8148C22.8802 26.171 21.9839 26.5499 21.3231 27.2242C20.6623 27.8986 20.291 28.8132 20.291 29.7669V31.5649M30.8622 18.9792C30.8622 20.9652 29.2846 22.5751 27.3385 22.5751C25.3924 22.5751 23.8148 20.9652 23.8148 18.9792C23.8148 16.9932 25.3924 15.3833 27.3385 15.3833C29.2846 15.3833 30.8622 16.9932 30.8622 18.9792Z" stroke="white" stroke-width="1.71232" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M32.624 6.09421C32.626 6.88523 32.4449 7.66555 32.0954 8.37161C31.681 9.21769 31.044 9.92934 30.2557 10.4268C29.4674 10.9243 28.5589 11.188 27.632 11.1884C26.8568 11.1905 26.0922 11.0056 25.4003 10.649L22.0527 11.7877L23.1686 8.37161C22.8191 7.66555 22.638 6.88523 22.64 6.09421C22.6404 5.14834 22.8988 4.22125 23.3863 3.41679C23.8738 2.61233 24.5712 1.96226 25.4003 1.5394C26.0922 1.18277 26.8568 0.997955 27.632 1.00002H27.9256C29.1497 1.06893 30.3059 1.59619 31.1728 2.48084C32.0397 3.36549 32.5564 4.54536 32.624 5.79455V6.09421Z" stroke="white" stroke-width="0.933995" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M2.67292 6.09421C2.6709 6.88522 2.85201 7.66554 3.20148 8.37161C3.61586 9.21769 4.25288 9.92934 5.0412 10.4268C5.82952 10.9243 6.738 11.188 7.66489 11.1884C8.44003 11.1905 9.20469 11.0056 9.89659 10.649L13.2441 11.7877L12.1283 8.37161C12.4778 7.66554 12.6589 6.88522 12.6569 6.09421C12.6565 5.14834 12.3981 4.22125 11.9106 3.41679C11.4231 2.61233 10.7257 1.96226 9.89659 1.5394C9.20469 1.18277 8.44003 0.997955 7.66489 1.00002H7.37124C6.14713 1.06893 4.99093 1.59619 4.12403 2.48084C3.25714 3.36549 2.74046 4.54536 2.67292 5.79455V6.09421Z" stroke="white" stroke-width="0.933995" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Counseling</span></a></li>
<li><a href="#">
<svg width="24" height="27" viewBox="0 0 24 27" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M22.6111 25.6401V23.0134C22.6111 21.6201 22.0576 20.2839 21.0724 19.2987C20.0872 18.3135 18.751 17.7601 17.3577 17.7601H6.85101C5.45773 17.7601 4.12152 18.3135 3.13633 19.2987C2.15113 20.2839 1.59766 21.6201 1.59766 23.0134V25.6401M17.3577 7.25335C17.3577 10.1547 15.0057 12.5067 12.1044 12.5067C9.20302 12.5067 6.85101 10.1547 6.85101 7.25335C6.85101 4.35201 9.20302 2 12.1044 2C15.0057 2 17.3577 4.35201 17.3577 7.25335Z" stroke="white" stroke-width="2.62668" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span>Coaching</span></a></li>
<li><a href="#">
<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.7879 7.68604H14.1466C13.64 7.68604 13.1541 7.8873 12.7958 8.24555C12.4376 8.6038 12.2363 9.0897 12.2363 9.59635V24.8788C12.2363 25.3855 12.4376 25.8714 12.7958 26.2296C13.1541 26.5879 13.64 26.7891 14.1466 26.7891H25.6085C26.1151 26.7891 26.601 26.5879 26.9593 26.2296C27.3175 25.8714 27.5188 25.3855 27.5188 24.8788V13.417M21.7879 7.68604L27.5188 13.417M21.7879 7.68604V13.417H27.5188M23.6982 18.1927H16.0569M23.6982 22.0134H16.0569M17.9673 14.3721H16.0569" stroke="white" stroke-width="1.91031" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M20.8336 5.77578C20.8336 5.26913 20.6323 4.78324 20.2741 4.42498C19.9158 4.06673 19.4299 3.86547 18.92