`
xuela_net
  • 浏览: 525418 次
文章分类
社区版块
存档分类
最新评论

纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!

 
阅读更多

前言

FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明FineUI旺盛的生命力!)。这一切的得来不是无缘无故的,而是来自于FineUI的发布理念 – Release Early! Release Often!

时至今天,FineUI总共发布了 100 多个版本

这 100 多个版本更新列表只是文本文件就有 120K 大小,放在页面上更是长的要命,如何恰当的向用户展示 FineUI 勤劳的身影就成了一个问题。之前的展示页面只是简单的将所有的更新记录放在一个 PRE 标签中,显得有点死气沉沉,如下图所示。

image

 

站在巨人的肩膀上

由于前段时间时间轴形式的展示方式比较火,就考虑采用这种方式。但是查阅了网上的jQuery timeline plugin,大部分都比较臃肿,还需要创建Google Spreadsheet Template,并且通过JavaScript调整时间轴中每个记录的位置,也不适合软件更新记录这样大数据集的展现。

其实我需要的只是一个简单、漂亮的数据展示方式,很快我找到了这个例子:http://tympanus.net/Blueprints/VerticalTimeline/

image

这个界面风格给人眼前一亮的感觉。在快速浏览之后,我发现这里面用到了内嵌字体和CSS3的诸多知识来生成哪些漂亮的图片,所以在IE7、IE8下浏览会乱作一团,如下图所示:

image

 

没关系,我们就用简单的图片来代替,其实我最想要的就是左侧的那个垂直直线和那个圆粑粑,网页截图,然后用PhotoShop做简单的处理,得到如下三张图片。

1. 垂直线(10*7)

version_line

2. 浅色的圆粑粑(56*56)

version_dot_alt

3. 深色的圆粑粑(56*56)

version_dot

两个不同颜色的圆粑粑是为了让列表看起来更灵动一点。

 

俺的PhotoShop功底不咋地,你会发现那两个圆粑粑不是透明背景,而是白色背景的,没关系,只要我们使用精确的CSS定位,看不出破绽的,^_^

 

最终我们希望实现的效果如下图所示。

image

其中圆粑粑中的数字表示软件的第几个版本,是不是看着比原来的好多了。

 

下面我们就动手实现,纯手工哦,用到的开发工具只有Notepad++(My favorite!)。

 

最简单的HTML结构

HTML结构一定要保持简单,其实就是一个列表嘛,那就用 UL 标签实现。

   1:  <ul class="timeline">
   2:      <li>
   3:          <div class="time">时间</div>
   4:          <div class="version">版本号</div>
   5:          <div class="number">第几个版本</div>
   6:          <div class="content">
   7:              <pre>
   8:                  更新记录
   9:              </pre>
  10:          </div>
  11:      </li>
  12:  <ul>

 

初步的设想是content左边留白,time/version/number全部浮动起来,这样方便定位。

特别是number的定位要准确,否则圆粑粑和背景垂直线就重合不到一起了。这就要看CSS的了。

 

最简单的CSS

我们主要来看看如何对number的定位,完整的代码在文章最后会给出。

   1:  ul.timeline {
   2:      list-style-type: none;
   3:      background: url("../res/img/version_line.png") repeat-y scroll 120px 0 transparent;
   4:      margin: 50px 0;
   5:      padding: 0;
   6:  }
   7:  ul.timeline li {
   8:      position: relative;
   9:      margin-bottom: 20px;
  10:  }
  11:   
  12:  ul.timeline li .number {
  13:      position: absolute;
  14:      background: url("../res/img/version_dot.png") no-repeat scroll 0 0 transparent;
  15:      width: 56px;
  16:      height: 56px;
  17:      left: 97px;
  18:      line-height: 56px;
  19:      text-align: center;
  20:      color: #fff;
  21:      font-size: 18px;
  22:  }

 

首先,将垂直蓝色的背景线放在最外层的 UL 标签上,距离左侧 120px;

其次,设置 LI 为相对定位,为 LI 中元素的绝对定位做铺垫;

最后,将number浮动起来,主要是number的left属性一定要精确!

 

如何计算 number 的 left 属性那,大家看看如下的公式是否合你口味:

number.left = line.left + line.width/2 – number.width/2

                      = 120 + 10/2 – 56/2

                      =  97

 

最简单的JQUERY

剩下就是jQuery的任务了,我们需要使用jQuery完成如下两点任务:

1. 动态计算 number 的数字;

2. 为间隔行的 LI 节点添加 alt 类。

   1:  $(function() {
   2:              
   3:      var liNodes = $('ul.timeline li'), count = liNodes.length, i, liNode;
   4:      for(i=0; i<count; i++) {
   5:          liNode = $(liNodes.get(i));
   6:          if(i % 2 !== 0) {
   7:              liNode.addClass('alt');
   8:          }
   9:          liNode.find('.number').text(count - i);
  10:      }
  11:   
  12:  });

 

 

最简单的数据迁移(正则表达式替换)

还有一项重要的任务,如何把 100 多条数据迁移到新的 HTML 结构中去,没人愿意手工去做,没关系我们有好帮手 Notepad++。

image

查找目标:\+(\d{4}-\d{2}-\d{2})\s+(v\d+.*)$

替换为:</pre></div></li>\r\n<li><div class="time">$1</div><div class="version">$2</div><div class="number"></div><div class="content"><pre>

 

查找目标用来匹配类似“+2013-07-29 v3.3.1”的字符串,一次搞定,是不是很舒服。

 

完成效果

image

列表实在是太长,这里只是 5% 不到的截图!

 

优化!将页面大小由150K减少为20K

本来文章就此结束了,可是吃完饭我就不满意了,还有改进的余地!

1. 一次展示 100 多个记录,用户也看不完,反而影响显示效果,长长长长长长长长长的滚动条;

2. 用户关心的可能只是最近的几次更新记录,如果需要看更多的,提供一种方法即可!

 

基于以上考虑,我们可以将 100 多个记录分成 20 个记录一个文本文件保存起来,需要的时候通过 AJAX 获取就行了。

页面首次加载只需要前 10 条左右的记录即可,在列表的最后添加一个大大的按钮,如下图所示。

image

 

最终的目录结构如下所示。

image

 

来体验一下最终的效果吧:

http://fineui.com/version

 

 

全部源代码

   1:  <style>
   2:      ul.timeline {
   3:          list-style-type: none;
   4:          background: url("../res/img/version_line.png") repeat-y scroll 120px 0 transparent;
   5:          margin: 50px 0;
   6:          padding: 0;
   7:      }
   8:   
   9:      ul.timeline li {
  10:          position: relative;
  11:          margin-bottom: 20px;
  12:      }
  13:      ul.timeline li .time {
  14:          position: absolute;
  15:          width: 90px;
  16:          text-align: right;
  17:          left: 0;
  18:          top: 10px;
  19:          color: #999;
  20:      }
  21:      ul.timeline li .version {
  22:          position: absolute;
  23:          width: 290px;
  24:          text-align: right;
  25:          left: -200px;
  26:          top: 30px;
  27:          font-size: 40px;
  28:          line-height: 50px;
  29:          color: #3594cb;
  30:          overflow: hidden;
  31:      }
  32:      ul.timeline li .number {
  33:          position: absolute;
  34:          background: url("../res/img/version_dot.png") no-repeat scroll 0 0 transparent;
  35:          width: 56px;
  36:          height: 56px;
  37:          left: 97px;
  38:          line-height: 56px;
  39:          text-align: center;
  40:          color: #fff;
  41:          font-size: 18px;
  42:      }
  43:      ul.timeline li.alt .number {
  44:          background-image: url("../res/img/version_dot_alt.png");
  45:      }
  46:      ul.timeline li .content {
  47:          margin-left: 180px;
  48:          
  49:      }
  50:      ul.timeline li .content pre {
  51:          background-color: #3594cb;
  52:          padding: 20px;
  53:          color: #fff;
  54:          font-size: 13px;
  55:          line-height: 20px;
  56:      }
  57:      ul.timeline li.alt .content pre {
  58:          background-color: #43B1F1;
  59:      }
  60:  </style>
  61:  <ul class="timeline">
  62:      <li>
  63:          <div class="time">2013-07-29</div>
  64:          <div class="version">v3.3.1</div>
  65:          <div class="number"></div>
  66:          <div class="content">
  67:              <pre>
  68:              -将工具YUICompressor替换为Microsoft Ajax Minifier(需要指定-evals:immediate)。
  69:              ...        
  70:              </pre>
  71:          </div>
  72:      </li>
  73:      ...
  74:  </ul>
  75:  <script>
  76:      $(function() {
  77:      
  78:          var nextDataNumber = 5;
  79:          
  80:          var ulNode = $('ul.timeline');
  81:          
  82:          function initLiNodes() {
  83:              var liNodes = ulNode.find('li'), count = liNodes.length, i, liNode, leftCount = nextDataNumber * 20;
  84:              for(i=0; i<count; i++) {
  85:                  liNode = $(liNodes.get(i));
  86:                  if(i % 2 !== 0) {
  87:                      liNode.addClass('alt');
  88:                  } else {
  89:                      liNode.removeClass('alt');
  90:                  }
  91:                  liNode.find('.number').text(leftCount + count - i);
  92:              }
  93:          }
  94:          
  95:          
  96:          $('#fetchNextData').click(function() {
  97:              var $this = $(this);
  98:              $this.addClass('disabled').text('......');
  99:              
 100:              $.get('./version_data_' + nextDataNumber +'.txt', function(data) {
 101:                  ulNode.append(data);
 102:                  $this.removeClass('disabled').text('后二十条数据');
 103:                  nextDataNumber--;
 104:                  
 105:                  if(nextDataNumber === 0) {
 106:                      $this.hide();
 107:                  }
 108:                  
 109:                  initLiNodes();
 110:              });
 111:              
 112:          });
 113:      
 114:          initLiNodes();
 115:          
 116:      });
 117:  </script>

 

小结

如何向用户有效的展示 100 多条更新记录,是个技术活。需要我们认真思考,学以致用,用最简单的HTML、CSS、JQUERY来实现最好的用户体验。

 

 

1
2
分享到:
评论
1 楼 dt07202004 2013-08-02  
条理清晰,简单实用,学习了

相关推荐

    jQuery+CSS3+html5水平时间轴插件

    "jQuery+CSS3+html5水平时间轴插件"就是一个这样的工具,它结合了三种强大的技术,即jQuery、CSS3和HTML5,来打造一个直观且动态的时间轴布局。这个插件特别适合用于展示项目历程、历史事件或者任何需要按照时间顺序...

    HTML5+CSS3实现的响应式垂直时间轴效果源码

    在这个“HTML5+CSS3实现的响应式垂直时间轴效果源码”中,我们主要关注如何利用这两者来构建一个适应不同设备屏幕尺寸的动态时间轴。 首先,HTML5引入了许多新元素,比如`&lt;article&gt;`、`&lt;section&gt;`、`&lt;time&gt;`等,...

    带CSS3动画响应式jQuery垂直时间轴特效代码.zip

    该资源是一个基于jQuery和CSS3的响应式时间轴特效代码,旨在创建一个具有动画效果的垂直时间线,用于展示项目进程或企业发展历史。这个特效在各种设备上都能自适应,包括手机和平板等移动端。 首先,`index.html`是...

    css3垂直时间轴

    【CSS3垂直时间轴详解】 在网页设计中,时间轴是一种有效的展示信息的方式,它能够清晰地呈现事件的顺序和时间关系。CSS3的引入,为创建动态、交互性强的时间轴效果提供了更多可能性,尤其是垂直时间轴,可以适应...

    HTML时光轴(版本二)Javascript + css3.0,基于HTML5实现时光轴时间轴功能

    HTML时光轴(版本二)Javascript + css3.0,基于HTML5实现时光轴时间轴功能HTML时光轴(版本二)Javascript + css3.0,基于HTML5实现时光轴时间轴功能HTML时光轴(版本二)Javascript + css3.0,基于HTML5实现时光轴...

    jQuery css3的简单的纵向时间轴代码.zip

    一款非常简单的jQuery纵向时间轴代码,无论li内容多少,直线都不会超出,并且红点永远居中的jQuery垂直时间轴插件。 js代码 [removed] $(document).ready(function(e) { var h = $(".about4_main ul li:first-...

    jQuery简单动态的响应式垂直时间轴代码

    本文将深入探讨如何使用jQuery实现一个简单动态的响应式垂直时间轴。 首先,我们需要理解响应式设计的基本概念。响应式设计是指网站布局能够根据用户设备的屏幕尺寸和方向自动调整,确保在不同设备上都能提供良好的...

    CSS+Html垂直时间轴

    本主题聚焦于“CSS+Html垂直时间轴”的实现,这是一种展示序列事件或历史进程的有效方式,尤其适用于博客、项目展示或者个人简历等场景。下面将详细介绍如何使用CSS和HTML来创建一个美观且实用的垂直时间轴。 首先...

    HTML5+CSS3响应式垂直时间轴

    在这个“HTML5+CSS3响应式垂直时间轴”项目中,开发者利用了HTML5的新特性以及CSS3的高级布局和动画效果,创建了一个无需JavaScript的动态时间轴,这在实现交互性的同时,也保证了页面加载速度和性能。 HTML5引入了...

    jQuery css3垂直时间轴展开动画特效

    "jQuery css3垂直时间轴展开动画特效"就是一个典型的案例,它结合了JavaScript库jQuery与CSS3技术,为网站内容展示提供了创新且引人入胜的方式。这个特效通常用于展示项目历程、历史事件或新闻更新等,以一种视觉上...

    jQuery css3垂直时间轴展开动画特效.zip

    《jQuery与CSS3结合实现垂直时间轴展开动画特效详解》 在现代网页设计中,动态效果的运用可以极大地提升用户体验,使得信息展示更加生动有趣。本文将深入探讨如何利用jQuery库与CSS3技术,实现一个垂直时间轴的展开...

    时间轴控件下载,html+css

    时间轴控件在网页设计中是一种非常实用的元素,它能清晰地展示一系列按照时间顺序发生的事件或进程,常用于项目进度、历史回顾、新闻更新等场景。在本压缩包中,我们有一个名为"VerticalTimeline"的文件,这显然是一...

    jQuery垂直时间轴特效

    在这个特定的“jQuery垂直时间轴特效”中,我们将探讨如何利用jQuery来创建一个动态的、视觉吸引人的垂直时间轴,用于展示一系列事件或进程。 时间轴在各种网页设计中都十分常见,例如历史回顾、项目进度展示或者...

    带CSS3动画响应式jQuery垂直时间轴特效代码

    综合以上,这个特效结合了jQuery的交互性和CSS3的动画效果,创造出一个既实用又美观的垂直时间轴。对于开发者来说,理解并运用这样的代码可以提升网站的专业性和吸引力,同时也能提高网页的用户体验。在实际项目中,...

    html+css+js 时间轴制作

    "html+css+js 时间轴制作"的主题涵盖了使用HTML、CSS和JavaScript这三种核心技术来创建动态的时间轴。下面我们将深入探讨这些技术在构建时间轴时的具体应用。 首先,HTML(HyperText Markup Language)是网页内容的...

    带动画特效的响应式jQuery垂直时间轴插件

    在给定的标题“带动画特效的响应式jQuery垂直时间轴插件”中,我们可以深入探讨以下几个关键知识点: 1. **响应式设计**:响应式布局是一种网页设计方法,通过灵活的布局和媒体查询来适应不同尺寸的屏幕。它确保了...

    jQuery+CSS3+html5水平时间轴插件.zip

    这个压缩包"jQuery+CSS3+html5水平时间轴插件.zip"包含了创建一个交互式水平时间轴的资源,这种时间轴常用于展示项目历程、历史事件或进度更新等。让我们详细探讨一下这个插件的关键组件和实现原理。 **jQuery** ...

    jquery垂直时间轴

    为了使用这个jQuery垂直时间轴,你需要将`index.html`中的相关代码段复制到你的项目中,并确保正确引入jQuery库、CSS样式表和JavaScript脚本。然后,根据你的需求调整CSS和JavaScript以定制颜色、图标和其他视觉元素...

    HTML5+CSS3实现的响应式垂直时间轴

    在这个“HTML5+CSS3实现的响应式垂直时间轴”项目中,我们将探讨如何利用这两者来构建一个适应不同设备屏幕尺寸的动态时间线。 HTML5引入了许多新的元素和API,使得网页结构更加清晰,同时也更有利于SEO优化。在...

    jQuery垂直时间轴插件

    **jQuery垂直时间轴插件**是一种利用jQuery JavaScript库和CSS3技术实现的动态展示时间序列事件的工具。这种插件通常用于网站上展示历史事件、项目进度或新闻更新,为用户呈现一种直观且吸引人的交互体验。 ### ...

Global site tag (gtag.js) - Google Analytics