timeline时间线的实现方法

本文深入探讨了Facebook和人人网使用的时间线布局方法,详细解释了如何通过JavaScript代码实现按时间顺序排列不同高度的单元框,以创建直观的时间轴展示用户行为。文章还提供了时间线实现的代码示例,并简述了Facebook时间线算法的复杂性和精准性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

facebook,人人网都推出了“时间线”或叫“时间轴”,用于以时间段来查看用户的行为。

时间线呈现类似这样的效果:




 

 

每个单元框是一个li,如何按时间顺序将他们排列在时间轴的两端呢?这里注意每个单元框的高度都不一样,因为用户每个时刻做的行为是不同的。所以不能都用float:left来写,否则会是这样的效果:





 

显然左右单元框都没有错落排列,不是我们想要的效果。

解决方法:单元框分成两列,奇偶相隔,左列框一律float:left,右列框一律float:right。这在框高度不一致的情况下也出了问题,这是因为浏览器会自动去补左右的高度差,用右边的单元框去补左边的空档。



 为了避免上述情况,我们在分配左右列的时候不能平均进行,而是应该根据每个单元框的高度来:即,如果当前左列高度大于右列,那么下一个单元框应该放到右列去。
js代码如下:

 

$(function(){
	var n=$('li').length;
	var h=new Array(n,2);
	for (var i=0;i<n ;i++ )
	{
		h[i]=[$($('li')[i]).outerHeight()+30,0];
	}
	h[1][1]=1;
	var suml=0,sumr=0;
	for (i=2;i<n ;i++ )
	{
		for (var j=0;j<i ;j++ )
		{
			if (!h[j][1])
			{
				suml+=h[j][0];
			}
			else
			{
				sumr+=h[j][0];
			}
		}
		if (suml>sumr)
		{
			h[i][1]=1;
		}
		suml=0;
		sumr=0;
	}
	for (var i=1;i<n ;i++ )
	{
		if (h[i][1])
		{
			$('li')[i].className='right';
		}
	}
});

  我定义了一个二维数组h[][],用于保存所有单元框的高度和单元框属于左列还是右列(左列的话h[i][1]=0,右列h[i][1]=1)。根据单元框之前的左列右列高度来定位单元框是属于左列还是右列。最后给属于右列的li单元框加上classname=right。

 时间线是ul的背景图实现的,位置居中。单元框的箭头和对应点也是图片实现的。

 

这只是一个非常粗浅简单的时间线,展现一下facebook时间线的大致原理,facebook本身时间线的算法要更复杂更精准,有精力大家可以去研究。

 

附代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值