jQuery動(dòng)態(tài)效果顯示人物結(jié)構(gòu)關(guān)系圖的方法
來源:易賢網(wǎng) 閱讀:3925 次 日期:2015-05-11 14:37:45
溫馨提示:易賢網(wǎng)小編為您整理了“jQuery動(dòng)態(tài)效果顯示人物結(jié)構(gòu)關(guān)系圖的方法”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了jQuery動(dòng)態(tài)效果顯示人物結(jié)構(gòu)關(guān)系圖的方法,涉及jQuery操作json結(jié)構(gòu)數(shù)據(jù)及鼠標(biāo)事件的技巧,需要的朋友可以參考下

這是一個(gè)人物關(guān)系圖,可動(dòng)態(tài)展示,效果非常漂亮。點(diǎn)擊文字可出現(xiàn)動(dòng)態(tài)關(guān)系圖的轉(zhuǎn)換效果。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"">

<html xmlns="">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Untitled Document</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:#000000 1px solid; font-weight:bolder

}

.guest{

position:absolute;

width:80px; height:40px;

line-height:40px;text-align:center;

color: #999999; background-color:#FFFFFF;

border:#000000 1px solid; cursor:pointer

}

.relationship{

position:absolute;

width:60px; height:20px;

color: #aaa; line-height:20px;

font-size:12px; text-align:center

}

</style>

<script src="jquery-1.6.2.min.js"></script>

<script>

var relationName = [

{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:"否認(rèn)拍拖"},

{name:"林宥嘉",relationship:"歌手"},

{name:"韓庚",relationship:"演唱會(huì)"}]

},

{name:"薛凱琪",friend:[

{name:"方大同",relationship:"否認(rèn)拍拖"},

{name:"房祖名",relationship:"女友"}]

}

]

var relation = {

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){//傳入?yún)?shù)1:數(shù)組 參數(shù)2:第幾個(gè)

this.array = array;

this.appendHost(this.array,n);

this.appendQuest(this.array,n);

this.appendRelationShip(this.array,n);

},

appendHost:function(array,n){

var box = $("#"+this.id);

var host ="<span class='host'>"+array[n].name+"</span>";

box.append(host)

this.postHost();

},

postHost:function(){

var x = (this.boxW - this.hostW)/2;

var y = (this.boxH - this.hostH)/2;

$(".host").css({

left:x,

top:y

})

},

appendQuest:function(array,n){

var box = $("#"+this.id);

var guests="";

var that = this;

for(var i=0; i<array[n].friend.length; i++){

guests+="<span class='guest'>"+array[n].friend[i].name+"</span>";

}

$(guests).appendTo(box);

$(".guest").live("click",function(){

that.move(that,this);

})

this.postQuest();

},

postQuest:function(){

var guests = $(".guest");

var that = 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:代表共幾個(gè)對(duì)象 r代表周長(zhǎng) i代表第幾個(gè)對(duì)象

//w代表外面對(duì)象的寬帶 h代表外面對(duì)象的高度 d代表其實(shí)角度

var p = i/n*Math.PI*2+Math.PI*2*d;

var x = r * Math.cos(p);

var y = 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){

var box = $("#"+this.id);

var relation="";

for(var i=0; i<array[n].friend.length; i++){

relation+="<span class='relationship'>"+array[n].friend[i].relationship+"</span>";

}

box.append(relation);

this.postRelationShip();

},

postRelationShip:function(){

var guests = $(".relationship");

var that = 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){

var n = $(".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){

var host = $(i).html();

var guest = $(".guest").html();

var box = $("#"+this.id);

var that = this;

var next=0;

for(var i=0; i<this.array.length; i++){

if(host == this.array[i].name){

for(var j=0;j<this.array[i].friend.length; j++){

if(guest !== this.array[i].friend[j].name){

next++;

var guests ="<span class='"+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){

var hLeft = parseInt($(".host").css("left")) + this.hostW/2;

var hTop = parseInt($(".host").css("top")) + this.hostH/2;

var gLeft = parseInt($(i).css("left")) + this.guestW/2;

var gTop = parseInt($(i).css("top")) + this.guestH/2;

var l = gLeft - hLeft;

var t = gTop - hTop;

var left = (hLeft - l - this.guestW/2)+"px";

var top = (hTop - t - this.guestH/2)+"px";

this.animate(".host",left,top);

},

moveRelationship:function(i){

var hLeft = parseInt($(".host").css("left")) + this.hostW/2;;

var hTop = parseInt($(".host").css("top")) + this.hostH/2;

var gLeft = parseInt($(".relationship").css("left")) + this.relationW/2;

var gTop = parseInt($(".relationship").css("top")) + this.relationH/2;

var l = gLeft - hLeft;

var t = gTop - hTop;

var left = (hLeft - l - this.relationW/2)+"px";

var top = (hTop - t - this.relationH/2)+"px";

this.animate(".relationship",left,top);

},

moveQuest:function(i){

var left = $(".host").css("left");

var top = $(".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(){

var that =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>

<div id="box"></div>

</body>

</html>

希望本文所述對(duì)大家的jQuery程序設(shè)計(jì)有所幫助。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)