javascript - Bootstrap 避免导航栏切换按钮以关闭移动设备上打开的子菜单
问题描述
我有一个基于 Bootstrap 3.3.7 的代码我的
菜单上有不同的菜单项和子菜单,我希望所有子菜单项都可以在移动设备上打开,这意味着无需单击任何菜单项来显示它的子菜单,所以我写了一个JS代码来打开手机上的所有子菜单:
function opensubmenus() {
if ($(window).width() < 768) {
$("#top-navbar-collapse li").addClass('open');
} else {
$("#top-navbar-collapse li").removeClass('open');
}
}
$(window).resize(opensubmenus);
opensubmenus();
但问题是当我单击导航栏切换按钮时,它会关闭所有子菜单,但我需要在移动设备上始终保持它们打开您可以在此站点上查看我的在线示例:https ://dedidata.com
在这里我展示了一个截图:https ://pasteboard.co/IfSMCIu.jpg
我不喜欢完全禁用导航栏切换按钮,我需要它来切换整个导航栏,但我不喜欢它关闭子菜单,我的 JS 代码打开子菜单,但导航栏切换关闭那些子菜单
解决方案
此代码段将应用于所有下拉列表,您可以对其进行修改以获得所需的下拉列表。
我将解释它的作用:
const targets = document.getElementsByClassName('dropdown-toggle');
for(let i = 0; i < targets.length; i++) {
targets[i].addEventListener('click', () => {
targets[i].hasAttribute('data-toggle') &&
targets[i].removeAttribute('data-toggle');
// Managing locally the open and close
targets[i].parentElement.classList.toggle('open');
});
}
第一行:
const targets = document.getElementsByClassName('dropdown-toggle');
我们得到所有带有类名的元素dropdown-toggle
(这在boostrap中用于下拉菜单)
对于每个元素,我们附加一个click
侦听器,以便在用户单击下拉菜单时能够“手动”管理下拉菜单。
这是按行管理的:targets[i].parentElement.classList.toggle('open');
避免自动关闭菜单的重要一环是删除该属性data-toggle
。
targets[i].hasAttribute('data-toggle') &&
targets[i].removeAttribute('data-toggle');
如果您只有一个人为手机应用这样的解决方案,您可以使用is.js来检查您何时使用手机 (android/ios)
更新
此更新将自动打开菜单:
const menuItems = document.getElementsByClassName('navbar-toggle');
for (let i = 0; i < menuItems.length; i++) {
menuItems[i].hasAttribute('data-toggle') && menuItems[i].addEventListener('click', () => {
const elements = document.getElementsByClassName('dropdown-toggle');
for (let i = 0; i < elements.length; i++) {
elements[i].hasAttribute('data-toggle') && elements[i].removeAttribute('data-toggle');
elements[i].parentElement.classList.add('open');
}
});
}
推荐阅读
- python - 如何从两个列表中的随机值创建字典?
- vue.js - 销毁vue / nuxtjs中的页面/组件时如何取消挂起的graphql?
- java - 在 hibernate/spring-jpa 中不调用 save() 来更新实体/行是一个好还是坏的约定?
- python - 为什么在 python file_list 错误上运行 mediapipe?
- javascript - 如何使用 js 从 json 数据构建树视图?
- java - 项目在 IntelliJ Java 项目的远程服务器和本地终端上显示不同的输出
- scala - 在序列图中查找共同元素 - scala
- javascript - 传递给函数后未定义的护照对象
- office-js - 有没有办法通过office.js在word中插入图表
- node.js - 运行 sudo pm2 start server.js 时需要 Stack / MODULE_NOT_FOUND 错误