基于JS实现导航条flash导航条

针对“基于JS实现导航条flash导航条”的完整攻略,我给出如下详细讲解:

针对“基于JS实现导航条flash导航条”的完整攻略,我给出如下详细讲解:

介绍

flash导航条,是通过flash技术来实现网站导航栏,使导航效果更为优美且富有动感。在近年来,随着web前端技术的发展,人们开始尝试使用javascript的方式实现类似的效果。下面参加我将通过两个案例,详细解释如何通过JS实现这样一个效果。

实现思路

实现flash导航条,我们需要采用以下技术:

  1. HTML,用于实现导航栏的基本结构。

  2. CSS,用于设置导航栏的基本样式。

  3. JavaScript, 用于实现导航条的动画效果。

接下来将通过两个不同的实现方式,为大家详细介绍如何实现。

第一种实现方式:

<!DOCTYPE html>
<html>
<head>
    <title>JS导航条实现</title>
    <style>
        body {
            margin: 0;
            padding: 0;
        }
        .nav {
            height: 60px;
            background-color: #333;
            position: relative;
            z-index: 1;
        }
        .nav ul {
            margin: 0;
            padding: 0;
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100%;
            position: relative;
            z-index: 999;
        }
        .nav ul li {
            list-style: none;
            margin: 0 20px;
        }
        .nav ul a {
            color: #fff;
            font-size: 16px;
            text-decoration: none;
            text-transform: uppercase;
            position: relative;
            display: inline-block;
            padding: 0 10px;
        }
        .nav ul a::before,
        .nav ul a::after {
            content: "";
            position: absolute;
            width: 50%;
            height: 2px;
            background-color: #fff;
            bottom: -10px;
            transition: all ease 0.3s;
        }
        .nav ul a::before {
            left: 0;
        }
        .nav ul a::after {
            right: 0;
        }
        .nav ul a:hover::before,
        .nav ul a:hover::after,
        .nav ul a.active::before,
        .nav ul a.active::after {
            bottom: 0;
        }
        .flash {
            position: absolute;
            height: 100%;
            background-color: #f00;
            z-index: -1;
            left: 0;
            top: 0;
            transition: all ease 0.3s;
        }
        .nav ul a:hover ~ .flash,
        .nav ul a.active ~ .flash {
            width: 100%;
        }
    </style>
</head>
<body>
    <nav class="nav">
        <ul>
            <li><a href="#" class="active">Home</a></li>
            <li><a href="#">About Us</a></li>
            <li><a href="#">Services</a></li>
            <li><a href="#">Contact</a></li>
        </ul>
        <div class="flash"></div>
    </nav>
</body>
</html>

代码说明:

  1. 使用了CSS中的伪类选择器::before::after,通过为导航栏名称添加::before::after,实现了白色底线的效果。
  2. ::before::after使用transition CSS属性,使其从底部90度旋转到水平状态,从而实现过渡动画。

  3. 创建一个名为flash的div元素,为其设置背景色、高度、z-index和过渡动画。flashdiv元素的作用是为了显示滑块的效果。

  4. 导航栏名称通过动态设置样式,如添加active class,实现导航条跟随效果。同时,通过使用CSS中的“相邻选择器”~,使得选中导航栏名称前面的所有兄弟元素,都得到样式覆盖,而其他的不受影响。

第二种实现方式:

<!DOCTYPE html>
<html>
<head>
    <title>JS导航条实现</title>
    <style>
        body {
            margin: 0;
            padding: 0;
        }
        .nav {
            height: 60px;
            background-color: #333;
            position: relative;
            z-index: 1;
        }
        .nav ul {
            margin: 0;
            padding: 0;
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100%;
            position: relative;
            z-index: 999;
        }
        .nav ul li {
            list-style: none;
            margin: 0 20px;
        }
        .nav ul a {
            color: #fff;
            font-size: 16px;
            text-decoration: none;
            text-transform: uppercase;
            position: relative;
            display: inline-block;
            padding: 0 10px;
        }
        .flash {
            position: absolute;
            height: 100%;
            background-color: #f00;
            z-index: -1;
            left: 0;
            top: 0;
            transition: all ease 0.3s;
        }
    </style>
</head>
<body>
    <nav class="nav">
        <ul>
            <li><a href="#" class="active">Home</a></li>
            <li><a href="#">About Us</a></li>
            <li><a href="#">Services</a></li>
            <li><a href="#">Contact</a></li>
        </ul>
        <div class="flash"></div>
    </nav>
    <script>
        let flashDiv = document.querySelector('.flash');
        let navLinks = document.querySelectorAll('.nav ul li a');
        let navList = document.querySelector('.nav ul');
        let lastNavLink = navLinks[0];
        for (let i = 0; i < navLinks.length; i++) {
            navLinks[i].addEventListener('mouseover', () => {
                lastNavLink.classList.remove('active');
                lastNavLink = navLinks[i];
                navLinks[i].classList.add('active');
                let width = navLinks[i].offsetWidth;
                let marginLeft = navLinks[i].offsetLeft;
                flashDiv.style.width = `${width}px`;
                flashDiv.style.left = `${marginLeft}px`;
            })
            navLinks[i].addEventListener('mouseout', () => {
                navLinks[i].classList.remove('active');
                lastNavLink.classList.add('active');
                let width = lastNavLink.offsetWidth;
                let marginLeft = lastNavLink.offsetLeft;
                flashDiv.style.width = `${width}px`;
                flashDiv.style.left = `${marginLeft}px`;
            })
        }
    </script>
</body>
</html>

代码说明:

  1. 获取到导航栏内的所有链接,并为这些链接添加了mouseovermouseout事件。使用mouseover事件替换原先激活的active链接,并获得当前鼠标悬停链接的长度和偏移值,然后设置flash div元素的宽度和左侧偏移值,以实现滑块的效果。

  2. 当鼠标移出链接时,使用mouseout事件还原到之前激活的链接,并将滑块复位到之前链接的宽度和左侧偏移值。

通过以上两个案例,我们详细讲解了如何通过JS实现导航条flash导航条效果。当然,这样的效果也可以使用CSS3的新功能来实现。

本文标题为:基于JS实现导航条flash导航条

基础教程推荐