jQuery动态效果显示人物结构关系图的方法
本文实例讲述了jQuery动态效果显示人物结构关系图的方法。分享给大家供大家参考。具体分析如下:
这是一个人物关系图,可动态展示,效果非常漂亮。点击文字可出现动态关系图的转换效果。
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <title>UntitledDocument</title> <style> #box{ width:500px;height:500px; position:relative } .host{ position:absolute; width:100px;height:50px; line-height:50px;text-align:center; color:#000000;background-color:#eeeeee; border:#0000001pxsolid;font-weight:bolder } .guest{ position:absolute; width:80px;height:40px; line-height:40px;text-align:center; color:#999999;background-color:#FFFFFF; border:#0000001pxsolid;cursor:pointer } .relationship{ position:absolute; width:60px;height:20px; color:#aaa;line-height:20px; font-size:12px;text-align:center } </style> <scriptsrc="jquery-1.6.2.min.js"></script> <script> varrelationName=[ {name:"成龙",friend:[ {name:"房祖名",relationship:"父子"}, {name:"林凤娇",relationship:"夫妻"}, {name:"吴绮莉",relationship:"绯闻"}, {name:"徐静蕾",relationship:"激吻"}] }, {name:"房祖名",friend:[ {name:"成龙",relationship:"父子"}, {name:"林凤娇",relationship:"母子"}, {name:"方大同",relationship:"情敌"}, {name:"薛凯琪",relationship:"女友"}, {name:"陈坤",relationship:"朋友"}, {name:"赵薇",relationship:"朋友"}] }, {name:"林凤娇",friend:[ {name:"成龙",relationship:"夫妻"}, {name:"房祖名",relationship:"母子"}, {name:"吴绮莉",relationship:"情敌"}] }, {name:"吴绮莉",friend:[ {name:"成龙",relationship:"绯闻"}, {name:"林凤娇",relationship:"情敌"}, {name:"吴卓林",relationship:"母女"}] }, {name:"徐静蕾",friend:[ {name:"李亚鹏",relationship:"电影"}, {name:"韩寒",relationship:"娱乐圈"}, {name:"成龙",relationship:"激吻"}, {name:"黄立行",relationship:"电影"}] }, {name:"方大同",friend:[ {name:"房祖名",relationship:"情敌"}, {name:"薛凯琪",relationship:"否认拍拖"}, {name:"林宥嘉",relationship:"歌手"}, {name:"韩庚",relationship:"演唱会"}] }, {name:"薛凯琪",friend:[ {name:"方大同",relationship:"否认拍拖"}, {name:"房祖名",relationship:"女友"}] } ] varrelation={ radius:150, boxW:500, boxH:500, hostW:100, hostH:50, guestW:80, guestH:40, relationW:60, relationH:20, angle:0, id:"box", init:function(array,n){//传入参数1:数组参数2:第几个 this.array=array; this.appendHost(this.array,n); this.appendQuest(this.array,n); this.appendRelationShip(this.array,n); }, appendHost:function(array,n){ varbox=$("#"+this.id); varhost="<spanclass='host'>"+array[n].name+"</span>"; box.append(host) this.postHost(); }, postHost:function(){ varx=(this.boxW-this.hostW)/2; vary=(this.boxH-this.hostH)/2; $(".host").css({ left:x, top:y }) }, appendQuest:function(array,n){ varbox=$("#"+this.id); varguests=""; varthat=this; for(vari=0;i<array[n].friend.length;i++){ guests+="<spanclass='guest'>"+array[n].friend[i].name+"</span>"; } $(guests).appendTo(box); $(".guest").live("click",function(){ that.move(that,this); }) this.postQuest(); }, postQuest:function(){ varguests=$(".guest"); varthat=this; guests.each(function(i){ guests.eq(i).css({ left:that.setQuestPose(guests.length,that.radius,i,that.guestW,that.guestH,that.angle).left, top:that.setQuestPose(guests.length,that.radius,i,that.guestW,that.guestH,that.angle).top }).attr("angle",i/guests.length) }) }, setQuestPose:function(n,r,i,w,h,d){ //n:代表共几个对象r代表周长i代表第几个对象 //w代表外面对象的宽带h代表外面对象的高度d代表其实角度 varp=i/n*Math.PI*2+Math.PI*2*d; varx=r*Math.cos(p); vary=r*Math.sin(p); return{ "left":parseInt(this.boxW/2+x-w/2), "top":parseInt(this.boxH/2+y-h/2) } }, appendRelationShip:function(array,n){ varbox=$("#"+this.id); varrelation=""; for(vari=0;i<array[n].friend.length;i++){ relation+="<spanclass='relationship'>"+array[n].friend[i].relationship+"</span>"; } box.append(relation); this.postRelationShip(); }, postRelationShip:function(){ varguests=$(".relationship"); varthat=this; guests.each(function(i){ guests.eq(i).css({ left:that.setQuestPose(guests.length,that.radius/2,i,that.relationW,that.relationH,that.angle).left, top:that.setQuestPose(guests.length,that.radius/2,i,that.relationW,that.relationH,that.angle).top }) }) }, move:function(t,i){ varn=$(".guest").index($(i)); this.angle=parseFloat($(i).attr("angle"))+0.5; this.delect(n); this.moveHost(i); this.moveQuest(i); this.moveRelationship(i); this.changeClass(); setTimeout(function(){t.newAppend(i)},500); }, newAppend:function(i){ this.newAppendGuest(i,"guest","name",this.guestW,this.guestH,this.radius); this.newAppendGuest(i,"relationship","relationship",this.relationW,this.relationH,this.radius/2); }, newAppendGuest:function(i,className,name,w,h,r){ varhost=$(i).html(); varguest=$(".guest").html(); varbox=$("#"+this.id); varthat=this; varnext=0; for(vari=0;i<this.array.length;i++){ if(host==this.array[i].name){ for(varj=0;j<this.array[i].friend.length;j++){ if(guest!==this.array[i].friend[j].name){ next++; varguests="<spanclass='"+className+"'>"+this.array[i].friend[j][name]+"</span>"; $(guests).appendTo(box).css({ left:that.setQuestPose(this.array[i].friend.length,r,next,w,h,that.angle).left, top:that.setQuestPose(this.array[i].friend.length,r,next,w,h,that.angle).top }).attr("angle",that.angle+next/this.array[i].friend.length).hide().fadeIn(1000); } } } } }, moveHost:function(i){ varhLeft=parseInt($(".host").css("left"))+this.hostW/2; varhTop=parseInt($(".host").css("top"))+this.hostH/2; vargLeft=parseInt($(i).css("left"))+this.guestW/2; vargTop=parseInt($(i).css("top"))+this.guestH/2; varl=gLeft-hLeft; vart=gTop-hTop; varleft=(hLeft-l-this.guestW/2)+"px"; vartop=(hTop-t-this.guestH/2)+"px"; this.animate(".host",left,top); }, moveRelationship:function(i){ varhLeft=parseInt($(".host").css("left"))+this.hostW/2;; varhTop=parseInt($(".host").css("top"))+this.hostH/2; vargLeft=parseInt($(".relationship").css("left"))+this.relationW/2; vargTop=parseInt($(".relationship").css("top"))+this.relationH/2; varl=gLeft-hLeft; vart=gTop-hTop; varleft=(hLeft-l-this.relationW/2)+"px"; vartop=(hTop-t-this.relationH/2)+"px"; this.animate(".relationship",left,top); }, moveQuest:function(i){ varleft=$(".host").css("left"); vartop=$(".host").css("top"); this.animate(i,left,top); }, delect:function(n){ $(".guest").slice(0,n).remove(); $(".guest").slice(1).remove(); $(".relationship").slice(0,n).remove(); $(".relationship").slice(1).remove(); }, animate:function(i,left,top){ $(i).animate({ left:left, top:top },500); }, changeClass:function(){ varthat=this; $(".guest").addClass("abcdef").removeClass("guest"); $(".host").addClass("guest").removeClass("host").attr("angle",that.angle); $(".abcdef").addClass("host").removeClass("abcdef").attr("angle",null); } } $(document).ready(function(){ relation.init(relationName,0) }) </script> </head> <body> <divid="box"></div> </body> </html>
希望本文所述对大家的jQuery程序设计有所帮助。