You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现自动图标轮播?基于Next.js与Tailwind的方案咨询

Next.js + Tailwind 实现自动无缝图标轮播

核心实现思路

参考目标页脚的轮播效果,核心是无缝横向滚动:通过复制一份图标列表,配合CSS动画让两组图标连续滚动,视觉上形成无限循环的效果。无需复杂JS逻辑,用CSS动画即可实现基础功能,再结合Tailwind工具类快速适配样式。

完整代码实现

1. 轮播组件(Next.js)

创建独立的LogoCarousel组件,包含原始图标列表和复制的列表:

import React from 'react';

const LogoCarousel = () => {
  // 替换为你的图标路径/数据
  const partnerLogos = [
    '/logos/partner-1.svg',
    '/logos/partner-2.svg',
    '/logos/partner-3.svg',
    '/logos/partner-4.svg',
    '/logos/partner-5.svg',
  ];

  return (
    <div className="overflow-hidden bg-gray-50 py-6">
      {/* 外层容器控制动画 */}
      <div className="flex animate-marquee">
        {/* 第一组图标 */}
        <div className="flex items-center space-x-8 whitespace-nowrap">
          {partnerLogos.map((logo, idx) => (
            <img
              key={`origin-${idx}`}
              src={logo}
              alt="合作品牌图标"
              className="h-10 object-contain grayscale opacity-70 hover:grayscale-0 hover:opacity-100 transition-all"
            />
          ))}
        </div>
        {/* 复制第二组,实现无缝衔接 */}
        <div className="flex items-center space-x-8 whitespace-nowrap">
          {partnerLogos.map((logo, idx) => (
            <img
              key={`clone-${idx}`}
              src={logo}
              alt="合作品牌图标"
              className="h-10 object-contain grayscale opacity-70 hover:grayscale-0 hover:opacity-100 transition-all"
            />
          ))}
        </div>
      </div>
    </div>
  );
};

export default LogoCarousel;

2. Tailwind 自定义动画配置

在tailwind.config.js中添加滚动动画的关键帧和工具类:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    './pages/**/*.{js,ts,jsx,tsx,mdx}',
    './components/**/*.{js,ts,jsx,tsx,mdx}',
    './app/**/*.{js,ts,jsx,tsx,mdx}',
  ],
  theme: {
    extend: {
      animation: {
        // 20s为滚动周期,linear保持匀速,infinite循环
        marquee: 'marquee 20s linear infinite',
      },
      keyframes: {
        marquee: {
          '0%': { transform: 'translateX(0)' },
          '100%': { transform: 'translateX(-100%)' },
        },
      },
    },
  },
  plugins: [],
};

进阶优化建议

  • 动画速度调整:修改animate-marquee中的20s,数值越小滚动越快,反之则慢
  • 悬停暂停:Tailwind v3.3+ 支持hover:animate-pause类,直接添加到动画容器即可实现鼠标悬停暂停滚动
  • 响应式适配:给间距添加响应式类,比如sm:space-x-6 md:space-x-10 lg:space-x-16,适配不同屏幕
  • 图片优化:用Next.js的next/image组件替换原生img,优化图片加载性能:
    import Image from 'next/image';
    // ...
    <Image
      key={`origin-${idx}`}
      src={logo}
      alt="合作品牌图标"
      width={80}
      height={40}
      className="grayscale opacity-70 hover:grayscale-0 hover:opacity-100 transition-all"
    />
    
  • 动态数据源:如果图标来自API,确保复制的列表和原始列表使用同一数据源,避免内容不一致

内容的提问来源于stack exchange,提问作者Remo Furrer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:36:35