如何修改CSS动画菜单按钮 默认显示箭头点击切换汉堡图标
菜单按钮图标逻辑反转实现方案
该需求可以直接实现,无需重构原有交互,仅需极小改动即可完成,具体操作如下:
- 给HTML中默认的菜单按钮节点添加
menu-btn_active类,让页面初始加载时直接渲染原激活态的箭头样式 - 修正原有JS的语法疏漏:将
e.preventDefault改为e.preventDefault(),否则无法正常阻止a标签的默认跳转行为
原有点击切换类的逻辑不需要改动,toggleClass会自动在「箭头(带active类)」和「汉堡(不带active类)」之间切换,完全匹配需要的交互效果。
修改后完整代码
JS部分
$('.menu-btn').on('click', function(e) { e.preventDefault(); $(this).toggleClass('menu-btn_active'); // 如果后续需要联动菜单显示隐藏,在这里同步切换菜单链接的active类即可 });
CSS部分
原有CSS不需要做任何调整,直接沿用即可:
body { font-family: sans-serif; margin: 0; } .section { height: 100vh; background-color: #7b1fa2; display: flex; justify-content: center; align-items: center; } .menu-btn { display: block; width: 50px; height: 50px; background-color: #fff; border-radius: 50%; position: relative; } .menu-btn span, .menu-btn span::before, .menu-btn span::after { position: absolute; top: 50%; margin-top: -1px; left: 50%; margin-left: -10px; width: 20px; height: 2px; background-color: #222; } .menu-btn span::before, .menu-btn span::after { content: ''; display: block; transition: 0.2s; } .menu-btn span::before { transform: translateY(-5px); } .menu-btn span::after { transform: translateY(5px); } .menu-btn_active span:before { transform: rotate(-35deg); width: 10px; transform-origin: left bottom; } .menu-btn_active span:after { transform: rotate(35deg); width: 10px; transform-origin: left top; } .menu-block { display: flex; justify-content: center; align-items: center; } .menu-nav { background-color: #fff; height: 50px; } .menu-nav__link { display: inline-block; text-decoration: none; color: #fff; margin-right: 20px; } .menu-nav__link { transition: 0.5s; transform-origin: right center; transform: translateX(50%); opacity: 0; } .menu-nav__link_active { transform: translateX(0%); opacity: 1; }
HTML部分
仅需在menu-btn的class属性中新增menu-btn_active即可:
<div class="section"> <a href="#" class="menu-btn menu-btn_active"> <span></span> </a> </div>
实现逻辑说明:原代码中
menu-btn_active类对应箭头样式,无该类对应汉堡样式,只需要让节点默认携带该类,首次点击时toggleClass会自动移除该类切换为汉堡,后续点击会在两个状态间循环切换,完全符合需求。如果需要调整箭头朝向,只需要修改active状态下两个伪元素的旋转角度和transform-origin值即可。
内容的提问来源于stack exchange,提问作者nanchalantflow
相关产品推荐
相关产品推荐

