JSFiddle - React, Tailwind, and code Playground
HTML
<!DOCTYPE html>
<html>
<head>
<script src="http://d3js.org/d3.v2.js?2.9.1"></script>
<script type="text/javascript" src="http://x3dom.org/x3dom/example/x3dom.js"></script>
</head>
<body>
<script type="text/javascript">
(function() {
// D3.layout.force3d.js
// (C) 2012 ziggy.jonsson.nyc@gmail.com
// BSD license (http://opensource.org/licenses/BSD-3-Clause)
d3.layout.force3d = function() {
var forceXY = d3.layout.force()
,forceZ = d3.layout.force()
,zNodes = {}
,zLinks = {}
,nodeID = 1
,linkID = 1
,tickFunction = Object
var force3d = {}
Object.keys(forceXY).forEach(function(d) {
force3d[d] = function() {
var result = forceXY[d].apply(this,arguments)
if (d !="nodes" && d!="links") forceZ[d].apply(this,arguments)
return (result == forceXY) ? force3d : result
}
})
force3d.on = function(name,fn) {
tickFunction = fn
return force3d
}
forceXY.on("tick",function() {
// Refresh zNodes add new, delete removed
var _zNodes = {}
forceXY.nodes().forEach(function(d,i) {
if (!d.id) d.id = nodeID++
_zNodes[d.id] = zNodes[d.id] || {x:d.z,px:d.z,py:d.z,y:d.z,id:d.id}
d.z = _zNodes[d.id].x
})
zNodes = _zNodes
// Refresh zLinks add new, delete removed
var _zLinks = {}
forceXY.links().forEach(function(d) {
var nytt = false
if (!d.linkID) { d.linkID = linkID++;nytt=true}
_zLinks[d.linkID] = zLinks[d.linkID] || {target:zNodes[d.target.id],source:zNodes[d.source.id]}
})
zLinks = _zLinks
// Update the nodes/links in forceZ
forceZ.nodes(d3.values(zNodes))
forceZ.links(d3.values(zLinks))
forceZ.start() // Need to kick forceZ so we don't lose the update mechanism
// And run the user defined function, if...