`
JavaSam
  • 浏览: 956728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery 人物关系图 圆角

 
阅读更多
<!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>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="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="http://www.zhangxinxu.com/study/js/jquery.corner.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)
		$("span").corner("round60px");
})
</script>
</head>

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

</body>
</html>

 

0
0
分享到:
评论
2 楼 liuweihug 2014-04-17  
Js jquery实现组织结构图、人物关系图代码 - 开源代码 - IT工作生活这点事。Just Such So!
http://www.suchso.com/opencode/jsjqueryorgrelationmap.html
1 楼 ninthbar 2014-04-03  
你这只是显示以选定节点为核心的一级关系网,如果改成可以自由定制显示N级就好了,能帮忙实现吗?

相关推荐

    jquery html5三维线性人物关系图特效代码

    【标题】:“jQuery HTML5三维线性人物关系图特效代码” 在现代网页设计中,可视化数据已经成为一种重要的信息展示方式,特别是在复杂的人物关系或者组织结构的呈现上。"jQuery HTML5三维线性人物关系图特效代码...

    jquery+css3圆角动画导航

    首先,CSS3提供了许多新的样式规则,其中圆角边框(border-radius)允许我们不借助图片就能创建圆角效果。在本实例中,导航条的每个按钮都通过设置border-radius属性实现了圆润的外观,这使得整体设计更加现代且易于...

    jquery实现圆角实例

    在本实例中,我们将探讨如何利用 jQuery 来实现元素的圆角效果,包括层的圆角和背景的圆角。 首先,要实现 jQuery 圆角功能,我们需要理解 CSS3 的 border-radius 属性,这是原生支持元素圆角的关键。在 CSS3 中,...

    jQuery人物关系拓扑图代码.zip

    【jQuery人物关系拓扑图代码.zip】是一个包含jQuery特效实现的人物关系展示的代码资源。这个压缩包中的核心是"jiaoben7637"文件,它可能是一个HTML、CSS和JavaScript组合的项目,用于创建一个交互式的人物关系拓扑图...

    Jquery实现圆角边框效果的源码

    首先,`jquery.curvycorners.source.js`、`jquery.curvycorners.min.js` 和 `jquery.curvycorners.packed.js` 这三个文件是jQuery圆角边框插件的不同版本。`source.js` 是源代码文件,便于开发者查看和理解实现机制...

    jQuery shutter.js圆角百叶窗图片轮播代码.zip

    jQuery shutter.js圆角百叶窗图片轮播代码

    jQuery缩略图突出圆角焦点图.zip

    在这个"jQuery缩略图突出圆角焦点图.zip"项目中,我们可以深入探讨一些核心知识点,包括jQuery、CSS、HTML5以及JavaScript在创建动态、美观的网页元素方面的应用。 首先,jQuery库是这个项目的基石。jQuery通过提供...

    jquery插件集-圆角效果

    在这个案例中,"jquery插件集-圆角效果" 可能包含了一个用于设置元素圆角的函数,并将其绑定到了 jQuery 对象上,使得我们可以通过简单的 jQuery 选择器调用来应用这个效果。 要实现圆角效果,早期的浏览器并不支持...

    jQuery人物关系拓扑图代码

    **jQuery人物关系拓扑图代码**是用于展示和可视化人际关系或事物之间复杂关系的一种JavaScript实现。这个代码利用了流行的jQuery库以及HTML5的一些特性,提供了一种交互式的、直观的方式来呈现网络状的数据结构。在...

    jQuery手机环形圆角菜单效果

    【jQuery手机环形圆角菜单效果】是一种在移动设备上实现的独特交互设计,它结合了jQuery库的强大功能和视觉上的吸引力。这种菜单设计通常用于触摸屏设备,为用户提供直观且有趣的导航体验。以下是对这个主题的详细...

    jquery 圆角遮罩图片实现图片圆角

    ### 使用jQuery实现图片圆角效果 #### 背景与目的 在网页设计中,为了增强用户体验和美观性,开发者经常需要对图片进行各种样式处理,其中“圆角”效果是一种非常受欢迎的设计元素。传统的CSS圆角技术在某些浏览器...

    JQUERY CSS3 文本圆角 光晕效果

    "JQUERY CSS3 文本圆角 光晕效果"是一个利用这两种技术实现的高级网页元素美化方法,主要关注文本框的外观设计。在支持CSS3的现代浏览器中,这种效果可以显著提升网站的美感和用户体验。 首先,让我们详细了解一下...

    还用jquery控件实现div圆角效果

    在本主题中,我们将探讨如何使用jQuery库来实现一个div元素的圆角效果,同时也会涉及到其他边框效果的实现。jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理、动画以及Ajax交互等任务。 首先,让我们...

    jQuery Canvas Rounded Corners - jQuery圆角插件

    而`jquery.corners.js`则是jQuery圆角插件的主要脚本,它包含实现圆角效果的函数和逻辑。 在页面中引入这些文件后,可以通过jQuery选择器选取需要添加圆角效果的元素,并调用`.corners()`方法来应用插件。例如: `...

    jQuery人物图片拼图游戏代码

    【jQuery人物图片拼图游戏代码】是一个基于JavaScript库jQuery实现的互动游戏,旨在提供一种娱乐方式,同时让学习者了解和实践DOM操作、事件处理以及简单的动画效果。在这个游戏中,玩家需要将打乱的人物图片拼回...

    JQuery实现的圆角框

    无图片,无CSS的JQuery脚本,支持1.3+以上的版本

    jQuery圆角插件:jquery.corners.js

    在CSS3之前,创建圆角效果通常需要复杂的图片切片或使用JavaScript,而jQuery的圆角插件如`jquery.corners.js`则简化了这一过程。 `jquery.corners.js`是一个小巧而实用的jQuery插件,它通过动态添加CSS样式来实现...

    我的第一个jQuery插件 -- 圆角DIV

    在早期的Web开发中,CSS2无法直接创建圆角,所以开发者会利用JavaScript库如jQuery来实现这一功能。以下是对这个主题的详细知识解释: **jQuery插件**: jQuery插件是扩展jQuery功能的代码库,允许开发者轻松地添加...

    jQuery鼠标悬停图片震动特效.zip

    "jQuery鼠标悬停图片震动特效"就是这样一种巧妙的技术应用,它结合了CSS3的圆角样式和jQuery库,实现了当鼠标悬停在图片上时,图片产生震动的视觉效果。这一特效不仅增加了交互性,还为网页增添了一丝趣味性。 首先...

    jQuery_的原型关系图

    jQuery的原型关系图是理解其内部工作原理的关键。在这个图中,我们可以看到对象之间的继承关系,以及jQuery如何扩展和利用JavaScript的原型链机制。 首先,让我们讨论JavaScript的原型(Prototype)概念。在...

Global site tag (gtag.js) - Google Analytics