加载多个具有类似源代码的D3映射
Load multiple D3 maps with similar source code
我制作了一张D3地图,突出显示了本州哪些县投票选举了新州长。我想用与我的州长地图相同的代码为另一个政治种族建立一个类似的地图。我复制了调控器映射代码,并为另一场比赛修改了它,更改了geojson文件和svg的位置。我把另一个种族的代码放在一个外部JS文件中,并把它放在我的index.html中的调速器JS文件下面。现在,根据哪个文件首先加载到我的.html文件中,一个地图将显示,而另一个则显示为白色。有没有办法让两个代码都不同到可以让地图同时出现?
您似乎正在写入全局命名空间(在您的情况下,是window
对象)。
当您通过d3发出json请求时,json文件将异步加载,这意味着您的javascript代码的其余部分将继续运行。这也意味着,第二个加载的文件将覆盖您刚刚声明的所有变量,并且在处理json请求时,变量(由第一个脚本声明的)已经被第二个脚本覆盖,因此每次加载json时,您基本上都在向同一DOM元素写入。
如果您想要快速修复,您可以将每个脚本封装在一个函数中,并将其称为onload
或使用DOMContentLoaded或jquery,但由于它们非常相似,您可以只使用一个函数,例如:
function createPoliticalMap(elementID, jsonUrl){
// your code...
//...
var svg = d3.select(elementID).append("svg")
//...
d3.json(jsonUrl,function(error,geodata) {
//...
}
}
然后就这么做:
createPoliticalMap('#map-gov', 'data/gov.geojson');
createPoliticalMap('#map-ag', 'data/ag.geojson');
或者,您可以利用JavaScript的面向对象功能来定义一个类似于的"类"
function PoliticalMap(elementID, jsonUrl){
// define your stuff and make the json request based off of the parameters.
}
做:
var govMap = new PoliticalMap('#map-gov', 'data/gov.geojson');
var agMap = new PoliticalMap('#map-ag', 'data/ag.geojson');
如果您希望能够在创建后操作D3图。
然后添加更多的政治地图就变得微不足道了,如果你愿意,你可以更容易地将代码包含在其他页面中。
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 如何在d3.js中返回路径的y坐标
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 使用D3.js计算带有字母间距的文本长度
- d3中堆栈函数和嵌套函数之间的差异
- 活动选项卡's源代码-获取变量s值
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 在D3插件sankey.js和html代码之间定义源代码
- 像 d3 这样的项目如何将所有源代码放入一个大的 JavaScript 文件中
- 理解 d3.js 源代码:停留在 function.call() 和 “=+”
- 此插图 D3 的源代码.js
- 加载多个具有类似源代码的D3映射
- 如何理解d3中的'零填充右移' (' >>> ').平分线的源代码
- 如何理解' d3.min() '源代码中的' f(array[i], i, array) '
- 为什么要把D3源代码复制到Angular服务中呢?