返回

SVG导航下划线光标跟随效果

前端

SVG导航下划线光标跟随效果#

以前看到一篇博文,介绍导航下划线光标跟随的效果,是用的CSS的hover结合CSS3的选择器做的,总感觉效果不太自然,于是我就在想能不能用SVG来做这个效果,试了一下,还是可以的,不过要借助一点JS。先来看下一下按正常思路用JS应当怎么实现。

正常思路的实现

我的思路是这么的:

  1. 创建一个SVG元素,并将它放在导航栏的每个链接下方。
  2. 使用CSS来设置SVG元素的样式,使其在正常状态下是隐藏的。
  3. 在导航栏的每个链接上添加一个事件监听器,当鼠标悬停在链接上时,触发事件监听器。
  4. 在事件监听器中,使用JavaScript来显示SVG元素。

这种方法的优点是简单易懂,实现起来也不复杂。但是,这种方法也有一个缺点,那就是SVG元素只能在鼠标悬停在链接上时才显示出来。如果鼠标离开链接,SVG元素就会消失。这可能会让用户感到不自然。

使用SVG实现导航下划线光标跟随效果

为了解决这个问题,我们可以使用SVG来实现导航下划线光标跟随效果。SVG是一种矢量图形格式,它可以创建出各种各样的图形,包括下划线。而且,SVG元素可以被JavaScript控制,我们可以使用JavaScript来控制SVG元素的显示和隐藏。

下面是使用SVG实现导航下划线光标跟随效果的步骤:

  1. 创建一个SVG元素,并将它放在导航栏的每个链接下方。
  2. 使用CSS来设置SVG元素的样式,使其在正常状态下是隐藏的。
  3. 在导航栏的每个链接上添加一个事件监听器,当鼠标悬停在链接上时,触发事件监听器。
  4. 在事件监听器中,使用JavaScript来显示SVG元素。
  5. 在导航栏的每个链接上添加一个事件监听器,当鼠标离开链接时,触发事件监听器。
  6. 在事件监听器中,使用JavaScript来隐藏SVG元素。

这种方法的优点是,SVG元素可以在鼠标悬停在链接上时显示出来,也可以在鼠标离开链接时隐藏起来。这样,用户就不会感到不自然了。

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  
  <style>
    nav {
      display: flex;
      justify-content: center;
      align-items: center;
    }

    nav a {
      margin: 0 10px;
      text-decoration: none;
      color: #000;
    }

    nav a:hover {
      color: #f00;
    }

    svg {
      display: none;
    }

    svg.active {
      display: block;
    }
  </style>
</head>
<body>
  <nav>
    <a href="#">Home</a>
    <a href="#">About</a>
    <a href="#">Contact</a>
  </nav>

  <script>
    const navLinks = document.querySelectorAll('nav a');
    const svgs = document.querySelectorAll('svg');

    navLinks.forEach((navLink, index) => {
      navLink.addEventListener('mouseenter', () => {
        svgs[index].classList.add('active');
      });

      navLink.addEventListener('mouseleave', () => {
        svgs[index].classList.remove('active');
      });
    });
  </script>
</body>
</html>

效果展示

下图是使用SVG实现的导航下划线光标跟随效果的演示:

[图片]

总结

SVG是一种非常强大的图形格式,它可以创建出各种各样的图形,包括下划线。而且,SVG元素可以被JavaScript控制,我们可以使用JavaScript来控制SVG元素的显示和隐藏。因此,我们可以使用SVG来实现导航下划线光标跟随效果。