使用 JavaScript 和 jQuery 的专业菜单

2024-01-28

我为我的 WordPress 网站设计了一个菜单。

我的菜单有两个主要问题:

1-当我单击图标时,将灰色显示在整个屏幕上的“.back”类变为黑色。使背景变成全黑。

2-第二个问题与我点击灰色区域时有关。 当放在body上时带有“.back”类。我成功了,我单击它,菜单关闭,但图标没有返回到之前的状态。

我把我写的代码放在下面,以便您可以更好地理解我的问题,我希望您能帮助我解决这个问题。

Thanks.

let icon = document.querySelector(".icon_menu");
let nav = document.querySelector(".main_menu");

icon.addEventListener("click", function() {
  if (this.classList.contains("bi-grid-fill")) {
    this.classList = "bi bi-x-circle-fill icon_menu";

    icon.style.left = "25%";
    icon.style.color = "#ff6f6f";
    icon.style.fontSize = "30px";

    nav.style.left = 0;
  } else {
    this.classList = "bi bi-grid-fill icon_menu";

    icon.style.left = "2%";
    icon.style.color = "#a66fff";
    icon.style.fontSize = "40px";

    nav.style.left = "-300px";
  }

  $('body').append('<div class="back"></div>')
  $('.back').click(function() {
    icon.style.left = "2%";
    icon.style.color = "#a66fff";
    icon.style.fontSize = "40px";

    nav.style.left = '-300px';

    $(this).remove();
  });
});
.main_menu {
  position: absolute;
  top: 0;
  left: -300px;
  bottom: 0;
  z-index: 999;
  background: #eee;
  padding-right: 2rem;
  transition: all 1s ease;
}

.icon_menu {
  position: fixed;
  top: 10%;
  left: 2%;
  font-size: 40px;
  color: #a66fff;
  cursor: pointer;
  z-index: 99999;
  transition: all 1s ease;
}

.main_menu ul {
  list-style: none;
  line-height: 60px;
  font-size: 35px;
}

.main_menu ul li a {
  color: #000000;
  text-decoration: none;
  padding-right: 15px;
  padding-left: 40px;
  margin-left: -60px;
  margin-bottom: 10px;
}

.back {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 9 !important;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: #00000056;
}
<link href="https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/font/bootstrap-icons.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
  <nav id="nav">
    <span class="bi bi-grid-fill icon_menu"></span>
    <aside class="main_menu">
      <ul>
        <li>
          <a href="#">
                            home
                        </a>
        </li>

        <li>
          <a href="#">
                            our articles
                        </a>
        </li>

        <li><a href="#">
                            about us
                        </a>
        </li>
      </ul>
    </aside>
  </nav>
</section>

您的第一个问题是因为您不断添加/删除元素而引起的。这是不好的做法,你应该在里面打电话.toggle()隐藏/显示它。

引起第二个问题的原因是您仅在单击按钮时更改类,而不是背景。

试试这个代码:

let icon = document.querySelector(".icon_menu");
let nav = document.querySelector(".main_menu");

$('.back').hide();
$('.back').click(function() {
  if ($(this).is(':hidden')) return;
  $(this).toggle();
  
  icon.classList = "bi bi-grid-fill icon_menu";
  icon.style.left = "2%";
  icon.style.color = "#a66fff";
  icon.style.fontSize = "40px";

  nav.style.left = '-300px';
});

icon.addEventListener("click", function() {
  if (this.classList.contains("bi-grid-fill")) {
    this.classList = "bi bi-x-circle-fill icon_menu";
    icon.style.left = "25%";
    icon.style.color = "#ff6f6f";
    icon.style.fontSize = "30px";

    nav.style.left = 0;
  } else {
    this.classList = "bi bi-grid-fill icon_menu";
    icon.style.left = "2%";
    icon.style.color = "#a66fff";
    icon.style.fontSize = "40px";

    nav.style.left = "-300px";
  }
  $('.back').toggle();
});
.main_menu {
  position: absolute;
  top: 0;
  left: -300px;
  bottom: 0;
  z-index: 999;
  background: #eee;
  padding-right: 2rem;
  transition: all 1s ease;
}

.icon_menu {
  position: fixed;
  top: 10%;
  left: 2%;
  font-size: 40px;
  color: #a66fff;
  cursor: pointer;
  z-index: 99999;
  transition: all 1s ease;
}

.main_menu ul {
  list-style: none;
  line-height: 60px;
  font-size: 35px;
}

.main_menu ul li a {
  color: #000000;
  text-decoration: none;
  padding-right: 15px;
  padding-left: 40px;
  margin-left: -60px;
  margin-bottom: 10px;
}

.back {
  width: 100%;
  height: 100%;
  position: fixed;
  z-index: 9 !important;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: #00000056;
}
<link href="https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/font/bootstrap-icons.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
  <nav id="nav">
    <span class="bi bi-grid-fill icon_menu"></span>
    <aside class="main_menu">
      <ul>
        <li>
          <a href="#">home</a>
        </li>

        <li>
          <a href="#">our articles</a>
        </li>

        <li><a href="#">about us</a>
        </li>
      </ul>
    </aside>
  </nav>
</section>
<div class="back"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JavaScript 和 jQuery 的专业菜单 的相关文章

  • 使用 Jquery 传递隐藏字段值

    我有一个正常的hidden Input field我在哪里生成random string 我需要将其附加到我尝试将数据发布到另一个页面的 URL 中 我已经做到了这一点并且效果很好 url Upload html field1 newval
  • 在 jQuery 中获取 SELECT 的值和文本[重复]

    这个问题在这里已经有答案了 可能的重复 获取选择框中选定选项标签的值 https stackoverflow com questions 7380604 getting the value of the selected option ta
  • 如何调试超时等待异步 Angular 任务?无法在角度页面上找到元素

    编辑 请注意 在 ernst zwingli 的帮助下 我找到了问题的根源 因此 如果您遇到相同的错误 他指出的修复之一可能会帮助您 我的问题是量角器本身的一个已知问题 如果您认为这可能是您 我已经扩展了我的步骤 以在我最初的问题之后查明问
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • Rangy:插入符号下的单词(再次)

    我正在尝试创建一个预输入代码以添加到 wysihtml5 富文本编辑器 基本上 我需要能够插入人员 标签引用 例如 Twitter Github Facebook 我发现一些人试图实现同样的事情的代码 http jsfiddle net A
  • 如何按 Angular 表中的属性(该属性具有单个 rownspan)进行分组?

    我没有找到这个问题的合适标题 我的问题是 例如 我有一个包含两列的表 列汽车品牌和列汽车型号 我希望表是 like in this picture 换句话说 品牌名称只会出现 1 次 我的输入数组采用以下 json 格式 brand Aud
  • Socket IO 服务器到服务器

    服务器是否可以使用 Socket IO 连接到另一个服务器并被视为客户端 并让它加入房间 接收 io sockets in lobby emit 和更多 第一个服务器也在监听连接 消息 嘿 Brad 下面是我的完整 js 应用程序 供参考
  • 中有样式表 吗?

    在内部链接 CSS 文件是一个坏主意吗 body 我读过 如果浏览器在外部找到另一个 CSS 文件 则它会被迫重新开始 CSS 渲染 head 只是因为它可能需要将样式应用于已经渲染的元素 另外 我认为 HTML 无法正确验证 我需要确认这
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 在 Android Chrome 中隐藏 HTML5 音频/视频通知

    我的网络应用程序上有一个 HTML5 音频元素 在某些时候 我使用以下代码以编程方式停止播放 audioElement pause audioElement currentTime 0 播放音频时 我的 Android 设备 使用 Goog
  • 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回

    我正在研究下面的代码片段 我有一个名为 stuObjList 的 JSON 对象数组 我想循环遍历数组以查找具有特定标志集的特定 JSON 对象 然后进行数据库调用以检索更多数据 当然 FOR 循环不会等待数据库调用返回并到达 j leng
  • 使用 ng-if 改变角度方向

    我想通过单击将方向从 rtl 更改为 ltr and in 设置 html
  • 在 React Web 应用程序中使用 createjs-soundjs

    我想用https www npmjs com package createjs soundjs https www npmjs com package createjs soundjs在 React Web 应用程序上播放声音 我正常安装了
  • 意外的令牌:尝试解析 JSON 字符串时

    我正在尝试解析这个 JSON 字符串 RESULTS name Thessaloniki GR type Sailing l sailing weather beach Porto 20Carras 20Marina 45904 name
  • 如何使用 javascript 更改文件扩展名

    有谁知道在 Javascript 中更改文件扩展名的简单方法吗 例如 我有一个带有 first docx 的变量 但我需要将其更改为 first html 这将改变字符串包含文件名 let file first docx file file
  • 使用 File API polyfill 读取数据 URL

    我正在尝试使用文件 API 库 https github com mailru FileAPI https github com mailru FileAPI 作为不支持文件 API 的浏览器的后备 以便将文件作为数据 URL 读取并将其传
  • JQuery UI:将长元素放在光标位置而不是元素的中间

    我有一些很长的可拖动元素 可以将它们放入背景表的所有单元格中 当我开始拖动此类元素并将其悬停在可放置容器 表格的单元格 上时 了解元素将被放置到何处的 热点 点是其自身的中间 不幸的是 我的元素的中间通常不可见 并且将元素放在正确的位置是没
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • HTML 表格 - 固定列宽和多个可变列宽

    我必须建立一个有 5 列的表 表格宽度是可变的 内容宽度的 50 有些列包含固定大小的按钮 因此这些列应该有一个固定大小 例如 100px 有些列中有文本 所以我希望这些列具有可变的列宽 例如 Column1 tablewidth sum

随机推荐

  • Java发送midi消息到设备

    我有一个连接到树莓派的 APC40 MkII 在 pi 上 我正在运行 java 使用 java sound midi 包 我可以毫无问题地建立与 APC 的连接并接收其 midi 消息 但经过大量研究后 我仍然不明白如何向 APC 发送
  • Webactivator 无法在 IIS 7 上运行

    我有几个使用 WebActivator 来使用包的 Web 应用程序 在装有 IIS 7 5 Express 的本地计算机上 无论我在发布配置还是调试配置中进行测试 一切都正常 但是 在装有 IIS 7 5 的生产计算机上 WebActiv
  • 如何使用 jQuery 将文本添加到特定的 div 元素?

    我在使用 jquery 时遇到了问题 我的 HTML 是 div span class test span div div span class test span div 现在我尝试使用 Jquery 在 span 中添加文本 j spa
  • PostgreSQL 数据库服务

    我从他们的网站下载了 PostgreSQL http www postgresql org download windows http www postgresql org download windows 但是 我无法从中创建数据库pgA
  • MySQL:更新语句中等号冒号 =: 是什么意思?

    我遇到了以下 MySQL 查询 update table set itemId itemId startDate startDate where id id 但是我无法弄清楚 是什么意思 我认为 后面的名称是一个变量 但是如何检查里面有什么
  • Maven 替换器:替换值包含美元符号

    我正在处理一个 Maven 脚本 我必须修改一些文件内容 我目前正在使用替换插件 当替换值包含美元符号时 这会给我带来麻烦 我遇到问题的替换相对简单 在我的 log4j xml 中 替换该行
  • Kubernetes PVC删除POD的内容

    我有一个正在运行的 Kubernetes POD 并且已将 PVC 附加到它 PVC 卷为 opt stackstorm 默认情况下 opt stackstorm 中有一些文件 它们是 docker 官方镜像的一部分 当没有 PVC 连接到
  • 结构体是否可以序列化[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我可以序列化一个struct直接输入 因为它是值类型 我在课堂上使用过它 但想知道它是否可以单独用于结构 e g str
  • 挂锁的 Unicode 字形

    我需要使用看起来像挂锁的 unicode 字符 它用于表单下方的一个按钮 上面写着 CopyLink 上面有一个挂锁 表明当他们复制所在页面的链接时 访问该页面的 copylink 版本的人将不会被访问 能够修改表格 无论如何 我环顾四周
  • API 来确定手机运营商? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有免费的 API 或其他方式来确定手机号码注册的运营商 我希望我的应用程序能够广播短信 而无需他们从列表中选择运营商 UPDATE 有
  • 从方法返回可选值的 std::Optional 的最佳替代方案? (使用C++98/C++11/C++14)

    明显地 std optional如果使用 C 17 或 boost 则这是从函数返回可选值的最佳选择 另请参阅GOTW 90 http herbsutter com 2013 05 30 gotw 90 solution factories
  • chrome扩展shadow DOM导入引导字体

    所以我想在从 chrome 扩展内容脚本添加的 Shadowroot 中显示 Bootstrap 3 图标 到目前为止它不起作用 有帮助吗 manifest js 确实在 web accessible resources 中包含 woff
  • 使用 Vite 将 JS 和 CSS 捆绑到单个文件中

    我正在费尽心思地弄清楚如何在我的 Svelte 项目中从 Vite 构建单个 js 文件 其中包括我的 Svelte 项目中构建的所有 javascript 和 CSS 默认情况下 Vite 将应用程序捆绑到一个 html 文件 这可以 两
  • 解决设置属性“System.Windows.Controls.Decorator.Child”在 DataTemplate 中引发异常

    我创建了以下数据模板
  • 如何使用 NuGet 包部署 T4 包含文件

    我有一些 T4 包含文件 我想在多个项目中重用它们 因此 我创建了一个 NuGet 包并将文件放置在该包的 Tools 文件夹中 现在它们安装在packages PackageName x x x Tools文件夹 我可以在项目的 T4 文
  • localStorage - 将对象追加到对象数组中

    我正在尝试将对象本地存储在对象的数组中 如果我在控制台中尝试以下操作 它会完美运行 theObject theObject theArray arrayObj One 111 theObject theArray push arrayObj
  • 如何将音频数据数组转换为 wav 文件?

    我有一个为用户记录音频注释的功能 它使用 HTML5 并带有 Flash 后备功能 我可以通过 getUserMedia 从 HTML5 版本获取音频数据 但 Flash 回退以浮点数组形式提供数据 我需要这些数据作为 wav 文件 但我不
  • 如何在单独的列中设置每个 UICollectionView 部分

    我有一个UICollectionView其中含有给定量的sections它们中的每一个都包含一定数量的rows 现在 由于我将网格布局指定为垂直 UICollectionView看起来像这样 然而 当屏幕宽度放大时 例如在横向模式或 iPa
  • 将 CSSearchableItem 添加到 Core Spotlight (MacOS) 时出现未知错误

    我最近想使用 Core Spotlight 为我的一个项目中的搜索提供支持 但是 每当我将 CSSearchableItem 添加到 SearchIndex 时 我都会在完成处理程序中收到错误 其描述如下 The operation cou
  • 使用 JavaScript 和 jQuery 的专业菜单

    我为我的 WordPress 网站设计了一个菜单 我的菜单有两个主要问题 1 当我单击图标时 将灰色显示在整个屏幕上的 back 类变为黑色 使背景变成全黑 2 第二个问题与我点击灰色区域时有关 当放在body上时带有 back 类 我成功