本站启用新的标签云
注:此标签云算法来自17素材网
由于之前的标签云在标签数量过多了以后会显得非常鬼畜,所以今天没事干就换了一个新的
下面奉上源码:
(function ($){
tagjson={
radius:170,
dtr:Math.PI/180,
d:300,
mcList:[],
active:false,
lasta:1,
lastb:1,
distr:true,
tspeed:2,
size:550,
mouseX:0,
mouseY:0,
howElliptical:1,
aA:null,
oDiv:null,
i:0,
oTag:null,
oDiv:$("#tagbox")[0],
aA:$("#tagbox a"),
sineCosine:function(a,b,c){
tagjson.sa=Math.sin(a*tagjson.dtr);
tagjson.ca=Math.cos(a*tagjson.dtr);
tagjson.sb=Math.sin(b*tagjson.dtr);
tagjson.cb=Math.cos(b*tagjson.dtr);
tagjson.sc=Math.sin(c*tagjson.dtr);
tagjson.cc=Math.cos(c*tagjson.dtr);
},
sa:0,
ca:0,
sb:0,
cb:0,
sc:0,
cc:0,
inter:setInterval(function (){
tagjson.update();
},30),
doPosition:function (){
var l=tagjson.oDiv.offsetWidth/2;
var t=tagjson.oDiv.offsetHeight/2;
for(var i=0;i<tagjson.mcList.length;i++){
tagjson.aA[i].style.left=tagjson.mcList[i].cx+l-tagjson.mcList[i].offsetWidth/2+'px';
tagjson.aA[i].style.top=tagjson.mcList[i].cy+t-tagjson.mcList[i].offsetHeight/2+'px';
tagjson.aA[i].style.fontSize=Math.ceil(12*tagjson.mcList[i].scale/2)+8+'px';
tagjson.aA[i].style.filter="alpha(opacity="+100*tagjson.mcList[i].alpha+")";
tagjson.aA[i].style.opacity=tagjson.mcList[i].alpha;
}
},
update:function (){
var a;
var b;
if(tagjson.active){
a=(-Math.min(Math.max(-tagjson.mouseY,-tagjson.size),tagjson.size)/tagjson.radius)*tagjson.tspeed;
b=(Math.min(Math.max(-tagjson.mouseX,-tagjson.size),tagjson.size)/tagjson.radius)*tagjson.tspeed;
}else{
a=tagjson.lasta*0.98;
b=tagjson.lastb*0.98;
}
tagjson.lasta=a;
tagjson.lastb=b;
if(Math.abs(a)<=0.01 && Math.abs(b)<=0.01){
return;
}
var c=0;
tagjson.sineCosine(a,b,c);
for(var j=0;j<tagjson.mcList.length;j++){
var rx1=tagjson.mcList[j].cx;
var ry1=tagjson.mcList[j].cy*tagjson.ca+tagjson.mcList[j].cz*(-tagjson.sa);
var rz1=tagjson.mcList[j].cy*tagjson.sa+tagjson.mcList[j].cz*tagjson.ca;
var rx2=rx1*tagjson.cb+rz1*tagjson.sb;
var ry2=ry1;
var rz2=rx1*(-tagjson.sb)+rz1*tagjson.cb;
var rx3=rx2*tagjson.cc+ry2*(-tagjson.sc);
var ry3=rx2*tagjson.sc+ry2*tagjson.cc;
var rz3=rz2;
tagjson.mcList[j].cx=rx3;
tagjson.mcList[j].cy=ry3;
tagjson.mcList[j].cz=rz3;
tagjson.per=tagjson.d/(tagjson.d+rz3);
tagjson.mcList[j].x=(tagjson.howElliptical*rx3*tagjson.per)-(tagjson.howElliptical*2);
tagjson.mcList[j].y=ry3*tagjson.per;
tagjson.mcList[j].scale=tagjson.per;
tagjson.mcList[j].alpha=tagjson.per;
tagjson.mcList[j].alpha=(tagjson.mcList[j].alpha-0.6)*(10/6);
}
tagjson.doPosition();
tagjson.depthSort();
},
depthSort:function (){
var i=0;
var aTmp=[];
for(i=0;i<tagjson.aA.length;i++){
aTmp.push(tagjson.aA[i]);
}
aTmp.sort(function (vItem1,vItem2){
if(vItem1.cz>vItem2.cz){
return -1;
}else if(vItem1.cz<vItem2.cz){
return 1;
}else{
return 0;
}
}
);
for(i=0;i<aTmp.length;i++){
aTmp[i].style.zIndex=i;
}
},
positionAll:function (){
var phi=0;
var theta=0;
var max=tagjson.mcList.length;
var i=0;
var aTmp=[];
var oFragment=document.createDocumentFragment();
for(i=0;i<tagjson.aA.length;i++){
aTmp.push(tagjson.aA[i]);
}
aTmp.sort(function (){
return Math.random()<0.5?1:-1;
});
for(i=0;i<aTmp.length;i++){
oFragment.appendChild(aTmp[i]);
}
tagjson.oDiv.appendChild(oFragment);
for(var i=1;i<max+1;i++){
if(tagjson.distr){
phi=Math.acos(-1+(2*i-1)/max);
theta=Math.sqrt(max*Math.PI)*phi;
}else{
phi=Math.random()*(Math.PI);
theta=Math.random()*(2*Math.PI);
}
tagjson.mcList[i-1].cx=tagjson.radius*Math.cos(theta)*Math.sin(phi);
tagjson.mcList[i-1].cy=tagjson.radius*Math.sin(theta)*Math.sin(phi);
tagjson.mcList[i-1].cz=tagjson.radius*Math.cos(phi);
tagjson.aA[i-1].style.left=tagjson.mcList[i-1].cx+tagjson.oDiv.offsetWidth/2-tagjson.mcList[i-1].offsetWidth/2+'px';
tagjson.aA[i-1].style.top=tagjson.mcList[i-1].cy+tagjson.oDiv.offsetHeight/2-tagjson.mcList[i-1].offsetHeight/2+'px';
}
}
}
tagjson.aA.each(function (i){
tagjson.mcList.push({
offsetWidth:this.offsetWidth,
offsetHeight:this.offsetHeight
});
});
tagjson.sineCosine(0,0,0);
tagjson.positionAll();
$(tagjson.oDiv).mouseover(function (){
tagjson.active=true;
}).mouseout(function (){
tagjson.active=false;
}).mousemove(function (e){
tagjson.mouseX=e.pageX-(tagjson.oDiv.offsetLeft+tagjson.oDiv.offsetWidth/2);
tagjson.mouseY=e.pageY-(tagjson.oDiv.offsetTop+tagjson.oDiv.offsetHeight/2);
});
})($);
已经改为封装好的代码
如果需要去除标签云,则只需要
clearInterval(tagjson.inter)
即可
2015
09 29
上一篇
Older
下一篇
Newer
评论
0
点击
2126