Forked from puzzler10's block: Moving Rectangle
forked from henryjameslau's block: Trade Balances
license: mit |
Forked from puzzler10's block: Moving Rectangle
forked from henryjameslau's block: Trade Balances
<!DOCTYPE html> | |
<html> | |
<head> | |
<style> | |
</style> | |
</head> | |
<body> | |
Import <input type = "range" min = "25" max = "75" value = "50" id = "imports" > <br> | |
Export <input type = "range" min = "25" max = "75" value = "50" id = "exports" ><br> | |
<div id="tings"></div> | |
<div id="graphic"></div> | |
Import change <input type = "range" min = "-10" max = "10" value = "0" id = "importchange" ><br> | |
Export change <input type = "range" min = "-10" max = "10" value = "0" id = "exportchange" > | |
<div id="tings2"></div> | |
<script type="text/javascript" src="http://mbostock.github.com/d3/d3.js"></script> | |
<script> | |
// A program that moves around a rectangle using sliders | |
//starting values of rectangle | |
var svg_width = 500 | |
var svg_height = 550 | |
d3.select("#imports").on("input", tradebalance); | |
d3.select("#exports").on("input", tradebalance); | |
d3.select("#importchange").on("input", tradebalance); | |
d3.select("#exportchange").on("input", tradebalance); | |
var svg = d3.select("#graphic").append("svg") | |
.attr("width", svg_width) | |
.attr("height", svg_height); | |
svg.append("rect") | |
.attr("id","importbox") | |
svg.append("rect") | |
.attr("id","exportbox") | |
svg.append("path") | |
.attr("id","beam") | |
svg.append("circle") | |
.attr("cx",svg_width/2) | |
.attr("cy",svg_height/2+10) | |
.attr("r",10) | |
svg.append("text") | |
.attr("id","importtext") | |
.attr("x",10) | |
.attr("y",svg_height/2-20) | |
.text("Imports") | |
.style("fill","grey") | |
svg.append("text") | |
.attr("id","exporttext") | |
.attr("x",svg_width-125) | |
.attr("y",svg_height/2-20) | |
.text("Exports") | |
.style("fill","grey") | |
svg.append("text") | |
.attr("id","itis") | |
.attr("x", svg_width/2) | |
.attr("y", svg_height/4) | |
.attr("text-anchor","middle") | |
.attr("font-weight",700) | |
.attr("font-size","18px") | |
tradebalance(); | |
function tradebalance(){ | |
imports = d3.select("#imports").property("value") | |
exports = d3.select("#exports").property("value") | |
tradebalance=exports-imports | |
d3.select("#tings").selectAll("*").remove() | |
d3.select("#tings2").selectAll("*").remove() | |
// d3.select("body").append("div").attr("id","tings") | |
// d3.select("#tings").append("p").text("Imports are "+ d3.format(".1f")(imports)) | |
// d3.select("#tings").append("p").text("Exports are "+ d3.format(".1f")(exports)) | |
d3.select("#tings").append("p").text("Trade balance is "+ d3.format(".1f")(tradebalance)) | |
importrate = d3.select("#importchange").property("value") | |
exportrate = d3.select("#exportchange").property("value") | |
newimports = imports * ((d3.select("#importchange").property("value")/100)+1) | |
newexports = exports * ((d3.select("#exportchange").property("value")/100)+1) | |
d3.select("#tings2").append("p").text("Imports changed by "+ importrate +"%") | |
d3.select("#tings2").append("p").text("Exports changed by " +exportrate+"%" ) | |
newtradebalance = newexports - newimports | |
d3.select("#tings2").append("p").text("New trade balance is "+ d3.format(".1f")(newtradebalance)) | |
d3.select("#importbox") | |
.transition() | |
.attr("x",0) | |
.attr("y",svg_height/2-newtradebalance*3) | |
.attr("height",newimports) | |
.attr("width",newimports) | |
.style("fill","steelblue"); | |
d3.select("#exportbox") | |
.transition() | |
.attr("x",svg_width-newexports) | |
.attr("y",svg_height/2+newtradebalance*3) | |
.attr("height",newexports) | |
.attr("width",newexports) | |
.style("fill","orange"); | |
d3.select("#importtext").transition() | |
.attr("y",-20+svg_height/2-newtradebalance*3) | |
.text("Imports are "+d3.format(".1f")(newimports)) | |
d3.select("#exporttext").transition() | |
.attr("y",-20+svg_height/2+newtradebalance*3) | |
.text("Exports are "+d3.format(".1f")(newexports)) | |
var lineData = [ { "x": newimports/2, "y": svg_height/2-newtradebalance*3}, { "x": svg_width-exports/2, "y": svg_height/2+newtradebalance*3}]; | |
var lineFunction = d3.svg.line() | |
.x(function(d) { return d.x; }) | |
.y(function(d) { return d.y; }) | |
.interpolate("linear"); | |
d3.select("#beam") | |
.transition() | |
.attr("d", lineFunction(lineData)) | |
.attr("stroke", "lightgrey") | |
.attr("stroke-width", 2) | |
.attr("fill", "none"); | |
d3.select("#itis") | |
.transition() | |
.text(function(){ | |
if(newtradebalance>0){return "Trade Surplus"} | |
else if(newtradebalance<0){return "Trade Deficit"} | |
else{return ""}}) | |
} | |
</script> | |
</body> | |
</html> | |