рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдбреА 3 рдФрд░
рдереНрд░реАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрди рдЪреБрдХреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рд░реЛрдЪрдХ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рддреАрди рдЖрдпрд╛рдореА рджреГрд╢реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдЧрд╛, рдЗрд╕ рд╕рд░рд▓ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:
рдкреИрд░ рдХрд╣рд╛рдБ рд╕реЗ рдмрдврд╝рддреЗ рд╣реИрдВ?
рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рд╣рдо
рдХреЛрдбрдСрд░реНрдХреЗрд╕реНрдЯреНрд░рд╛ рдореЗрдВ рдПрдХ
рдПрдПрд╕ 3 / рдбреАрдПрд╕рдПрд▓ рдХреЛрдбрдирд╛рдо "рдбреА 6" (рдбреА 3 + 3 рдбреА рд╕реЗ) рдкрд░ рдПрдХ рдбреА 3 рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдкреЛрд░реНрдЯ рдиреЗ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдбреА 3 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдПрд╕ 3 "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдкрд░ рд▓реЛрдХрдкреНрд░рд┐рдп 3 рдбреА рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рдо D6 рдХреЛ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рдП рд╣реИрдВ, 3 рдбреА рдХреЗ рд▓рд┐рдП рдбреА 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдиреЗ рд╣рдорд╛рд░реЗ рджрд┐рдорд╛рдЧ рдХреЛ рдХрднреА рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк
рдбреА 3 рдЧреИрд▓рд░реА рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рдПрдХ рднреА рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдбреА 3 рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЛрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдЯреНрдпреВрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдордирдорд╛рдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕реЗ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдЖрдЗрдП
рдбреА 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХреЗ
рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ (рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЛ рдбреА 3 [
1 ] рдФрд░ [
2 ] рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд╛рда рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ):
d3.select(".chart") .selectAll() .data(data) .enter().append("div") .style("width", function(d) { return d * 10 + "px"; });
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдбреА 3 рддрд░реАрдХреЗ рдореИрдЬрд┐рдХ рдбреЛрдо-рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рдЬреИрд╕реЗ
.chart
рдЪрдпрдирдХрд░реНрддрд╛ рдпрд╛
div
рдЯреИрдЧ рдирд╛рдо) рдХреЛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдВрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВред рдпреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирдореВрдиреЛрдВ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдЬреИрд╕реА рдЙрдмрд╛рдК рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВред рд╣рдо рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ:
function newDiv() { return document.createElement("div"); } var chart = { appendChild: function (child) {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ 1) рдбреА 3 рдХреЛ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдХрд┐
div
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ 2) рдбреА 3 рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ рдХрд┐ рд╣рдорд╛рд░рд╛ рдЪрд╛рд░реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ
рдмрддрдЦ рд╣реИ ред рд╣рд╛рд▓рд╛рдБрдХрд┐,
рд╣рдорд╛рд░реЗ рдХреЛрдб рдХрд╛
рдкрд░рд┐рдгрд╛рдо рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред
рддреЛ 3 рдбреА рдХрд╛ рдХреНрдпрд╛?
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ 3 рдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдЖрдЬ рддреАрди.js рд╣реИред рдпрджрд┐ рд╣рдо рдбреА 3 рдбреА рдореЗрдВ 3 рдбреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдбреА 3 рдХреЛ рддреАрди-рдЖрдпрд╛рдореА рддреАрди.рдЬреЗрдПрд╕ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЪрдпрди рдХреЗ рд╕рд╛рде рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Object3D рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
рдпрд╣
рд╕рдмрд╕реЗ рд╕рд░рд▓ рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
function newBar () { return new THREE.Mesh( geometry, material ); } chart3d = new THREE.Object3D();
рдХреНрдпрд╛ рд╡рд╣ рд╕рдм рд╣реИ?
рдмрд┐рд▓рдХреБрд▓ рдирд╣реАрдВред рдбреА 3 рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг - рд╣рдореЗрдВ рдЕрдкрдиреА рдЪрд╛рд▓ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рддрд╛рдХрд┐ рдбреА 3 "рд╡рд┐рд╢реЗрд╖рддрд╛" рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░ рд╕рдХреЗ, рд╣рдореЗрдВ get3 рдХреЛ рдмрд╛рдВрдЯрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ 3 рдкреНрд░реЛрдЯреЗрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
THREE.Object3D.prototype.getAttribute = function (name) { var chain = name.split('.'); var object = this; for (var i = 0; i < chain.length - 1; i++) { object = object[chain[i]]; } return object[chain[chain.length - 1]]; }
рджреВрд╕рд░реЗ, selectAll () рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрджреНрдпрддрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ Object3D рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЗ рдЪрдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
THREE.Object3D.prototype.querySelectorAll = function (selector) { var matches = []; var type = eval(selector); for (var i = 0; i < this.children.length; i++) { var child = this.children[i]; if (child instanceof type) { matches.push(child); } } return matches; }
рд╣рдорд╛рд░реЗ рд╕реНрддрдВрднреЛрдВ рдХреЛ рдиреГрддреНрдп рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП , рдЕрдм рдХреЗрд╡рд▓ рд╕рдордп-рд╕рдордп рдкрд░ рдбреЗрдЯрд╛ рдмрджрд▓рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
var N = 9, v = 30, data = d3.range(9).map(next); function next () { return (v = ~~Math.max(10, Math.min(90, v + 20 * (Math.random() - .5)))); } setInterval(function () { data.shift(); data.push(next()); update(); }, 1500); function update () {
рддреЛ, рддреАрди рдХреЗ рд╕рд╛рде рдбреА 3 рдмрд╛рдБрдзрдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддред рдЬреЗрдПрд╕ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдбреА 3 рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ 3 рдбреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЪрдпрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред Remove3hild рд╡рд┐рдзрд┐ Object3D рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
THREE.Object3D.prototype.removeChild = function (c) { this.remove(c); }
рдпрджрд┐ рдЖрдкрдиреЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛рдиреЗ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреНрдпреЛрдВ?
рдбреА 3 рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдЖрд╕рд╛рди рд╣реИ - рд╣рдЯрд╛рдиреЗ () рд╡рд┐рдзрд┐ рдЪрдпрди рдХреЗ рдкреИрд░реЗрдВрдЯреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рддрддреНрдХрд╛рд▓ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ appendChild рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ():
THREE.Object3D.prototype.appendChild = function (c) { this.add(c);
рдкрд░рд┐рдгрд╛рдо
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ
рдРрд╕реА рд╕реБрдВрджрд░рддрд╛ рдорд┐рд▓реА:
var N = 9, t = 123, v = 30, data = d3.range(9).map(next); function next () { return { time: ++t, value: v = ~~Math.max(10, Math.min(90, v + 20 * (Math.random() - .5))) }; } function update () {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбреА 3 рдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдереЛрдбрд╝реА рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдереНрд░реА.рдЬреЗрдПрд╕ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреА рддрд╛рдХрдд рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рдо рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдордВрдЬрд╕реНрдпрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдорд╛рд░реНрдЧ рдЦреЛрд▓ рджрд┐рдпрд╛ рд╣реИред