css:

<style>
#div1{ width:780px; height:400px; background:#fff; margin:20px auto; overflow:hidden;}
body{ background:black;}
</style>

html:

<div id="div1"></div>

js:

var svgNS = 'http://www.w3.org/2000/svg';
var oParent = document.getElementById('div1');
var centerX = oParent.offsetWidth/;
var centerY = oParent.offsetHeight/; var circleNum = ;
var angleNum = /circleNum;
var centerR = ;
var otherData = []; for(var i=;i<circleNum;i++){
var y = Math.sin(i**Math.PI/)*centerR + centerY;
var x = Math.cos(i**Math.PI/)*centerR + centerX;
otherData.push({x : x , y : y , text : i});
} var data = {
centerNode : { text : '凤凰网' },
otherNode : otherData
}; function createTag(tag,objAttr){
var oTag = document.createElementNS(svgNS , tag);
for(var attr in objAttr){
oTag.setAttribute(attr , objAttr[attr]);
}
return oTag;
} function addTag(){ var oSvg = createTag('svg',{'xmlns':svgNS,'width':'100%','height':'100%'}); for(var i=;i<data.otherNode.length;i++){
addOtherTag( data.otherNode[i] , oSvg );
} var oG = createTag('g',{'style':'cursor:pointer'});
var oCircle = createTag('circle',{'cx':centerX,'cy':centerY,'r':'','fill':'white','stroke':'red','stroke-width':''});
var oText = createTag('text',{'x':centerX,'y':centerY+,'font-size':'','text-anchor':'middle'});
oText.innerHTML = data.centerNode.text; oG.appendChild(oCircle);
oG.appendChild(oText); oSvg.appendChild(oG);
oParent.appendChild(oSvg);
} addTag(); function addOtherTag(otherAttr , oSvg){ var oG = createTag('g',{'style':'cursor:pointer','class':'lineStyle'});
var oLine1 = createTag('line',{'x1':otherAttr.x,'y1':otherAttr.y,'x2':centerX,'y2':centerY,'stroke':'#ccc'});
var oLine2 = createTag('line',{'x1':otherAttr.x,'y1':otherAttr.y,'x2':centerX,'y2':centerY,'stroke':'transparent','stroke-width':''});
var oRect = createTag('rect',{'x': (otherAttr.x + centerX)/ - ,'y': (otherAttr.y + centerY)/ - ,'fill':'#999','width':'','height':'','rx':''});
var oText = createTag('text',{'x':(otherAttr.x + centerX)/,'y':(otherAttr.y + centerY)/ + ,'fill':'white','font-size':'','text-anchor':'middle'});
oText.innerHTML = '?'; oG.appendChild(oLine1);
oG.appendChild(oLine2);
oG.appendChild(oRect);
oG.appendChild(oText); oSvg.appendChild(oG); var oG = createTag('g',{'style':'cursor:pointer','class':'circleStyle'});
var oCircle = createTag('circle',{'cx':otherAttr.x,'cy':otherAttr.y,'r':'','fill':'white','stroke':'red','stroke-width':''});
var oText = createTag('text',{'x':otherAttr.x,'y':otherAttr.y+,'font-size':'','text-anchor':'middle'});
oText.innerHTML = otherAttr.text; oG.appendChild(oCircle);
oG.appendChild(oText); oSvg.appendChild(oG); } bindTag(); function bindTag(){
var aLine = document.getElementsByClassName('lineStyle');
var aCircle = document.getElementsByClassName('circleStyle'); for(var i=;i<aCircle.length;i++){
aCircle[i].onmouseenter = function(){
startMove( this.getElementsByTagName('circle')[] , , );
var prevLine = this.previousElementSibling;
prevLine.getElementsByTagName('line')[].setAttribute('stroke','blue');
prevLine.getElementsByTagName('rect')[].setAttribute('fill','red'); };
aCircle[i].onmouseleave = function(){
startMove( this.getElementsByTagName('circle')[] , , );
var prevLine = this.previousElementSibling;
prevLine.getElementsByTagName('line')[].setAttribute('stroke','#ccc');
prevLine.getElementsByTagName('rect')[].setAttribute('fill','#999');
};
}
for(var i=;i<aLine.length;i++){
aLine[i].onmouseenter = function(){
this.getElementsByTagName('line')[].setAttribute('stroke','blue');
this.getElementsByTagName('rect')[].setAttribute('fill','red');
var prevCircle = this.nextElementSibling;
startMove( prevCircle.getElementsByTagName('circle')[] , , );
};
aLine[i].onmouseleave = function(){
this.getElementsByTagName('line')[].setAttribute('stroke','#ccc');
this.getElementsByTagName('rect')[].setAttribute('fill','#999');
var prevCircle = this.nextElementSibling;
startMove( prevCircle.getElementsByTagName('circle')[] , , );
};
} } function startMove(obj,r1,r2){
var nowR = r1;
var overR = r2;
obj.speed = ;
clearInterval(obj.timer);
obj.timer = setInterval(function(){ obj.speed += (overR - nowR)/;
obj.speed *= 0.9; if( Math.abs(overR - nowR)<= && Math.abs(obj.speed)<= ){
clearInterval(obj.timer);
obj.setAttribute( 'r' , overR );
}
else{
nowR += obj.speed;
obj.setAttribute( 'r' , nowR );
} },);
}

效果:

												

SVG 案例:动态去创建分支节点,当鼠标经过某个节点时,分支线会高亮的更多相关文章

  1. SVG案例:动态去创建元素createElementNS

    案例一: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  2. android studio svn 创建分支

    创建分支或标签 从哪里复制 工作副本 用这个变体去创建分支,并带着当地的改变.通常,服务项将被 添加带历史 , 不仅仅只有目标目录. 每个不同于根的版本文件 ,将被指定的复制.它推荐 去更新 工作副本 ...

  3. svg创建分支

    是这样的 我之前的项目上传到svn上一直没有开过分支,今天其中的一个项目改动会比较大,想创建一个分支,在此分支上修改(目的是改动如果比较大,不想影响原来主干上的分支) 首先打开我们的项目存放的文件:右 ...

  4. SVG的动态之美-搜狗地铁图重构散记

    搜狗地图发布了新版的移动端地铁图,改版初衷是为了用户交互体验的提升以及性能的改善.原版地铁图被用户吐槽最多的是pinch缩放不流畅.无过渡动画.拖拽边界不合理等等,大体上都是交互体验上的问题.实际上原 ...

  5. 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间

    [源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...

  6. [原创]gerrit上分支操作记录(创建分支、删除分支)

    Git分支对于一个项目的代码管理而言,是十分重要的! 许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉. 在此,我将自己的一些操作经历做一梳理,希望能帮助到 ...

  7. 11_Eclipse中演示Git版本的创建,历史版本的修改,创建分支,合并历史版本和当前版本

     1 执行以下案例: 某研发团队2011年初开发了一款名为Apollo的信息系统,目前已发布v1.0版本.此项目初期已有部分基础代码, 研发团队再此基础代码上经过3个月的努力发布了一个功能相对完备 ...

  8. Gerrit上分支操作记录(创建分支、删除分支)

    Git分支对于一个项目的代码管理而言,是十分重要的!许多久用git的朋友可能已经掌握的很牢固了,但对于一些初涉git的童鞋来说,可能还不是很熟悉.在此,我将自己的一些操作经历做一梳理,希望能帮助到有用 ...

  9. 使用git命令创建分支到团队项目

    背景 在我们的团队中,我作为管理者,创建了一个叫HelloWorld的项目,大家各自在本地进行开发,将自己的工作贡献到我们的团队项目中.为了便于审核,我希望大家先将自己的贡献先放在属于自己的一个分支上 ...

随机推荐

  1. c# 自定义含有标题的容器控件(标题背景为渐变色)

    1.控件效果图 此效果图中的标题颜色.字号及字体可以在控件属性中设置.标题背景的渐变色及布局内容的背景色也可以在属性中设置. 2.实现的代码(用户控件) public partial class Uc ...

  2. VScode配置CMD本地运行环境(2.0)

    VScode配置CMD本地运行环境(2.0) 官方Task.json说明 完整的Task.json配置信息 Task.json预定义变量 看了很多网上的教程都说需要下载VScode的python插件, ...

  3. C++技法杂记

    C++ 技法杂技杂记 1. 枚举 1.1 枚举继承(Enum Inheritance) struct Enum{ enum{ One = 1, Two, Last }; }; struct EnumD ...

  4. 一起了解 .Net Foundation 项目 No.22

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Windows Templ ...

  5. OpenCV-Python 对极几何 | 五十一

    目标 在本节中 我们将学习多视图几何的基础知识 我们将了解什么是极点,极线,极线约束等. 基础概念 当我们使用针孔相机拍摄图像时,我们失去了重要信息,即图像深度. 或者图像中的每个点距相机多远,因为它 ...

  6. 使用TensorFlow v2.0构建卷积神经网络

    使用TensorFlow v2.0构建卷积神经网络. 这个例子使用低级方法来更好地理解构建卷积神经网络和训练过程背后的所有机制. CNN 概述 MNIST 数据集概述 此示例使用手写数字的MNIST数 ...

  7. pycharm 2.7 快捷键

    提示 CTRL Q: 在参数列表位置,显示可以输入的所有参数 CTRL Q: 查看选中方法的文档字符串 阅读 CTRL -: 折叠当前代码 CTRL +: 展开当前代码 CTRL SHIFT -: 折 ...

  8. Redis这些知识你知道吗?

    1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Redis的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库 ...

  9. opentsdb探索之路——部分设计与实现

    opentsdb 概览(overview) opentsdb 存储细节(Writing) rowkey的设计 rowkey的具体实现 压缩(compaction) 追加模式(appends) open ...

  10. what the fuck!(二分查找 / 暴力模拟)

    what the fuck! Description 现在有一家公司有nnn个员工(nnn为奇数),他们的工资发放是基本工资+提成,现在这家公司计划再招一批人.要写一篇招聘启事,但是对于这个招聘启事中 ...