在推送菜单上添加多个关闭菜单链接
adding multiple close menu links on push menu
我有一个从左边出来的推送菜单,效果很好,但我很难在推送菜单中应用多个"关闭菜单"链接。
我曾尝试将"querySelector"更改为"querySelectorAll",但这会破坏推送菜单。
之所以选择这种类型的菜单,是因为我将使用内容切换器,而不是转到另一个网页。
提供了一个工作版本
HTML JavaScript
<div id="wrapper">
<div id="container">
<header>
<button id="c-button--push-left" class="c-button close-menu"></button>
</header>
</div>
</div>
<div id="c-menu--push-left" class="c-menu c-menu--push-left">
<div class="c-menu__close close-menu"></div>
<nav>
<ul>
<li><a id="home" class="close-menu">Home</a></li>
<li><a id="work" class="close-menu">Work</a></li>
</ul>
</nav>
</div>
<div id="c-mask" class="c-mask"></div>
<script type="text/javascript">
var pushLeft = new Menu({
wrapper: '#wrapper',
type: 'push-left',
menuOpenerClass: '.close-menu',
maskId: '#c-mask',
});
var pushLeftBtn = document.querySelector('#c-button--push-left');
pushLeftBtn.addEventListener('click', function(e) {
e.preventDefault;
pushLeft.open();
});
</script>
jQuery
(function(window) {
'use strict';
/**
* Extend Object helper function.
*/
function extend(a, b) {
for(var key in b) {
if(b.hasOwnProperty(key)) {
a[key] = b[key];
}
}
return a;
}
/**
* Each helper function.
*/
function each(collection, callback) {
for (var i = 0; i < collection.length; i++) {
var item = collection[i];
callback(item);
}
}
/**
* Menu Constructor.
*/
function Menu(options) {
this.options = extend({}, this.options);
extend(this.options, options);
this._init();
}
/**
* Menu Options.
*/
Menu.prototype.options = {
wrapper: '#o-wrapper', // The content wrapper
type: 'slide-left', // The menu type
menuOpenerClass: '.c-button', // The menu opener class names (i.e. the buttons)
maskId: '#c-mask' // The ID of the mask
};
/**
* Initialise Menu.
*/
Menu.prototype._init = function() {
this.body = document.body;
this.wrapper = document.querySelector(this.options.wrapper);
this.mask = document.querySelector(this.options.maskId);
this.menu = document.querySelector('#c-menu--' + this.options.type);
this.closeBtn = this.menu.querySelector('.close-menu');
this.menuOpeners = document.querySelectorAll(this.options.menuOpenerClass);
this._initEvents();
};
/**
* Initialise Menu Events.
*/
Menu.prototype._initEvents = function() {
// Event for clicks on the close button inside the menu.
this.closeBtn.addEventListener('click', function(e) {
e.preventDefault();
this.close();
}.bind(this));
// Event for clicks on the mask.
this.mask.addEventListener('click', function(e) {
e.preventDefault();
this.close();
}.bind(this));
};
/**
* Open Menu.
*/
Menu.prototype.open = function() {
this.body.classList.add('has-active-menu');
this.wrapper.classList.add('has-' + this.options.type);
this.menu.classList.add('is-active');
this.mask.classList.add('is-active');
this.disableMenuOpeners();
};
/**
* Close Menu.
*/
Menu.prototype.close = function() {
this.body.classList.remove('has-active-menu');
this.wrapper.classList.remove('has-' + this.options.type);
this.menu.classList.remove('is-active');
this.mask.classList.remove('is-active');
this.enableMenuOpeners();
};
/**
* Disable Menu Openers.
*/
Menu.prototype.disableMenuOpeners = function() {
each(this.menuOpeners, function(item) {
item.disabled = false;
});
};
/**
* Enable Menu Openers.
*/
Menu.prototype.enableMenuOpeners = function() {
each(this.menuOpeners, function(item) {
item.disabled = false;
});
};
/**
* Add to global namespace.
*/
window.Menu = Menu;
})(window);
只需使用querySelectorAll
,在Menu.prototype._initEvents
中使用此代码迭代closeBtn,由于它是数组,您可能应该将其重命名为closeButtons左右。
for (var i = 0; i < this.closeBtn.length; ++i) {
this.closeBtn[i].addEventListener('click', function(e) {
e.preventDefault();
this.close();
}.bind(this));
}
相关文章:
- 我的下拉菜单中的链接不起作用
- 绝对链接/相对链接均未获胜't在菜单中工作
- Javascript+动态菜单+当前链接样式(CSS)+基于PHP的网站
- 当主导航链接悬停时,在侧菜单中显示链接
- 如何在每个下拉菜单项的每个类别下输出链接
- 下拉菜单在我进入链接之前消失了
- 如何分配数据切换=“;下拉菜单”;用于wordpress中的父链接
- 用这个jQuery动画菜单悬停超链接
- 每个链接的菜单下方的进度条
- Php菜单查询数据库并显示文本/链接
- 在表格最后一行(链接)中显示菜单,并在单击菜单项时显示模式窗口
- 单击手风琴菜单外的链接时折叠jQuery手风琴
- 在阻止默认操作时启用菜单的链接
- jQuery UI链接选择菜单.单击按钮时窗体将重置
- 如何在单击子链接时停止垂直菜单的手风琴
- 当屏幕尺寸较小时,可使用Javascript向移动菜单添加链接.不再有效
- 当子菜单的父级或包含链接处于活动状态时,如何告知子菜单可见
- 如何在 jQuery 中为链接我的“活动”滚动菜单创建例外
- 下拉菜单-链接不起作用
- 重叠的选项卡/下拉菜单-链接不起作用-CSS或JS问题