用原生JS实现爱奇艺首页导航栏代码实例

yizhihongxing

下面是以原生JavaScript实现爱奇艺导航栏的完整攻略:

1. 准备工作

在HTML文件中,需要首先准备一个导航栏的容器元素,例如使用<ul>标签作为容器,并在容器中添加导航项<li>标签。如下所示:

<ul id="nav-bar">
  <li><a href="#">首页</a></li>
  <li><a href="#">电视剧</a></li>
  <li><a href="#">电影</a></li>
  <li><a href="#">综艺</a></li>
  <li><a href="#">VIP会员</a></li>
</ul>

2. 实现导航栏样式

为了让导航栏更美观,需要添加一些样式。我们可以使用CSS样式表来实现,如下所示:

#nav-bar {
  list-style: none;
  display: flex;
  justify-content: space-around;
  background-color: #FFF;
  height: 50px;
  line-height: 50px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
}

#nav-bar li {
  flex: 1;
  text-align: center;
}

#nav-bar a {
  color: #666;
  text-decoration: none;
  font-size: 14px;
  font-weight: bold;
}

3. 实现导航栏交互效果

为了让用户能够交互式使用导航栏,需要添加事件监听函数以及一些交互式效果。

3.1 点击切换样式

我们可以使用addEventListener()方法添加点击事件监听函数,在事件处理程序中添加对应的样式类名来切换样式。下面的代码实现了点击导航项后,为该项添加.active样式类,并移除其他导航项的该类。

const navBar = document.getElementById("nav-bar");
const navItems = navBar.querySelectorAll("li");

function changeStyle(event) {
  for (let i = 0; i < navItems.length; i++) {
    navItems[i].classList.remove("active");
  }
  event.target.parentNode.classList.add("active");
}

for (let i = 0; i < navItems.length; i++) {
  navItems[i].addEventListener("click", changeStyle);
}

3.2 悬浮显示菜单

我们还可以为导航项添加鼠标悬停事件监听函数,在事件处理程序中添加其他元素来实现悬浮显示菜单。下面的代码实现了鼠标悬停在导航项上时,为该项添加.show样式类,并将该项的下一个兄弟元素(即菜单)显示出来。

for (let i = 0; i < navItems.length; i++) {
  navItems[i].addEventListener("mouseover", showMenu);
  navItems[i].addEventListener("mouseout", hideMenu);
}

function showMenu(event) {
  const menuItem = event.target.nextElementSibling;
  event.target.classList.add("show");
  menuItem.style.display = "block";
}

function hideMenu(event) {
  const menuItem = event.target.nextElementSibling;
  event.target.classList.remove("show");
  menuItem.style.display = "none";
}

示例说明:

示例1

如果想要添加一个子菜单,只需要在HTML中的对应导航项<li>中添加一个包含菜单内容的容器元素。例如,添加一个电影子菜单,在HTML文件中添加如下内容:

<ul id="nav-bar">
  <li><a href="#">首页</a></li>
  <li><a href="#">电视剧</a></li>
  <li><a href="#">电影</a> <!-- 添加容器元素 -->
    <div class="sub-menu">
      <a href="#">热门电影</a>
      <a href="#">电影排行榜</a>
      <a href="#">最新上映</a>
      <a href="#">好莱坞大片</a>
    </div>
  </li>
  <li><a href="#">综艺</a></li>
  <li><a href="#">VIP会员</a></li>
</ul>

然后,将CSS样式表中的.sub-menu类名添加到样式表中,并将菜单的样式设置为绝对定位,如下所示:

#nav-bar .sub-menu {
  display: none;
  position: absolute;
  top: 50px;
  left: 0;
  width: 100%;
  background-color: #FFF;
  padding: 10px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
}

#nav-bar .sub-menu a {
  display: block;
  color: #666;
  text-decoration: none;
  font-size: 14px;
}

最后,重新运行JavaScript文件即可。此时,鼠标悬浮在电影导航项上时,会显示出电影子菜单。

示例2

如果想要为导航项添加动态数据,可以使用JavaScript来获取动态数据并添加到导航栏中。例如,在HTML文件中添加如下导航项:

<ul id="nav-bar">
  <li><a href="#">首页</a></li>
  <li><a href="#">电视剧</a></li>
  <li><a href="#">电影</a></li>
  <li><a href="#">综艺</a></li>
  <li><a href="#">VIP会员</a></li>
  <li><a href="#">更多</a></li><!-- 添加更多项 -->
</ul>

然后,在JavaScript文件中添加如下代码来获取动态数据和添加更多项导航项:

const navBar = document.getElementById("nav-bar");
const navItems = navBar.querySelectorAll("li");

// 获取动态数据
fetch("http://example.com/api/nav-items.json")
  .then(response => response.json())
  .then(data => {
    for (let item of data) {
      const navItem = document.createElement("li");
      const navLink = document.createElement("a");
      navLink.href = item.href;
      navLink.textContent = item.name;
      navItem.appendChild(navLink);
      navBar.insertBefore(navItem, navBar.lastChild);
    }
 });

上述代码从http://example.com/api/nav-items.json获取动态数据,并将每一个数据项创建成一个新的导航项,插入到更多项之前。最后,重新运行JavaScript文件即可看到添加的新导航项。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用原生JS实现爱奇艺首页导航栏代码实例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 微信小程序 如何引入外部字体库iconfont的图标

    请看以下的详细讲解: 一、前置准备工作 在进行外部字体库iconfont的图标引入之前,需要先确保以下工作已经完成: 在微信公众平台中创建小程序,并获得小程序的APPID。 在iconfont(https://www.iconfont.cn/)中选择需要引入的字体库,并下载当前字体库的包。 二、引入iconfont字体库 解压下载的字体包,将其中的iconf…

    css 2023年6月9日
    00
  • 如何解决ligerUI布局时Center中的Tab高度大小

    如何解决 LigerUI 布局时 Center 中的 Tab 高度大小? 在 LigerUI 布局中,我们通常使用模板 Center,将内容放置在中央区域,并采用 Tab 的形式对内容进行切换。然而,我们在使用 Center 和 Tab 时常常会遇到以下问题: Tab 高度大小不够; Tab 高度大小超过了父元素的高度。 接下来,我们将详细讲解这两种情况的解…

    css 2023年6月9日
    00
  • 弹出层之1:JQuery.Boxy (一) 使用介绍

    针对“弹出层之1:JQuery.Boxy (一) 使用介绍”的完整攻略,我将在以下三个部分展开: 介绍Boxy弹出层的使用 Boxy弹出层的API详解 示例说明 1. 介绍Boxy弹出层的使用 Boxy是一个使用jQuery编写的弹出层插件,可以让你方便地在你的网站中实现弹出层。使用Boxy,你可以: 在网页上显示一个弹出层; 将弹出层中的内容设置为HTML…

    css 2023年6月11日
    00
  • CSS双飞翼布局的两种方式实现示例

    CSS双飞翼布局是一种常见的Web页面布局方式,它采用了浮动和负边距等技术来实现三列布局,其中两列固定宽度,中间列自适应宽度。这种布局方式可以使页面中间列自适应宽度,更加灵活自由。 方法一 第一种实现方式是使用浮动和负边距,代码示例如下: <div class="wrapper"> <div class="ma…

    css 2023年6月10日
    00
  • 关于CSS引入方式的详细见解小结

    关于CSS引入方式的详细见解小结,我可以为你做一个完整的攻略,具体步骤如下。 1. 分类 CSS引入方式可分为三种: 内联样式 内嵌样式 外部样式表 2. 详解 2.1 内联样式 内联样式是指将CSS代码直接写在HTML标签的style属性中,在标签内使用style属性即可。 示例: <p style="color:red;"&gt…

    css 2023年6月9日
    00
  • 利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)

    下面是“利用纯CSS3实现文字向右循环闪过效果实例”的完整攻略: 一、概述 这里介绍的是一种利用纯CSS3实现文字向右循环闪过效果的方法,这种效果在移动端上可以很好地展现,同时也很常见。其实现基于CSS3的动画属性,如animation-duration、animation-delay、animation-iteration-count等。 二、实现步骤 (…

    css 2023年6月11日
    00
  • IE下background背景图片无法显示问题解决方法

    IE下background背景图片无法显示问题解决方法 问题描述 在开发网页时,经常会遇到在IE浏览器下,使用CSS样式添加的background背景图片无法显示的问题。这个问题困扰了很多开发者,本文将提供解决方法。 解决方法 1. 去掉路径中的引号 首先,应该检查CSS文件中的背景图片路径是否正确。然后,应该尝试去掉路径中的引号,具体方法如下: backg…

    css 2023年6月9日
    00
  • css中间自适应布局的5种解法详解

    在CSS中,实现中间自适应布局是一种常见的需求。以下是五种实现中间自适应布局的方法,包括两个示例说明: 1. 使用flexbox布局 使用flexbox布局是一种简单的方法,可以实现中间自适应布局。可以将左侧和右侧的元素设置为固定宽度,将中间的元素设置为flex-grow属性,以填充剩余的空间。例如: <div class="containe…

    css 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部