d3实现折叠式组织结构图效果代码
代码语言:html
所属分类:图表
代码描述:d3实现折叠式组织结构图效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/font-awesome-4.7.0/css/font-awesome.min.css">
<style>
*{
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
position: relative;
}
.link {
fill: none;
stroke: #ccc;
stroke-width: 1px;
}
.sliderZoom input[type=range] {
-webkit-appearance: none;
width: 100%;
margin: 6px 0;
}
.sliderZoom input[type=range]:focus {
outline: none;
}
.sliderZoom input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 1px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
.sliderZoom input[type=range]::-webkit-slider-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 0.2px solid #000000;
height: 15px;
width: 6px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
-webkit-appearance: none;
margin-top: -6.2px;
}
.sliderZoom input[type=range]:focus::-webkit-slider-runnable-track {
background: #629fd2;
}
.sliderZoom input[type=range]::-moz-range-track {
width: 100%;
height: 3px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
.sliderZoom input[type=range]::-moz-range-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 0.2px solid #000000;
height: 15px;
width: 6px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
}
.sliderZoom input[type=range]::-ms-track {
width: 100%;
height: 3px;
cursor: pointer;
background: transparent;
border-color: transparent;
color: transparent;
}
.sliderZoom input[type=range]::-ms-fill-lower {
background: #1c4162;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
.sliderZoom input[type=range]::-ms-fill-upper {
background: #3071a9;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
.sliderZoom input[type=range]::-ms-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 0.2px solid #000000;
height: 15px;
width: 6px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
height: 3px;
}
.sliderZoom input[type=range]:focus::-ms-fill-lower {
background: #3071a9;
}
.sliderZoom input[type=range]:focus::-ms-fill-upper {
background: #629fd2;
}
.sliderZoom{
width:20%;
float:right;
z-index: 1000;
transition:opacity 0.3s ease;
opacity:.3;
}
.sliderZoom:hover{
opacity:1;
}
rect.rectangulo-hijos.hover{
transform: rotate(6deg);
}
rect.rectangulo-hijos{
transform: rotate(2deg);
transition: transform .3s ease;
}
rect.rectangulo-hijos2.hover{
transform: rotate(-6deg);
}
rect.rectangulo-hijos2{
transform: rotate(-2deg);
transition: transform .3s ease;
}
rect.rectangulo-texto.hover{
fill:#f7f7f7;
}
.activo rect.barra-enlaces {
fill:#6F9FBB;
}
.cuadro-nodo-enlaces {
display: block;
width: 10vw;
max-height: 15px;
max-width: 150px;
}
.enlaces-nodo{
min-width: 100px;
display: block;
height: auto;
position: relative;
text-align: center;
font-size: 11px;
background-color: white;
border: 1px solid lightgrey;
border-radius: 4px;
opacity: 1;
}
.cuadro-nodo-enlaces a{
opacity: 1;
margin:0 3px;
color:0.8;
}
.cuadro-nodo-texto {
position: fixed;
width: 10vw;
max-width: 150px;
display: block;
transform: translate(-50%, 0);
}
.texto-nodo {
min-width: 100px;
display: block;
height: auto;
position: relative;
text-align: center;
font-size: 11px;
background-color: white;
border: 1px solid lightgrey;
border-radius: 4px;
opacity: 1;
}
.cuadro-nodo-texto .fa-info-circle {
position: absolute;
top:-7px;
left:48%;
color:#bbb;
z-index:100000;
cursor: pointer;
}
.cf:before,
.cf:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.cf:after {
clear: both;
}
/**
* For IE 6/7 only
* Include this rule to trigger hasLayout and contain floats.
*/
.cf {
*zoom: 1;
border:1px dotted #eee;
}
/* Generic styling */
</style>
</head>
<body >
<div class="sliderZoom"></div>
<figure class="org-chart cf">
</figure>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/d3.v3.js"></script>
<script >
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
function generarImagen() {
var html = d3.select("svg")
.attr("title", "test")
.attr("version", 1.1)
.attr("xmlns", "http://www.w3.org/2000/svg")
.node().parentNode.innerHTML;
$(".preview").html("<img src=data:image/svg+xml;base64," + btoa(unescape(encodeURIComponent(html))) + ">");
/* d3.select(".centro").append("div")
.attr("id", "download")
.html("Right-click on this preview and choose Save as<br />Left-Click to dismiss<br />")
.append("img")
.attr("src", "data:image/svg+xml;base64,"+ btoa(unescape(encodeURIComponent(html))));
*/
}
function mouseover(d) {
d3.select(this).select("rect.rectangulo-hijos2").classed("hover", true);
d3.select(this).select("rect.rectangulo-hijos").classed("hover", true);
d3.select(this).select("rect.rectangulo-texto").classed("hover", true);
/* d3.select(this).append("text")
.attr("class", "hover")
.attr('transform', function(d){
return 'translate(5, -10)';
})
.text(d.name + ": " + d.id);*/
}
// Toggle children on click.
function mouseout(d) {
//d3.select(this).select("text.hover").remove();
d3.select(this).select("rect.rectangulo-hijos2").classed("hover", false);
d3.select(this).select("rect.rectangulo-hijos").classed("hover", false);
d3.select(this).select("rect.rectangulo-texto").classed("hover", false);
}
function collapse(d) {
if (d.children) {
d._children = d.children;
d._children.forEach(collapse);
d.children = null;
}
}
function toggleAll(d) {
if (d.children) {
d.children.forEach(toggleAll);
toggle(d);
}
}
function actualizarEventos() {
$(".node a").on("click", function(e) {
window.location = $(this).attr('href');
//e.preventDefault();
e.stopPropagation();
//console.log("enlace");
});
/* $(".node .texto .cuadro-nodo-texto i.fa.fa-info-circle").unbind("click").on("click", function(e){
var cuadroEnlaces=$(this).closest("g").parent().find(".cuadro-nodo-enlaces");
if(cuadroEnlaces.is(':visible')){
cuadroEnlaces.hide()
}else{
cuadroEnlaces.show()
}
//e.preventDefault();
e.stopPropagation();
//console.log("enlace");
});*/
}
function getDepth(obj) {
var depth = 0;
if (obj.children) {
obj.children.forEach(function(d) {
var tmpDepth = getDepth(d)
if (tmpDepth > depth) {
depth = tmpDepth
}
})
}
return 1 + depth
}
function wrap(text, width) {
text.each(function() {
var text = d3.select(this),
words = text.text().split(/\s+/).reverse(),
word,
line = [],
lineNumber = 0,
lineHeight = 1.2, // ems
x = text.attr("x"),
y = text.attr("y"),
dy = text.attr("dy") ? text.attr("dy") : 0;
tspan = text.text(null).append("tspan").attr("x", x).attr("y", y).attr("dy", dy + "em");
while (word = words.pop()) {
line.push(word);
tspan.text(line.join(" "));
var centradox = x + (width - tspan.node().getComputedTextLength()) / 2;
if (tspan.node().getComputedTextLength() > width) {
line.pop();
tspan.text(line.join(" "));
line = [word];
tspan = text.append("tspan").attr("x", x).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word);
}
}
});
}
var _queryTreeSort = function(options) {
var cfi, e, i, id, o, pid, rfi, ri, thisid, _i, _j, _len, _len1, _ref, _ref1;
id = options.id || "id";
pid = options.parentid || "parentid";
ri = [];
rfi = {};
cfi = {};
o = [];
_ref = options.q;
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
e = _ref[i];
rfi[e[id]] = i;
if (cfi[e[pid]] == null) {
cfi[e[pid]] = [];
}
cfi[e[pid]].push(options.q[i][id]);
}
_ref1 = options.q;
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
e = _ref1[_j];
if (rfi[e[pid]] == null) {
ri.push(e[id]);
}
}
while (ri.length) {
thisid = ri.splice(0, 1);
o.push(options.q[rfi[thisid]]);
if (cfi[thi.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0