Blogbus Hack 3 : Enhanced Tag Clouds

OK,在远离了hack很久之后,这次总算带来了新的hack,其实也不算全新,而是对旧有的Tag Clouds Hack进行了改造,加入了渐变颜色功能,此效果已应用到本站。

ETC

如图所示,新的Tag Clouds不仅能根据使用频率显示不同字号,还对tag clouds进行了颜色渐变处理,代码如下:

ETC={
	tagID: 'tags',  	// Tag模块栏ID号,无须更改
	maxWeight: 1.8, 	// 设置最大字号 (em unit)
	minWeight: 1, 		// 设置最小字号 (em unit)
	color: true, 		// 是否采用渐变效果
	maxColor: '2A526F',	// 设置渐变最深颜色,暂时不支持类'FFF'简写方式,无须输入'#'号
	minColor: '54A4DE',	// 设置渐变最浅颜色

	init:function() {
		if (!document.getElementById || !document.getElementsByTagName) return;
		if (!document.getElementById(ETC.tagID)) return;
		
		var taglist = document.getElementById(ETC.tagID);
		var tag = taglist.getElementsByTagName('li');
		var totalCount = tag.length - 1;
		var maxCount = parseInt(tag[0].getElementsByTagName('span')[0].firstChild.nodeValue.substring(1));
		var minCount = parseInt(tag[tag.length - 1].getElementsByTagName('span')[0].firstChild.nodeValue.substring(1));
		var offset = (ETC.maxWeight - ETC.minWeight) / (maxCount - minCount);

		if (ETC.color != true || ETC.maxColor == null || ETC.minColor == null || ETC.maxColor == ETC.minColor) {
			for (var i=0; i <= totalCount; i++) {
			var count = parseInt(tag[i].getElementsByTagName('span')[0].firstChild.nodeValue.substring(1));
			var weight = (count - minCount) * offset + ETC.minWeight;

			tag[i].getElementsByTagName('a')[0].style.fontSize = weight + 'em';
			}
		}
		else {
			for (var i=0; i <= totalCount; i++) {
			var count = parseInt(tag[i].getElementsByTagName('span')[0].firstChild.nodeValue.substring(1));
			var weight = (count - minCount) * offset + ETC.minWeight;

			tag[i].getElementsByTagName('a')[0].style.fontSize = weight + 'em';
			tag[i].getElementsByTagName('a')[0].style.color = ETC.getColorByScale(i, totalCount);
			}
		}	
	},

	hex2dec:function(hex) {
		return parseInt(hex,16);
	},

	dec2hex:function(dec) {
		return dec.toString(16);
	},	

	getColorByScale:function(i, totalCount) {

		var minr = ETC.hex2dec(ETC.minColor.substr(0, 2));
		var ming = ETC.hex2dec(ETC.minColor.substr(2, 2));
		var minb = ETC.hex2dec(ETC.minColor.substr(4, 2));

		var maxr = ETC.hex2dec(ETC.maxColor.substr(0, 2));
		var maxg = ETC.hex2dec(ETC.maxColor.substr(2, 2));
		var maxb = ETC.hex2dec(ETC.maxColor.substr(4, 2));

		var r = ETC.dec2hex(parseInt(maxr - (maxr - minr) * i / totalCount));
		var g = ETC.dec2hex(parseInt(maxg - (maxg - ming) * i / totalCount));
		var b = ETC.dec2hex(parseInt(maxb - (maxb - minb) * i / totalCount));

		if (r.length == 1) r = '0' + r;
		if (g.length == 1) g = '0' + g;
		if (b.length == 1) b = '0' + b;

		return '#' + r + g + b;

	},

	addEvent:function(elm, evType, fn, useCapture) {
		if (elm.addEventListener) 
		{
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	}

}

ETC.addEvent(window, 'load', ETC.init, false);

如果你对以上OOP编程方式不太熟悉的话,建议阅读下Christian Heilmann的这本Beginning JavaScript with DOM Scripting and Ajax。目前本站应用的script已全部转为了OOP的方式。

另外,此代码暂时只在Firefox下测试,也有可能有部分bug。





22 Replied

  • 挺漂亮的,能不能也实现字体weight的逐渐变化呢??那样就太棒了。{#face:11}
    punkid 回复 nomus 说:
    虽然可以,但是weight的区分度并不多,所以实际看起来层次感并不强,而且中文只存在粗体与非粗体之分,windows下的粗体还是算出来的伪粗体。
    (2008-08-10 01:30:41)
    nomus wrote this at 2008-08-07 01:15:07 [回复]
  • {#face:7}{#face:3}
    annafaris wrote this at 2008-07-18 06:24:03 [回复]
  • BUS有你这样的高手真不错!{#face:11}
    Oh-Cool wrote this at 2008-06-21 12:41:27 [回复]
  • 你转回旧版了? {#face:1}
    punkid 回复 heeroyuyj 说:
    新模板系统实现不了这个模板
    (2008-05-03 15:11:28)
    heeroyuyj wrote this at 2008-05-03 14:18:50 [回复]
  • 非常清新非常可爱
    比原先那个看着亲切呢PUNKID
    punkid 回复 JC 说:
    哈哈,谢谢夸奖,这个模板再调试调试就可以发布了。
    (2008-05-02 16:20:58)
    JC wrote this at 2008-05-02 04:42:07 [回复]
  • 还是关于那个最新评论的板块的问题,如果我只想显示评论的内容,但是不显示发言者的名字,该怎么做呢。

    还有就是,首页中的博链和 日志页中的最新日志板块如果也想单行显示该怎么做呢。
    punkid 回复 heavenking 说:
    这三行CSS代码可以解决这些问题
    div.module ul li {height:1.7em;overflow:hidden;}
    #nComments ul li {text-indent:-1em;}
    #nComments ul li span {display:none;}

    (2008-05-01 14:10:30)
    heavenking wrote this at 2008-05-01 13:50:27 [回复]
  • 不是那个意思,我只得是比如说最新评论那个板块,那些评论都显示出两行来,我想每一个评论都只显示一行

    如果方便的话,加qq也好啊
    我的是319870703
    punkid 回复 heavenking 说:
    CSS里加入这句
    #nComments ul li {overflow:hidden;height:1.7em;}
    (2008-05-01 11:36:15)
    heavenking wrote this at 2008-05-01 00:25:06 [回复]
  • 请问,你的链接的那个板块的效果是怎么实现的啊,很漂亮啊。

    还有个问题是,我用的也是你的一块板子,想问下,如果我想要最新评论和最新日志这种板块中,显示的都只是一行,多出的就省略掉,该怎么弄呢
    punkid 回复 heavenking 说:
    用jQuery实现的,但是具体怎么实现得懂一定的javascript。

    我不太明白你的意思,你是说侧边栏显示为一栏?
    (2008-04-30 23:37:26)
    heavenking wrote this at 2008-04-30 22:55:09 [回复]
  • 还是谢谢你哈~
    wrote this at 2008-04-25 23:00:00 [回复]
  • 还想问你下留言和名字重叠在一起该怎么改呢?
    punkid 回复 橙 说:
    不太明白你的意思
    (2008-04-23 23:57:24)
    wrote this at 2008-04-23 21:46:46 [回复]
  • 呵呵,我手动加了几个~
    谢谢哈~~~
    wrote this at 2008-04-23 21:44:04 [回复]
  • 请问下我用的这块模版能不能添加tags?
    punkid 回复 橙 说:
    貌似还得自己改模板才行。
    (2008-04-23 21:08:10)
    wrote this at 2008-04-23 18:48:07 [回复]
  • hack你能不能给这个模板的右边再加一列啊,我觉得放几个图标是很好看的。

    感觉右边少了点什么
    punkid 回复 heavenking 说:
    4列? 那恐怕太拥挤了吧。940的宽度,减去正文的530,侧边栏只有310了,再除个3,每列100都不到(算上空白边距)。

    个人而言,不太喜欢为了填充空白而加上些不必要的东西。而且这个模板放在这个站上也是以内容为主,如果你喜欢的话,可以拿来自己folk下,我有提供下载和模板的PSD文件。
    (2008-04-22 11:21:32)
    heavenking wrote this at 2008-04-21 21:01:28 [回复]
  • 那篇日志我看过了,讲了好几种方法,你用的是哪一种呢?~~~~
    忆瀞 wrote this at 2008-04-21 11:00:07 [回复]
  • 请问你用的也是旧模板吗?
    忆瀞 wrote this at 2008-04-21 10:59:02 [回复]
  • 你的LOG页没有广告喔,请问你是用的哪个代码呢?我觉得很奇怪呀,我是用的旧模板系统,原先那个代码用的挺好的,现在就不管用了~~:)
    punkid 回复 忆瀞 说:
    我用的还是这个
    http://blogbus-hack.blogbus.com/logs/11457747.html

    你需要把你的removeAD('postBody')里的postBody改为你的模板相应的日志class,就是包含日志内容的那个divclass,不知道这样解释清楚了没。
    (2008-04-21 10:58:15)
    忆瀞 wrote this at 2008-04-21 10:49:13 [回复]
  • hack真的很棒的说,觉得模板右边的评论部分呀那些内容部分的字有点大,不知道能不能改小一号啊
    punkid 回复 heavenking 说:
    可能是浏览器的差异,因为字号和主体内容的字号是一样的啊
    (2008-04-21 10:54:22)
    heavenking wrote this at 2008-04-21 08:50:18 [回复]
  • aa
    儿子 wrote this at 2008-04-19 17:18:37 [回复]
  • 现在似乎不能用以前的屏蔽LOG页面广告的代码了?我那里已经显示失效了~~~
    punkid 回复 忆瀞 说:
    你可以看下这个站,还是有除掉广告的,应该是还有用的,bus的代码本身没变。
    (2008-04-09 11:42:36)
    忆瀞 wrote this at 2008-04-09 01:13:36 [回复]
  • 这个模板真不错。。。这个站也不错。。。
    -v-.

    加你的链接了。。。
    arthuridea wrote this at 2008-04-07 14:57:50 [回复]
  • 想问一下如何实现每篇文章分类不会显示在标题后面.象你一样显示在下面.如何改变呢
    punkid 回复 来睐 说:
    需要自定义模板,detail-post里改变{#cat}标签所在位置,具体的话还需要你掌握点HTML知识。
    (2008-04-02 11:04:17)
    来睐 wrote this at 2008-04-02 01:07:12 [回复]
  • 这个不错, 顶一下.
    Digidea wrote this at 2008-03-25 08:38:51 [回复]

Leave a Reply

{#face:1} {#face:2} {#face:3} {#face:4} {#face:5} {#face:6} {#face:7} {#face:8} {#face:9} {#face:10} {#face:11} {#face:12} {#face:13} {#face:14} {#face:15}

About

这是一个致力于挖掘,完善blogbus功能,分享blogbus小技巧和非官方资源的博客。所谓"hack",就是在官方未能达到实现某种功能之前,自己通过各种"邪门歪道"来实现它。

欢迎有兴趣的朋友加入到这个博客中来,一同完善这个站,提供更多有用的资源/技巧给blogbus用户们。

这是我的e-mail联系地址(Dont Spam It for God's Sake):

punkid.online@gmail.com

Miscellaneous