将d3.js与jquery函数调用结合起来
Combine d3.js with jquery function call
这个问题的动机是基于我之前关于绘制散点图和词云的问题。Jason Davies的wordcloud不知何故对我不起作用,所以我用纯jQuery wordcloud - jQCloud代替了它。
应用程序的目的保持不变。当我越过散点图上的点时,应该会出现词云。我有两个问题:
- 当页面加载时,我应该在点上进行两次渲染wordcloud。我不知道为什么。
- 在当前设置中,当
mouseout
事件被调用时,字云不会隐藏。如何修复?
任何想法都很感激。代码粘贴在下面,也粘贴在JSFiddle上。
$(document).ready(function() {
var data = [[5,3,[{'text':'word1','weight':4},{'text':'word2','weight':10}]],
[3,5,[{'text':'word3','weight':5},{'text':'word4','weight':4}]],
[1,4,[{'text':'word1','weight':3},{'text':'word2','weight':5},{'text':'word3','weight':2}]],
[2,3,[{'text':'word2','weight':1},{'text':'word3','weight':5}]]];
var margin = {top: 20, right: 15, bottom: 60, left: 60},
width = 500 - margin.left - margin.right,
height = 250 - margin.top - margin.bottom;
var x = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d[0]; })])
.range([ 0, width ]);
var y = d3.scale.linear()
.domain([0, d3.max(data, function(d) { return d[1]; })])
.range([ height, 0 ]);
var chart = d3.select('body')
.append('svg:svg')
.attr('width', width + margin.right + margin.left)
.attr('height', height + margin.top + margin.bottom)
.attr('class', 'chart')
var main = chart.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
.attr('width', width)
.attr('height', height)
.attr('class', 'main')
// Draw the x axis
var xAxis = d3.svg.axis()
.scale(x)
.orient('bottom');
main.append('g')
.attr('transform', 'translate(0,' + height + ')')
.attr('class', 'main axis date')
.call(xAxis);
// draw the y axis
var yAxis = d3.svg.axis()
.scale(y)
.orient('left');
main.append('g')
.attr('transform', 'translate(0,0)')
.attr('class', 'main axis date')
.call(yAxis);
var g = main.append("svg:g");
var circle = g.selectAll("scatter-dots")
.data(data)
.enter().append("svg:circle")
.attr("cx", function (d,i) { return x(d[0]); } )
.attr("cy", function (d) { return y(d[1]); } )
.attr("r", 5);
// FUNCTION TO DISPLAY WORDCLOUD
circle.on('mouseover', function(d){
div.style("display", "block")
$("#my_words").jQCloud('update',d[2]);
});
circle.on('mouseout', function(){
div.style("display", "none")
div.select("svg").remove();
});
var div = d3.select("body")
.append("div")
.style("display", "none");
});
-
您正在使用jCloud的"更新"功能,我无法找到相关文档。如果你只在云已经被填充时才调用'update',一切都很好:
var cloudInitialized = false; // FUNCTION TO DISPLAY WORDCLOUD circle.on('mouseover', function(d){ d3.selectAll("#my_words span").style("display", "inline"); if (cloudInitialized) $("#my_words").jQCloud("update", d[2]); else $("#my_words").jQCloud(d[2]); cloudInitialized = true; });
-
你在代码中隐藏了一个不同的div(一种工具提示,而不是wordcloud)
工作的例子:https://jsfiddle.net/povrp9sk/10/
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- HTML5(Bootstrap)通过函数调用运行动画
- 将d3.js与jquery函数调用结合起来
- 结合_.记住和_.节流以限制函数调用,并在一个时间窗口内缓存结果