博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录......
阅读量:6149 次
发布时间:2019-06-21

本文共 3605 字,大约阅读时间需要 12 分钟。

hot3.png

前言

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

时至今天,FineUI总共发布了 !

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

 

站在巨人的肩膀上

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

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

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

 

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

1. 垂直线(10*7)

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

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

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

 

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

 

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

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

 

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

 

最简单的HTML结构

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

1: 
    2:
  • 3:
    时间
    4:
    版本号
    5:
    第几个版本
    6:
    7:
     8:  更新记录 9:  
    10:
    11:
  • 12:

    初步的设想是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

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

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

    查找目标:\+(\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”的字符串,一次搞定,是不是很舒服。

     

    完成效果

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

     

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

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

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

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

     

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

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

     

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

     

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

     

     

    全部源代码

    1:  61: 
      62:
    • 63:
      2013-07-29
      64:
      v3.3.1
      65:
      66:
      67:
       68:  -将工具YUICompressor替换为Microsoft Ajax Minifier(需要指定-evals:immediate)。 69:  ... 70:  
      71:
      72:
    • 73: ... 74:
    75:

    小结

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

    后记 

    网友  提到是否可以在滚动条到达底部时自动加载后20条数据,这个也很容易实现,更新后的JavaScript代码如下所示。

    $(function() {			var nextDataNumber = 5;	var ajaxLoading = false;	var docNode = $(document);		var ulNode = $('ul.timeline');		function initLiNodes() {		var liNodes = ulNode.find('li'), count = liNodes.length, i, liNode, leftCount = nextDataNumber * 20;		for(i=0; i

    接着阅读姊妹篇《》

    转载于:https://my.oschina.net/iamsanshi/blog/149014

    你可能感兴趣的文章
    清理prometheus指定key的数据
    查看>>
    html: Table合并行和列
    查看>>
    WP7开发学习笔记----1
    查看>>
    分布式文件系统FastDFS 集群安装
    查看>>
    怎么知道自己系统是32位,还是64位?
    查看>>
    前端,移动开发者,UI须懂: 不同设备的之间的尺寸
    查看>>
    让我们一起Go(四)
    查看>>
    信息防泄露:如何为企业数据设一道安全关卡?
    查看>>
    LVS+keepalived
    查看>>
    移动互联网金融的全方位服务时代已经到来
    查看>>
    rsync杂谈
    查看>>
    利用 Siblings一步实现多个同级div,只改变当前点击的div样式
    查看>>
    外国人又玩出新花样,仅需几行CSS代码就能让iPhone重启、Mac卡顿
    查看>>
    笔记 OSPF多区域配置 STUB区域 路由重分发 NSSA区域配置
    查看>>
    Linux 创建用户
    查看>>
    Confluence 6 SQL Server 数据库驱动修改
    查看>>
    Cobbler自动化安装(linux)服务器
    查看>>
    初识docker之如何运行一个容器
    查看>>
    局域网大型文件分发的可能解决方案
    查看>>
    P2P技术做自有点播系统的加速,还需要和CDN一样部署很多服务器吗?
    查看>>