链接云,应对大的权重变化






4.09/5 (6投票s)
一个链接云/标签云,能够很好地应对大的权重变化和间隙。
示例图片来自在线的YouGoDo 活动云。
引言
许多网站使用标签云来显示网站上最受欢迎的标签,并通过点击这些标签来发起搜索。云中的每个标签都被赋予一个权重;权重越大,标签就越受欢迎。然后,这个权重会转化为标签文本的字体大小;权重越大,使用的字体大小就越大。大多数人都认为,标签云是由Flickr推广开来的,它是第一个大规模采用标签云的网站。
这是一个简单但灵活的标签云控件(我将其称为链接云),它能够很好地处理权重差异很大且权重值之间存在大间隙的标签/链接。该控件可以轻松地集成到任何 ASP.NET 网站中。
背景
我想为YouGoDo 添加一个标签云的变体(使用链接而不是标签),但遇到了现有标签云实现的一些限制。
- 有些云过于“标签”化;我们想提供一个链接云而不是标签云。一些解决方案不允许标签 URL 有足够的灵活性,或者将文本限制为单个单词。
- 现有的标签云无法很好地处理权重值之间存在巨大差异的情况(用于调整标签文本大小)。我们要输入到标签云中的数据通常权重范围从几十到几千不等,权重之间存在巨大的差距。
Using the Code
要使用此控件,您需要将LinkCloud.ascx文件复制到您自己的项目中。复制完成后,打开您计划实现链接云的页面,并在顶部添加此内容:
<%@ Register TagPrefix="GavDev" TagName="LinkCloud" Src="LinkCloud.ascx" %>
这将允许您使用以下声明在页面中使用该控件:
<GavDev:LinkCloud ID="cloud" runat="server" />
链接云控件公开了许多可以调整的属性,以从您的云中获得所需的字体大小。
DominantFontSize
- 用于最常见权重值的字体大小(以像素为单位)。这可以防止大多数链接显示得太小或太大。MinFontSize
- 用于最小权重值的最小字体大小(以像素为单位)。MaxFontSize
- 用于最大权重值的最大字体大小(以像素为单位)。
要将您的链接添加到云中,您需要为每个要添加的链接调用AddLink
。AddLink
接受的参数是:
Text
- 要显示给用户的文本。Url
- 点击链接时要访问的 URL。Weight
- 链接的权重,将用于确定文本显示的字体大小。
添加完所有链接后,您需要调用DataBind
来显示云中的所有链接。
关注点
链接云面临的一个问题是,如果数据偏向较大的或较小的权重,那么大多数链接可能会显示得过大或过小。为了获得良好的视觉效果,引入了DominantFontSize
属性。所有链接都会被扫描,以确定哪个权重值最受欢迎;然后将该权重分配给DominantFontSize
。如果没有占主导地位的权重,我们就使用中间权重。这有助于在大多数云中提供良好的视觉效果,但并非 100% 有效;有时较小或较大的字体大小可能会从云中丢失,但这似乎比两端都存在极端偏好要好。
这个链接云最有趣的特点是权重如何转化为字体大小。其他现有的云控件无法很好地处理巨大的权重值差异,通常是使用YouGoDo的数据,范围从几十到几千。经过大量的反复试验,我发现一种非常朴素的方法最适合该网站。
该控件解决问题的方式是构建一个包含云中所有不同权重值的列表,以便可以使用以下过程为它们分配字体大小:
- 将最受欢迎或中间的权重设置为
DominantFontSize
值。 - 将剩余的较低范围的权重值分布在
MinFontSize
和DominantFontSize
字体大小之间。这是通过依次遍历不同的权重值列表,并将下一个较小的字体大小分配给下一个较小的权重值来实现的。 - 将剩余的较高范围的权重值分布在
DominantFontSize
和MaxFontSize
字体大小之间。这是通过依次遍历不同的权重值列表,并将下一个较大的字体大小分配给下一个较高的权重值来实现的。
例如:
weighting 100 = font size 12
weighting 99 = font size 11
weighting 10 = font size 10 (a big jump in weighting,
but an incremental jump in font size)
例如
weighting 200 = font size 14
weighting 4,050 = font size 15 (a big jump in weighting,
but an incremental jump in font size)
weighting 4,051 = font size 16
历史
- 2009 年 3 月 4 日 - 原始文章和代码。