【发布时间】:2017-08-21 17:19:00
【问题描述】:
总的来说,我对 jQuery 和 JavaScript 还很陌生。
我为一个简单的推送菜单编写了这段代码,但我觉得可能有更好的方法来编写它,因为其中一些似乎重复了。
任何建议都会很棒。
完整代码可见here:
//Mobile Push menu
// Open or close menu using menu bar icon or clicking outside of the menu
$('.menu-icon').click(function() {
$('.main-content').toggleClass('push-open push-close');
$('.menu-icon').toggleClass('push-open push-close');
});
// Close menu with X icon
$('.close-icon').click(function() {
$('.main-content').toggleClass('push-open push-close');
$('.menu-icon').toggleClass('push-open push-close');
});
//Close menu on link click
$('.menu a').click(function() {
$('.main-content').toggleClass('push-open push-close');
$('.menu-icon').toggleClass('push-open push-close');
});
// Close with esc key
$(document).keyup(function(e) {
if (e.keyCode == 27) { // escape key maps to keycode `27`
if( $('.main-content').hasClass('push-open') ){
$('.main-content').addClass('push-close');
$('.main-content').removeClass('push-open');
}
if( $('.menu-icon').hasClass('push-open') ){
$('.menu-icon').removeClass('push-open');
$('.menu-icon').removeClass('push-close');
}
}
});
【问题讨论】:
-
为什么不上一堂普通课呢?这样你只需要一个
$('.menu_class').click(function() { $('.closing_class').toggleClass('push-open push-close'); }); -
@JamesJohnston & Heck - 你根本不需要两个课程。只有一个:)
-
@RokoC.Buljan ?我评论了他应该如何使用单个通用类来切换某些东西。已修复,因为我所做的只是复制他以前的代码,但我用更好的示例对其进行了更新。
-
@JamesJohnston 不,你的建议没问题,我只是说拥有
'push-open push-close'很奇怪。您只需要其中一个(从逻辑上讲,默认样式 - 即考虑 JS-last - 始终处于打开/可见状态。只需要.push-close:)) -
所以你有三个不同的点击处理程序,都运行相同的函数——为什么不把它移动到一个命名函数,并创建一个单击处理程序,如`$(".menu-icon, .close -icon, .menu a").on("click", function(){...}) 通过这样做,您不会复制功能。看看codepen.io/anon/pen/RZyNaR#anon-login