jquery怎么实现关系图的绘制

作者&投稿:周股 (若有异议请与网页底部的电邮联系)
jQuery如何做人脉关系图,有人告诉我用ECharts,但是我感觉和我的需求不太一致,请问还有其他方式吗~

其实就能用EChart

参考地址:http://echarts.baidu.com/doc/example/force.html

文档例子可以从官网下载

首先如果是远程数据库处理要后台脚本去访问取数据,比如php,java之类,传到前端。
前端可以使用js来将数据显示成图表,使用jqplot等组件也可以。

实例代码如下:
<!DOCTYPE html >
<head>
<title>jQuery渐显效果的人物多级关系图</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<style type="text/css">
#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://www.codefans.net/ajaxjs/jquery1.3.2.js"></script>
<script type="text/javascript">
var relationName = [
{name:"成龙",friend:[
{name:"房祖名",relationship:"父子"},
{name:"林凤娇",relationship:"夫妻"},
},
{name:"房祖名",friend:[
{name:"成龙",relationship:"父子"},
{name:"林凤娇",relationship:"母子"},
},
{name:"林凤娇",friend:[
{name:"成龙",relationship:"夫妻"},
{name:"房祖名",relationship:"母子"},
},
{name:"吴绮莉",friend:[
{name:"成龙",relationship:"绯闻"},
{name:"林凤娇",relationship:"情敌"},
},
{name:"徐静蕾",friend:[
{name:"李亚鹏",relationship:"电影"},
{name:"韩寒",relationship:"娱乐圈"},
},
{name:"方大同",friend:[
{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>
看不到效果,刷新一下就可以了;<br>
<div id="box"></div>
</body>
</html>

jQuery只是一个DOM工具库,要绘图的话要采用其它技术配合,一般就是三种:VML(针对IE内核浏览器)、SVG、Canvas(针对支持HTML5的浏览器)。你可以看看百度的echarts、或者国外的D3.js。从功能角度讲,D3比echarts强大多了。不过echarts因为是百度的,所以中文文档多。
你说的关系图,可以用弦图(chord)或者力导向图(force)来表示。

不知道你要的关系图是怎么样的,我目前知道的就是d3.js有关于关系图的demo,就是关于力学图的



本视频展示如何用matlab绘制散圆状态图,可用于相关科研数据绘图!



可以用echarts http://echarts.baidu.com/ 很常用的


软件开发中经常说的Query是什么意思呢
query查询请求的意思,为了在数据库中寻找某一特定文件、网站、记录或一系列记录,由搜索引擎或数据库送出的消息。在SAP实施过程中经常会出现,对于用户的部分报表需求,标准报表无法实现,通过查询后台表就可以导出其想要的信息。但是IT不会授予用户SE16N等后台表查看权限,此时可以创建Query以方便用户查阅。...

如何利用Excel的Power Query快速转换数据
利用Excel的Microsoft Power Query加载项可实现快速转换(Excel 2016已经包含Microsoft Power Query组件,可以在“数据”选项卡直接调用,其他版本需在微软官方http:\/\/dwz.cn\/2J93Jh 复制网址 下载安装)。   1. 数据转换为表 打开数据表,切换到“数据”选项卡,在“获取和转换”功能组...

powerquery如何统计数字00开头的统计
在Power Query中,你可以使用以下步骤来统计以数字00开头的数字:1、导入你的数据到Power Query。这可以通过多种方式实现,包括从Excel表格、SQL数据库或其他数据源导入。2、在Power Query编辑器中,找到你想进行统计的列。3、点击你想要进行统计的列,然后点击上方菜单中的转换选项。4、在下拉菜单中选择...

query是什么意思医学?
在医学领域中,query一词常常用于描述医疗人员与医学数据库间的交互行为。这种查询可以通过各种方式实现,例如搜索疾病信息、药物治疗方案等。医学查询的目的是为了获取有效的、可靠的信息,以此为基础制定出最为科学的治疗方案。在大数据时代,query在医学方面的运用越来越广泛,极大的方便了医护人员开展工作。...

关于delphi中怎么利用QUERY实现多表连接查询
这个组件是可以多表查询的,出现只读的情况可能是数据库权限有问题,你看看你连接的权限是不是管理员权限。

实现Excel动态链接外部数据库
所在点击“下一步”。(图5)   6、出现“查询向导—完成”对话框,因还要对数据进行筛选,所以选择“在Microsoft Query中查看数据或编辑查询”,点击“完成”。(图6)   7、进入“Microsoft Query”,看到查询结果x16列出了所有行的数据。上一页12 3 下一页 ...

POWER QUERY怎么实现多条件排序?
自定义步骤公式:= Table.AddColumn(源,"所在班级排名",each Table.RowCount(Table.Distinct(Table.SelectRows(源,(x)=>x[分数]<[分数] and x[班级]=[班级])))+1)上载到工作表如图:

hibernate中的query怎么取到每个字段的值
教你个方法:List result = session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list()用这个方法可以把数据库查询出来的每一行封装成一个Map类型,Key为数据库字段,Value为值,然后把这些Map放到了一个List里面,如果你只返回一条记录:那么 Map<String, Object> map...

query是什么意思?
第三人称单数:queries。复数:queries。现在分词:querying。过去式:queried。记忆技巧:quer 抱怨 + y 表名词 → 抱怨是因为有疑问 → 疑问。双语例句:1、Design and Implementation of Text Query System Based on Semantic Analysis.基于语义分析文本查询系统的设计与实现。2、I'm not in a ...

用Power Query在不同列中找出相同项
人员名单都集中在一个单元格中了,接下来就是想办法将这些人员名单分开进行计数,又用到了只有在Power Query中才可以实现的分列到行,选中最后一列,转到主页菜单栏,选择拆分列下的按分隔符,展开高级选项,选择行:确定之后是这样的:接下来就直接利用分组依据来对出现的人名进行一下计数咯,选中所有列...

长兴县13510845014: jquery怎么实现关系图的绘制 -
释荣银黄: jQuery只是一个DOM工具库,要绘图的话要采用其它技术配合,一般就是三种:VML(针对IE内核浏览器)、SVG、Canvas(针对支持HTML5的浏览器).你可以看看百度的echarts、或者国外的D3.js.从功能角度讲,D3比echarts强大多了.不过echarts因为是百度的,所以中文文档多.你说的关系图,可以用弦图(chord)或者力导向图(force)来表示.

长兴县13510845014: 如何用js实现动态画数据关系图 -
释荣银黄: 1.各个应用系统、服务器信息及系统直接的调用都录入到数据库中2.前端拓扑图、或系统调用关系图的展示UI可以通过一些选项从数据库中捞出数据,然后在UI上动态绘制出关系图来3.如HTML5 Canvas或基于HTML5 Canvas的JTopo、SVG都可以很好的绘制出这种图来.

长兴县13510845014: 用JQUERY怎麽画图? -
释荣银黄: jquery不能直接用来画图,但是在Html5中有专门的用来绘图的标签 <caption></caption>.你可以找找JS+Html5绘图

长兴县13510845014: jquery 如何实现er图或者使用什么插件可以实现 -
释荣银黄: 数是独立的框架,大多数支持条图、线图、饼图等基本图形,很多甚至支持更加复杂的图形,比如:维恩图、热图、进化树、二维散点图、二维散点气泡图、三维散点图等.相信你应当能在这个列表中找到所需的.

长兴县13510845014: jQuery怎么判断两个节的关系,如是“父子关系”,“兄弟关系”,"子父关系". -
释荣银黄: 千总,是这样的.jQuery里面的“父子关系”,“兄弟关系“是基于html DOM节点的.<br><br>比如你的例子, <br><div class="div" id=div1><br> <font class="fount1">我是1!</font><br> <div id=div2><br> <font class="fount2">我是2!</...

长兴县13510845014: jQuery链式操作如何实现以及为什么要用链式 -
释荣银黄: 链式操作就是分步骤地对jQuery对象实现各种操作,举个栗子:$("#Test").css('color','red').show(200).removeClass('style');上面的例子就是链式操作,在一行代码里,对id为Test的对象进行了三项操作:先设置其字体颜色为红色,再显示对...

长兴县13510845014: jQuery怎么将div设置为水平垂直居中 -
释荣银黄: 一、使用工具:jQuery、编辑软件 二、方法有三:1、CSS实现水平和垂直居中:要让DIV水平和垂直居中,必需知道该DIV得宽度和高度,然后设置位置为绝对位置,距离页面窗口左边框和上边框的距离设置为50%,这个50%就是指页面窗口的...

长兴县13510845014: 数制转换的函数定义如下,将100转变成16进制并在Text1中显示结果,正...
释荣银黄: 是一个控件 控件包括 拖拽功能 尺寸控制功能 参数判读功能 如果你有这个页面 直接在这个页面的js上可以找到这些功能 如果自己写的话 可以考虑用 jq ui 控件组合

长兴县13510845014: 怎么用jquery或者javascript实现:如图1的那个按钮,可以让上传或预览图片? -
释荣银黄: 1、点击图1的那个按钮可以让用户选择上传的图片,选择了一张就在按钮前面预览,如果用户不想上传某张图片可以点击x取消,再点击上传按钮可以接着选择图片上传. 2、设置选择图片的按钮的 click 事件,去触发 #upload_file 的 click 事件,然后就可以点击图片按钮后,选择本地图片文件了. 3、设置上传按钮,其实一般手机版网页是没有上传按钮的,即选择图片后就通过 Ajax 上传图片了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网