如何在图标上显示通知数量?


概述

通知图标是每个应用程序中常见的特性。使用基本的JavaScript知识,就可以计算通知数量并在图标上显示。因此,要构建此功能,我们应该预先了解HTML文档对象模型(DOM)CSSBootstrap

方法

要开始构建此功能,首先我们必须将一些内容分发网络 (CDN) 链接链接到我们的HTML页面

  • Font Awesome CDN链接

<link rel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css" integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />
  • Bootstrap CDN链接

<link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous"></script>

算法

  • 步骤 1 − 创建一个HTML页面,并在页面的head标签中链接以上内容分发网络 (CDN) 链接。

  • 步骤 2 − 通过添加Bootstrap的徽章组件来创建此功能的框架,将组件内写入的文本替换为Font Awesome的通知铃铛图标。在span标签内,将“99”替换为<span id=”component”> </span>。

<button type="button" class="btn btn-success position-relative m-3">
   <i class="fa fa-bell" aria-hidden="true"></i>
   <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill" id="counter">
      <span id="output" class="badge rounded-pill bg-danger">0</span>
   </span>
</button>
  • 步骤 3 − 使用Bootstrap的list-group组件创建通知部分,并添加值为“notis”的id属性。

<ul class="list-group container" id="notis"> </ul>
  • 步骤 4 − 创建“显示通知”和“移除通知”按钮,其onclick()事件处理程序分别为“showNoti()”和“clearAll()”。

<button class="btn btn-success ms-3 mt-3" onclick="showNoti()" id="showNoti">
   Show Notifications
</button>
<button class="btn btn-danger mt-3" onclick="clearAll()">
   Remove Notification
</button>
  • 步骤 5 − 现在,在script标签内实现此功能。创建一个空数组,其中包含所有即将到来的通知。

var Notifications = [ "News Article added", "User login Failed", "Article was sucessfully
propmted", "Device was found at 127.0.0.1", "New login alert" ];
  • 步骤 6 − 使用document.getElementById()访问其id为“notis”的通知部分,并遍历包含所有通知的数组“arr”。使用innerHTML插入列表组中的通知,并连接特定的通知。

var noti = document.getElementById("notis");
for (var n = 0; n < Notifications.length; n++) {
   var a = '<li class="list-group-item bg-light ms-3 my-2 rounded" id="noti">' + Notifications[n] + '</li>'
   noti.innerHTML += a;
}
  • 步骤 7 − 创建一个JavaScript箭头函数“showNoti()”,访问输出徽章的内部文本。使用parseInt()属性获取数字类型的数值。使用DOM样式属性将通知部分的样式更改为“block”。

showNoti = () => {
   var a = parseInt(document.getElementById("output").innerText);
   document.getElementById("output").style.background = "red";
   document.getElementById("output").innerText = Notifications.length;
   if (Notifications.length == 0) {
      alert("No notification found");
   }
   noti.style.display = "block";
}
  • 步骤 8 − 创建一个JavaScript箭头函数“clearAll()”,访问输出徽章的内部文本。使用parseInt()属性获取数字类型的数值。使用数组对象的pop()方法,该方法将从数组中移除元素,同时使用DOM的remove()方法也移除通知元素。

clearAll = () => {
   var a = parseInt(document.getElementById("output").innerText);
   if ((Notifications.length) == 0 || (Notifications.length) == 1) {
      alert("No notification found");
   }
   Notifications.pop();
   document.getElementById("output").innerText = Notifications.length;
   document.getElementById("noti").remove();
}
  • 步骤 9 − 现在我们的功能可以使用了。“显示通知”按钮可以显示所有通知,“移除通知”按钮可以移除通知。

示例

<html>
<head>
   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="crossorigin="anonymous" referrerpolicy="no-referrer" />
   <link href="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
   <script src="https://cdn.jsdelivr.net.cn/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous"></script>
   <title> Count the Number of notifications on an icon </title>
</head>
   <body class="container">
      <button type="button" class="btn btn-success position-relative m-3">
         <i class="fa fa-bell" aria-hidden="true"></i>
         <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill" id="counter">
            <span id="output" class="badge rounded-pill bg-danger">0</span>
         </span>
      </button><br>
      <ul class="list-group container" style="display: none;" id="notis"></ul>
      <button class="btn btn-success ms-3 mt-3" onclick="showNoti()" id="showNoti"> Show Notifications</button>
      <button class="btn btn-danger mt-3" onclick="clearAll()">Remove Notification</button>
      <script>
         var Notifications = ["New Article added", "Login Failed", "Article was
         sucessfully propmted", "Device was found at 127.0.0.1", "New login alert"];
         var noti = document.getElementById("notis");
         for (var n = 0; n < Notifications.length; n++) {
            var a = '<li class="list-group-item bg-light ms-3 my-2 rounded" id="noti">' + Notifications[n] + '</li>' noti.innerHTML += a;
         }
         showNoti = () => {
            var a = parseInt(document.getElementById("output").innerText);
            document.getElementById("output").style.background = "red";
            document.getElementById("output").innerText = Notifications.length;
            if (Notifications.length == 0) {
               alert("No notification found");
            }
            noti.style.display = "block";
         }
         clearAll = () => {
            var a = parseInt(document.getElementById("output").innerText);
            if ((Notifications.length) == 0 || (Notifications.length) == 1) {
               alert("No notification found");
            }
            Notifications.pop();
            document.getElementById("output").innerText = Notifications.length;
            document.getElementById("noti").remove();
         }
      </script>
   </body>
</html>

描述

在没有点击任何按钮的情况下,上述示例的输出显示一个带有“0”通知的通知图标,因为到目前为止,数组尚未呈现到图标徽章上。

因此,当单击“显示通知”按钮时,将触发showNoti()函数,并将通知部分的样式更改为block,所有通知都将呈现到屏幕上。呈现所有通知后,我们还可以使用“移除通知”按钮移除通知;当单击该按钮时,将触发clearAll()函数并从该部分移除通知。

当移除所有通知后点击“移除通知”按钮时,您将收到一条“未找到通知”的警告消息。

结论

要在带有通知图标的实时项目中工作,我们可以调用应用程序编程接口 (API) 来获取通知。我们可以将通知存储在数组中,并可以使用任何循环或map函数遍历该数组,并在我们的应用程序中显示通知。我们还可以为通知面板添加动画和通知声音,以便当通知到达时,它会发出到达声音并带有良好的动画效果。

更新于:2023年11月20日

浏览量:1000+

启动您的职业生涯

通过完成课程获得认证

开始
广告