JQuery TagClouds Plugin Ver0.1
功能:将一个元素内的所有链接转换为Tag Clouds(标签云)形式,字体大小和颜色同时渐变。
Demo:见首页
Sample:
$(".tag_clouds").tagClouds();
更复杂一点的例子:
var option = {
fontmax:22, //可选 默认值为22, TagCloud的最大fontsize(单位px)
fontmax:11, //可选 默认值为11, TagCloud的最小fontsize(单位px)
colorfrom:"#CACAFF", //可选 默认值为"#CACAFF", TagCloud的渐变颜色1(要突出显示的颜色)
colorto:"#F8B3D0", //可选 默认值为"#F8B3D0", TagCloud的渐变颜色2
patrn:/\(\d+\)$/ //可选 将Tag权值从链接中分离的正则表达式,默认形式为 标签(10)
}
$(".tag_clouds").tagClouds(option);
Plugin Source
/*
* jQuery TagClouds Plugin
* version: 0.1
* @requires jQuery v1.2.2 or later
*
* Copyright (c) 2008 AlloVince
* Examples at: http://allo.ave7.net/JQuery_TagClouds_Plugin
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*
*/
if(jQuery) (function($){
$.fn.tagClouds = function(option) {
var fontmax = 21;
var fontmin = 11;
var colorfrom = "#CACAFF";
var colorto = "#F8B3D0";
var patrn=/\(\d+\)$/;
if(option) {
fontmax = option.fontmax ? option.fontmax : fontmax;
fontmin = option.fontmin ? option.fontmin : fontmin;
colorfrom = option.colorfrom ? option.colorfrom : colorfrom;
colorto = option.colorto ? option.colorto : colorto;
patrn = option.patrn ? option.patrn : colorto;
}
var tags = Array();
var fontsize = Array(),fontcolor = Array();
var i = 0;
$(' > a',this).each(function(){
var tag_count = patrn.exec($(this).text());
var num=/\d+/;
tags[i] = num.exec(tag_count);
i++;
});
//数组复制
var tmp = tags.slice(0);
tmp.sort(function(a, b) {return b - a;});
var max = tmp[0];
var min = tmp[tmp.length-1];
for(i = 0; i < tags.length ; i++) {
if(tags[i] == max) {
fontsize[i] = fontmax;
}
else if(tags[i] == min) {
fontsize[i] = fontmin;
}
else {
fontsize[i] = parseInt( (fontmax - fontmin)*(tags[i] - min)/(max - min) + fontmin);
}
fontcolor[i] = color(colorfrom,colorto,max - min + 1,tags[i] - min + 1);
}
i = 0;
$(' > a',this).each(function(){
$(this).css("font-size",fontsize[i] + "px");
$(this).css("color",fontcolor[i]);
$(this).mouseover(function(){
$(this).animate({
fontSize: fontmax + "px"
}, 500);
});
i++;
});
// 颜色#FF00FF格式转为Array(255,0,255)
function color2rgb(color){
var r = parseInt(color.substr(1, 2), 16);
var g = parseInt(color.substr(3, 2), 16);
var b = parseInt(color.substr(5, 2), 16);
return new Array(r, g, b);
}
// 颜色Array(255,0,255)格式转为#FF00FF
function rgb2color(rgb) {
var s = "#";
for (var i = 0; i < 3; i++) {
var c = Math.round(rgb[i]).toString(16);
if (c.length == 1)
c = '0' + c;
s += c;
}
return s.toUpperCase();
}
function color(from,to,all,step){
var Gradient = new Array(3);
var A = color2rgb(from);
var B = color2rgb(to);
for (var i = 0; i < 3; i++) {
Gradient[i] = A[i] + (B[i]-A[i]) / all * step;
}
return rgb2color(Gradient);
}
}
})(jQuery);
---code end---

Lazing 在April 23 2008 01:34:50说:
恩,现有的MVC肯定已经过时了……现在的想法是 页面组件 - 页面控制器 - 系统服务 - 系统平台
宝养的仙人球o(∩_∩)o. 在April 22 2008 14:07:03说:
我得意滴笑又得意滴笑(*^__^*)Allo 在April 22 2008 14:04:24说:
留言问题已修复,应该对htmlentities指定字符集AlloVince 在April 22 2008 13:19:28说:
TagClouds我觉得应该归于客户端表现,服务器端只负责输出tag名和权值,而不应该参与样式的输出,样式具体的表现形式由JS控制客户端决定。恩,总之做框架时感觉应该把View层进一步细分。
Lazing 在April 22 2008 12:45:29说:
消灭零回复……话说,没有服务端支持,这个也没用啊……