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

如何在TimelineJS3的单条时间线条目(单张幻灯片)中添加多张图片/音频/视频?

如何在TimelineJS3的单条时间线条目(单张幻灯片)中添加多张图片/音频/视频?

别慌,我之前刚好折腾过这个需求,给你一步步捋清楚怎么改本地的TimelineJS3代码来实现:

1. 先调整你的数据源结构

TimelineJS3默认每个幻灯片(slide)只有一个media字段,咱们得给每个需要多媒体的幻灯片加一个media_collection数组,用来存所有你要加的媒体。
如果你用JSON作为数据源,修改后大概是这样:

{
  "date": {
    "start": "2024-01-01"
  },
  "text": {
    "headline": "我的多媒体幻灯片",
    "text": "这是包含多张图片、音频和视频的幻灯片"
  },
  "media_collection": [
    {
      "url": "path/to/your/image1.jpg",
      "caption": "第一张图片的说明",
      "type": "image"
    },
    {
      "url": "path/to/your/audio-file.mp3",
      "caption": "这段音频的介绍",
      "type": "audio"
    },
    {
      "url": "path/to/your/video-file.mp4",
      "caption": "视频的说明文字",
      "type": "video"
    }
  ]
}

要是你用Google Sheets做数据源,可以加一列media_collection,把每个媒体的JSON字符串填进去就行,不过本地开发的话用JSON会更直接好调试。

2. 修改TimelineJS的幻灯片模板

找到源码里的src/html/templates/slide.html(TimelineJS用Handlebars模板渲染页面),原来的代码只处理单个media对象,咱们改成循环渲染media_collection里的所有媒体:
原来的模板代码大概是这样:

{{#if media}}
<div class="media">
  {{> media media}}
</div>
{{/if}}

把它替换成下面的代码(保留原来的单媒体渲染,兼容旧的数据源):

{{#if media_collection}}
<div class="media-collection">
  {{#each media_collection}}
    <div class="media-item">
      {{> media this}}
    </div>
  {{/each}}
</div>
{{/if}}

<!-- 保留原有单媒体渲染逻辑,避免旧幻灯片出问题 -->
{{#if media}}
<div class="media">
  {{> media media}}
</div>
{{/if}}

这样模板就会自动遍历media_collection里的每一项,用TimelineJS原生的媒体组件渲染。

3. 加CSS样式让多媒体排版好看

默认的排版会把媒体堆在一起,咱们去src/css/timeline.css里加一点样式,让多个媒体能整齐排列:

.media-collection {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  margin-top: 1rem;
}
.media-item {
  flex: 1 1 300px;
  max-width: 45%;
}
.media-item img, .media-item audio, .media-item video {
  width: 100%;
  height: auto;
}

这个样式会让媒体组件弹性排列,自适应不同屏幕宽度,看起来更舒服。

4. 重新编译代码(重要!)

TimelineJS3是用构建工具把源码打包成生产可用的文件的。你在VS Code里打开终端,先跑npm install安装依赖,然后执行grunt build(如果用的是Grunt,看项目里的package.json确认构建命令),把修改后的模板和CSS编译到dist目录里,之后就用dist里的文件来运行你的时间线。

5. 临时替代方案(不想改代码的话)

要是你暂时不想动源码,也可以在幻灯片的text字段里直接写HTML插入媒体,比如:

"text": {
  "headline": "临时方案的幻灯片",
  "text": "这是用HTML插入的多媒体<br><img src='path/to/your/image.jpg' alt='图片说明'><br><audio controls src='path/to/your/audio.mp3'></audio><br><video controls src='path/to/your/video.mp4'></video>"
}

不过这个方法的缺点是,插入的媒体没有TimelineJS原生媒体组件的样式和交互,只是纯HTML元素,所以还是改源码的方法更靠谱。

备注:内容来源于stack exchange,提问作者Anthony Shuey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:29:28