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

如何使用Tiny Slider JS动态遍历数据渲染轮播幻灯片

问题根源

你的代码存在两个核心错误,导致所有内容被堆到同一张幻灯片:

  • HTML中只预置了1组幻灯片结构,.my-slider容器下只有1个一级子元素,Tiny Slider默认会将容器的直接子元素识别为独立幻灯片,因此插件只会生成1张幻灯片。
  • JS逻辑直接将map()返回的全量名称、描述数组插入到同一个固定id的元素中,相当于把所有项目的文本全部堆到同一个h3、p标签内,没有为每个项目生成独立的幻灯片DOM。

实际错误运行效果:
所有内容挤在同一张幻灯片的效果

修复步骤

1. 简化HTML结构

删除写死的单张幻灯片静态代码,只保留轮播根容器即可,所有幻灯片内容通过JS动态生成:

<div id="sliderCont" class="my-slider">
  <!-- 动态生成的幻灯片将插入到这里 -->
</div>

2. 重写JS渲染逻辑

先遍历项目数组为每个项目生成独立的幻灯片DOM,全部插入容器后再初始化Tiny Slider(插件必须等DOM渲染完成后初始化才能识别所有幻灯片):

const projects = [
  {
    image: "src/images/img-1.jpg",
    name: "Project 1",
    description: "Project Description here.",
  },
  {
    image: "src/images/img-2.jpg",
    name: "Project 2",
    description: "Project Description here. 2",
  },
  {
    image: "src/images/img-3.jpg",
    name: "Project 3",
    description: "Project Description here. 3",
  },
  {
    image: "src/images/img-4.jpg",
    name: "Project 4",
    description: "Project Description here. 4",
  },
];

const sliderContainer = document.querySelector(".my-slider");

// 为每个项目生成独立幻灯片
projects.forEach((proj) => {
  const slideItem = document.createElement("div");
  slideItem.innerHTML = `
    <div class="slide">
      <div class="slide-img" style="background-image: url('${proj.image}')">
        <a href="#">View More</a>
      </div>
      <br>
      <div class="slide-info">
        <h3 class="project-name">${proj.name}</h3>
        <p class="project-description subtext">${proj.description}</p>
      </div>
    </div>
  `;
  sliderContainer.appendChild(slideItem);
});

// DOM渲染完成后初始化轮播
let slider = tns({
  container: ".my-slider",
  slideBy: 1,
  speed: 200,
  nav: false,
  controlsContainer: "#controls",
  prevButton: ".previous",
  nextButton: ".next",
  preventScrollOnTouch: "auto",
  autoplay: true,
  autoplayButtonOutput: false,
  responsive: {
    1600: {
      items: 4,
      gutter: 20,
    },
    1024: {
      items: 3,
      gutter: 20,
    },
    768: {
      items: 2,
      gutter: 20,
    },
    480: {
      items: 1,
    },
  },
});
关键注意事项
  • 动态生成重复元素时不要使用id做选择器,id在页面中必须唯一,重复id会导致DOM选择异常,统一使用class即可。
  • Tiny Slider的识别规则是:配置项container指向的元素下,所有直接子元素会被当作独立幻灯片,生成DOM时不要把幻灯片嵌套多层放在容器下,否则插件无法识别。
  • 所有依赖DOM结构的前端插件,必须等待动态生成的DOM全部插入页面后再执行初始化,否则插件无法读取到动态新增的节点。

内容的提问来源于stack exchange,提问作者John Paulo A. Geronimo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:54:25