使用swiper制作仿今日头条菜单滑动效果的代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>仿今日头条菜单</title>
    <link rel="stylesheet" href="https://unpkg.com/swiper@9/swiper-bundle.min.css" />
    <!-- 引入Swiper的CSS样式文件,用于设置Swiper组件的样式 -->
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        /* 全局样式重置,将所有元素的外边距和内边距设为0,并采用盒模型 */

        body {
            font-family: Arial, sans-serif;
        }
        /* 设置页面主体的字体为Arial, sans-serif字体族 */

      .header {
            background-color: #f8f8f8;
            border-bottom: 1px solid #e0e0e0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 50px;
        }
        /* 设置页面头部的样式:
             - 背景色为浅灰色
             - 底部有一条浅灰色边框
             - 内部元素水平和垂直居中
             - 高度为50px */

      .swiper {
            width: auto;
            height: 100%;
            overflow: visible;
        }
        /* 设置Swiper容器的样式:
             - 宽度自适应内容
             - 高度与父元素(.header)一致
             - 溢出部分可见,防止内容被裁剪 */

      .swiper-slide {
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 0 15px;
            font-size: 15px;
            color: #333;
            cursor: pointer;
            border-bottom: 2px solid transparent;
            transition: border-bottom-color 0.3s ease;
        }
        /* 设置每个Swiper幻灯片(菜单项)的样式:
             - 内部元素水平和垂直居中
             - 左右有15px的内边距
             - 字体大小为15px,颜色为深灰色
             - 鼠标指针悬停时,底部边框变为透明
             - 边框颜色过渡动画,时长0.3s,缓动效果为ease */

      .swiper-slide:hover,
      .swiper-slide_active {
            border-bottom-color: #ff6188;
        }
        /* 当鼠标悬停在幻灯片上或者幻灯片处于激活状态时,
             底部边框颜色变为指定的亮红色 */
    </style>
</head>

<body>
    <div>
        <div class="swiper mySwiper">
            <div>
                <div>推荐</div>
                <div>热点</div>
                <div>视频</div>
                <div>科技</div>
                <div>财经</div>
                <div>体育</td>
                <div>娱乐</div>
                <div>要闻</div>
                <div>军事</div>
            </div>
        </div>
    </div>
    <script src="https://unpkg.com/swiper@9/swiper-bundle.min.js"></script>
    <!-- 引入Swiper的JavaScript库文件,用于实现滑动交互功能 -->
    <script>
        const swiper = new Swiper('.mySwiper', {
            slidesPerView: 'auto',
            // 设置每张幻灯片的可视数量为自动,即幻灯片宽度自适应内容
            freeMode: true,
            // 开启自由滑动模式,允许用户随意拖动幻灯片
            spaceBetween: 0,
            // 相邻幻灯片之间的间距设为0
            centeredSlides: false,
            // 不强制将幻灯片居中显示
            scrollbar: {
                el: '.swiper-scrollbar',
                draggable: true,
            },
            // 设置滚动条相关参数:
            // el指定滚动条元素,draggable设为true表示滚动条可拖动
            on: {
                slideChange: function () {
                    const activeSlide = this.slides[this.activeIndex];
                    const slides = this.slides;
                    for (let i = 0; i < slides.length; i++) {
                        slides[i].classList.remove('active');
                    }
                    activeSlide.classList.add('active');
                }
            }
            // 监听slideChange事件,当幻灯片切换时:
            // 先获取当前激活的幻灯片activeSlide和所有幻灯片slides
            // 移除所有幻灯片的active类,再给当前激活幻灯片添加active类
        });
    </script>
</body>

</html>

使用swiper制作仿今日头条菜单滑动效果的代码

    代码说明:

    HTML 部分:构建了一个简单的页面头部结构,在头部内放置了一个 Swiper 容器,容器内的每个菜单项都放在 swiper-slide 标签中。

    CSS 部分: 对全局元素做了盒模型重置,设置页面字体为 Arial。

    给 .header 设定了背景色、边框样式,并且居中显示内部元素。

    针对 swiper-slide,定义了文字排版、颜色,添加了鼠标悬停和激活状态下的底部边框样式。

    JavaScript 部分: 引入 Swiper 库后,初始化 Swiper 实例,参数 slidesPerView 设为 'auto' 让幻灯片宽度自适应,freeMode 开启自由滑动模式,spaceBetween 设为 0 减少间距,centeredSlides 设为 false 不强制居中显示。

    监听 slideChange 事件,当幻灯片切换时,移除所有幻灯片的 active 类,再给当前活动幻灯片添加 active 类,以此标记当前选中的菜单项。