<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>javascript动态人物关系结构图</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="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.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:"否认拍拖"},
{name:"林宥嘉",relationship:"歌手"},
{name:"韩庚",relationship:"演唱会"}]
},
{name:"薛凯琪",friend:[
{name:"方大同",relationship:"否认拍拖"},
{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){//传入参数1:数组 参数2:第几个
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:代表共几个对象 r代表周长 i代表第几个对象 w代表外面对象的宽带 h代表外面对象的高度 d代表其实角度
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>
<p>查找更多代码,请访问:<a href="http://www.18sucai.com" target="_blank">18素材</a></p>
分享到:
相关推荐
在众多图表类型中,人物关系图是一种用于展示人际关系、组织结构或网络连接的特殊图表,常用于社交网络分析、组织架构展示等领域。本篇将详细介绍如何利用ECharts生成人物关系图。 **一、力导向图与人物关系图** ...
在本项目中,"CSS3 创建动态的人物关系图谱效果.rar" 提供了一种使用 CSS3 实现动态人物关系图谱的方法。这种技术在现代网页设计中非常实用,尤其是在展示复杂网络关系、组织架构或者社交网络时。下面将详细介绍如何...
"jQuery HTML5三维线性人物关系图特效代码"就是这样一个工具,它利用jQuery库和HTML5的技术,实现了动态、立体的人物关系展示,帮助用户更直观地理解人物之间的联系。 jQuery是一个广泛使用的JavaScript库,它简化...
JavaScript 动态网页设计期末大作业CHASMISH眼镜网(纯手打,高分项目)。 JavaScript 动态网页设计期末大作业CHASMISH眼镜网(纯手打,高分项目)。 JavaScript 动态网页设计期末大作业CHASMISH眼镜网(纯手打,...
总的来说,这个项目展示了如何结合Canvas、JavaScript和JSON数据来实现一个动态的、可交互的人物关系图。这样的工具在业务分析、项目管理、社交网络可视化等领域有着广泛的应用。通过深入研究这个代码,开发者不仅...
**实时显示** 是通过Ajax的异步特性实现的,服务器处理图片上传后,返回一个确认消息,JavaScript接收到消息后更新页面,显示上传成功的提示或新图片。 **图片大小设置** 可能涉及到两部分:前端预览和后端处理。...
在“D3.js实现人物关系图谱有移动、拖拽、放大功能”这个主题中,我们将深入探讨如何利用D3.js来创建交互式的人物关系网络图,并实现平移、缩放和拖拽等动态效果。 首先,理解D3.js的基础是关键。D3.js全称为Data-...
此“可拖拽的html5人物关系图代码”项目旨在实现一种交互式的、用户可以自由调整的人物关系展示方式,这对于数据可视化和信息管理非常有用。在这个项目中,我们将深入探讨HTML5的核心特性,特别是与图形和交互性相关...
根据提供的标题“JavaScript动态网页教程”以及描述“是PDF文件。写JavaScript网页开发例子。”,我们可以推断出这份文档主要涵盖了使用JavaScript进行动态网页开发的相关知识。虽然在给出的部分内容中仅重复显示了...
在这段代码中,HTML部分定义了页面的结构,JavaScript则负责处理动态显示的逻辑。当页面加载完成后,JavaScript代码会被执行。在JavaScript代码中,我们使用了`document.write()`方法来输出一个包含时间显示的`...
在JavaScript编程中,动态显示当前时间是一个常见的需求,特别是在网页设计和开发中。"动态显示当前时间的js"就是一种实现这一功能的解决方案,它能够兼容所有主流浏览器,包括Chrome、Firefox、Safari、Edge以及...
《JavaScript动态网页设计经典实例教程》是一本专为学习JavaScript动态网页设计的教程,它涵盖了丰富的实例,旨在帮助用户深入理解和应用JavaScript技术。教程中涉及的内容广泛,包括文字特效、图片处理等多种网页...
在这个特定的示例中,"ECharts插件DEMO--基于力导向布局图功能更完善的人物关系图插件扩展-增加横纵滚动条"是一个针对ECharts的扩展,它特别关注于构建更加复杂和动态的人物关系图,并通过添加横纵滚动条来增强用户...
2. **多种图表类型**:支持不同类型的图表,如树形图、环形图、力导向图等,适应各种人物关系结构。 3. **自定义样式**:允许用户自定义节点和边的样式,包括颜色、形状、大小等,以满足不同的设计需求。 4. **交互...
5. **动画效果**:通过设置定时器和改变CSS样式,JavaScript可以创建各种动态效果,如淡入淡出、滑动菜单、轮播图等。 6. **本地存储**:随着HTML5的引入,JavaScript还可以利用localStorage和sessionStorage来存储...
本章介绍图像的显示,主要包括:图片的随机显示、图像的显示和隐藏、图像的滚动显示、图像的探照灯扫描显示、多幅图像的翻页显示、图像的水纹效果显示、全景图效果显示手电照射效果显示以及雷达扫描效果显示等。...
JavaScript,作为全球最广泛使用的编程语言之一,是创建动态网页的关键技术。它允许开发者在用户与网页之间建立实时交互,从而提升用户体验。本资源“精通JavaScript动态网页编程”旨在帮助你深入理解和掌握这一核心...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责实现客户端的交互和动态效果。对于初学者来说,了解JavaScript的基本数据结构是入门的关键。这篇文章将详细讲解JavaScript的基本数据类型、数据...
JAVASCRIPT网页农历日期动态显示.pdf 本文档主要介绍了使用JavaScript实现农历日期的动态显示,包括农历干支纪年、生肖、农历月日、节气等的动态显示。该方法使用JavaScript脚本来计算农历日期,并提供了从2001年到...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责实现网页的动态效果、交互性和数据验证。在“JavaScript动态网页(实例版)”中,我们可以深入学习如何利用JavaScript来创建生动、用户友好的...