Day 23:使用 TimelineJS 构建精美的时间轴

简介: 确定今天的主题费了我不少工夫,我开始打算学习brain,后来又去看了看Twitter Server,但是我最后决定学习TimelineJS。本文将介绍如何使用TimelineJS为一系列文章创建一个精美的时间轴。

编者注:我们发现了有趣的系列文章《30天学习30种新技术》,正在翻译,一天一篇更新,年终礼包。下面是第23天的内容。


确定今天的主题费了我不少工夫,我开始打算学习brain,后来又去看了看Twitter Server,但是我最后决定学习TimelineJS。本文将介绍如何使用TimelineJS为一系列文章创建一个精美的时间轴。

image.png

TimelineJS是什么?

TimelineJS 是一个开源库,可以帮助你创建精美、可交互的时间轴。它可以使用Google试算表或基于JSON的REST后端作为数据来源。它可以处理不同种类的内容,从多个来源获取媒体文件,包括:

  1. Twitter
  2. Google Plus
  3. Flickr
  4. Youtube , Vimeo , DailyMotion
  5. Google Maps


TimelineJS Demo

我今天构建的示例程序以时间轴的形式展示我的《30天学习30种新技术》系列文章。它部署在OpenShift上,你可以在此访问。

用户访问应用的/时,将看到包括所有已发表文章的时间轴。这背后通过REST(/api/v1/stories)获取文章信息。

image.png

GitHub仓库

今天的示例应用代码可以从GitHub获取。

两分钟内运行

这里假设你已经安装了OpenShift客户端工具。请参阅OpenShift文档获取安装信息

我们将开始创建名为day23demo的示例应用。

rhccreate-appday23demotomcat-7mongodb-2--from-code=https://github.com/shekhargulati/day23-timelinejs-demo.git

这会为我们创建一个应用容器——gear,然后设置公开的DNS,创建私有git仓库,最后利用你的Github仓库中的代码来部署应用。应用可以通过http://day23demo-{domain-name}.rhcloud.com/访问。用你自己的OpenShift域名替换{domain-name} (域名有时也被称为命名空间)。

应用部署完成后,你可以使用curl来创建新文章:

curl -i -X POST -H "Content-Type: application/json" -d '{"url":"https://www.openshift.com/blogs/day-21-docker-the-missing-tutorial","startDate":"2013,11,18"}' http://day23demo-{domain-name}.rhcloud.com/api/v1/stories


背后的秘密

这个应用包括两部分——使用Spring框架构建的后端和用TimelineJS、jQuery构建的前端。在我昨天的文章中,我详细介绍了如何使用Spring框架和MongoDB来构建一个REST后端。更多信息请参考day 22


TimelineJS使用的JSON格式如下:

{

   "timeline":{

       "headline":"30 Technologies in 30 Days -- By Shekhar Gulati",

       "type":"default",

       "text":"Learn 30 Technologies in 30 Days","startDate":"2013,10,29",

       "date":[

           {

               "id":"528cb57de4b015e760ed06be",

               "url":"https://www.openshift.com/blogs/day-1-bower-manage-your-client-side-dependencies",

               "headline":"Day 1: Bower--Manage Your Client Side Dependencies",

               "text":"<p>...</p>",

               "startDate":"2013,10,29",

               "asset":{

                   "media":"https://www.openshift.com/sites/default/files/bower-                        logo.png"

               }

           },

           {

               "id":"528cb5bee4b015e760ed06bf",

               "url":"https://www.openshift.com/blogs/day-2-angularjs-getting-my-head-around-angularjs",

               "headline":"Day 2: AngularJS--Getting My Head Around AngularJS",

               "text":"...",

               "startDate":"2013,10,30",

               "asset":

                   {

                       "media":"https://www.openshift.com/sites/default/files/angularjs-from-30k-feet.png"

                   }

               }

           ]

   }

}

idurl是可选的。

index.html指明应用的用户接口。我们使用jQuery发起GET请求。GET请求获取的信息交给TimelineJS在id为timeline的div中渲染。createStoryJS函数初始化新的时间轴。

<!DOCTYPE html>

<htmllang="en">

 <head>

   <title>30 Technology in 30 Days Timeline</title>

   <metacharset="utf-8">

   <metaname="description"content="30 Technology in 30 Days Timeline">

   <metaname="apple-mobile-web-app-capable"content="yes">

   <metaname="apple-touch-fullscreen"content="yes">

   <metaname="viewport"content="width=device-width, initial-scale=1.0, maximum-scale=1.0">

   <!-- Style-->

   <style>

     html, body {

      height:100%;

      padding: 0px;

      margin: 0px;

     }

   </style>

   <!-- HTML5 shim, for IE6-8 support of HTML elements--><!--[if lt IE 9]>

   <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

   <scripttype="text/javascript"src="lib/jquery-min.js"></script>

   <scripttype="text/javascript"src="js/storyjs-embed.js"></script>

   <script>

     $(document).ready(function() {

       $.get('/api/v1/stories',function(result){

           createStoryJS({

               type:   'timeline',

               width:    '100%',

               height:   '600',

               source:   result,

               embed_id: 'timeline',

               debug:    true

           });

       });

     });    

   </script>

 </head>

 <body>

     <divid="timeline"></div>

       </body>

</html>

这是今天的内容。要继续反馈哦~

相关文章
|
网络协议 Windows
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
这篇文章提供了解决IDEA插件下载慢或超时问题的方案,通过查找国内插件节点IP地址并修改本地hosts文件来加速下载。
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
|
移动开发 JavaScript 前端开发
分享46个JS时间轴特效,总有一款适合您
分享46个JS时间轴特效,总有一款适合您
442 2
|
11月前
|
JSON JavaScript 数据格式
jqtimeline.js-简单又好用的jquery时间轴插件
jqtimeline.js-简单又好用的jquery时间轴插件
Vue2时间轴(横向)
该横向时间轴组件 `HorizonTimeLine` 可自定义时间轴数据 (`timelineData`) 和初始选中年份 (`activeYear`)。通过点击不同的年份,可以改变当前激活的年份,并有相应的视觉反馈。该组件支持均匀自适应排列,且易于在其他页面中引入和使用。
1298 0
Vue2时间轴(横向)
|
11月前
|
人工智能 测试技术 API
Ollama本地模型部署+API接口调试超详细指南
本文介绍了如何使用Ollama工具下载并部署AI大模型(如DeepSeek-R1、Llama 3.2等)。首先,访问Ollama的官方GitHub页面下载适合系统的版本并安装。接着,在终端输入`ollama`命令验证安装是否成功。然后,通过命令如`ollama run Llama3.2`下载所需的AI模型。下载完成后,可以在控制台与AI模型进行对话,或通过快捷键`control+d`结束会话。为了更方便地与AI互动,可以安装GUI或Web界面。此外,Ollama还提供了API接口,默认支持API调用,用户可以通过Apifox等工具调试这些API。
|
机器学习/深度学习 PyTorch API
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
Transformer架构自2017年被Vaswani等人提出以来,凭借其核心的注意力机制,已成为AI领域的重大突破。该机制允许模型根据任务需求灵活聚焦于输入的不同部分,极大地增强了对复杂语言和结构的理解能力。起初主要应用于自然语言处理,Transformer迅速扩展至语音识别、计算机视觉等多领域,展现出强大的跨学科应用潜力。然而,随着模型规模的增长,注意力层的高计算复杂度成为发展瓶颈。为此,本文探讨了在PyTorch生态系统中优化注意力层的各种技术,
818 6
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
Vue3时间轴(Timeline)
这是一个基于 Vue2 的时间轴(Timeline)组件,支持多种自定义属性,包括时间轴内容数组 `timelineData`、总宽度 `width`、线条样式 `lineStyle`、模式 `mode` 和位置 `position`。时间轴内容数组包含描述 `desc` 和圆圈颜色 `color`。组件提供了丰富的样式选项,如虚线、居中显示等,并支持内容交替展现。适用于多种场景下的时间轴展示需求。
1524 1
Vue3时间轴(Timeline)
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型:智能海洋监测与保护
使用Python实现深度学习模型:智能海洋监测与保护
386 1