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

如何从JSON文件动态为slick-img-slider添加带项目描述的div元素

动态项目列表点击显示项目描述的解决方案

问题背景

我有一个以图片为主的网站,所有图片及项目列表均通过JavaScript从JSON文件动态加载生成。点击项目列表项时,想要显示对应项目的About描述字段,但因元素嵌入轮播组件,尝试添加后无法控制动态元素的显示/隐藏,没有效果。

相关代码如下:

动态生成项目列表的JS代码

function populateMenuList() {
    data.Projects.forEach(i => {
        var listElement = $(`<li class="list-item" id="project-${i.id}" data-sari="${i.data}">${i.Title}</li>`)
        listElement.on("click", () => {setProject(i)})
        $("#project-list").append(listElement);
    });
}

项目列表HTML结构

<nav class="saris nav-wrapper row horizontalList">
      <!-- PROJECT LIST FROM JSON DATA -->
<ul id="project-list" class="cursor-pointer projectList projects">
<li class="list-item" id="project-1" data-sari="1">Project_1</li>
<li class="list-item" id="project-2" data-sari="2">Project_2</li>
<li class="list-item show" id="project-3" data-sari="3">Project_3</li>
<li class="list-item" id="project-4" data-sari="4">Project_4</li>
<li class="list-item" id="project-5" data-sari="5">Other artworks</li>
</ul>
    </nav>

轮播区域HTML结构

<section class="content-wrapper">
      <div class="gallery-wrapper slideshow-container">
        <div>
          <img id="gallery" src="./assets/img/p1_img_1.jpg" alt="Gallery picture" />
        </div>
        <div>
          <img id="gallery" src="./assets/img/p2_img_1.jpg" alt="Gallery picture" />
        </div>
        <div>
          <img id="gallery" src="./assets/img/p3_img_1.jpg" alt="Gallery picture" />
        </div>
        <div>
          <img id="gallery" src="./assets/img/p4_img_1.jpg" alt="Gallery picture" />
        </div>
        <div>
          <img id="gallery" src="./assets/img/p5_img_1.jpg" alt="Gallery picture" />
        </div>
      </div>
      <div class="hidden buttonLeft" aria-label="Previous" onclick="plusSlides(-1)"></div>
      <div class="hidden buttonLeft" aria-label="Next" onclick="plusSlides(1)"></div>
    </section>

解决方案

1. 添加描述显示容器

在HTML的content-wrapper区域内新增一个专门用于展示项目描述的容器,默认设为隐藏:

<section class="content-wrapper">
  <div class="gallery-wrapper slideshow-container">...</div>
  <!-- 新增项目描述容器 -->
  <div id="project-description" class="project-description hidden"></div>
  <div class="hidden buttonLeft" aria-label="Previous" onclick="plusSlides(-1)"></div>
  <div class="hidden buttonLeft" aria-label="Next" onclick="plusSlides(1)"></div>
</section>

2. 扩展setProject函数控制描述显示

修改现有setProject函数,加入描述内容填充与显示逻辑:

function setProject(project) {
  // 保留原有轮播切换逻辑(如切换对应项目的图片组)
  
  // 填充并显示项目描述
  const descContainer = document.getElementById('project-description');
  descContainer.textContent = project.About;
  descContainer.classList.remove('hidden');
  
  // 可选:若需切换项目时隐藏其他描述,或同步轮播状态,可在此补充逻辑
}

若使用jQuery,代码可简化为:

function setProject(project) {
  // 保留原有轮播逻辑...
  
  $('#project-description').text(project.About).removeClass('hidden');
}

3. 优化动态元素事件绑定(可选)

若之前事件绑定失效,改用事件委托绑定点击事件,确保动态生成的列表项能触发逻辑:

// 替换原有的逐元素绑定,改用父容器委托
$('#project-list').on('click', '.list-item', function() {
  const projectId = $(this).attr('id').replace('project-', '');
  const project = data.Projects.find(p => p.id == projectId);
  if (project) {
    setProject(project);
  }
});

4. 样式适配(可选)

给描述容器添加样式,匹配页面风格:

.project-description {
  margin-top: 1rem;
  padding: 1rem;
  background: rgba(0,0,0,0.8);
  color: #fff;
  border-radius: 4px;
}
.hidden {
  display: none;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:10:15