javascript - D3JS 如何将数据发送到事件中
问题描述
我对在 D3JS 中发送数据的理解不清楚,希望有人能向我解释一下。首先,我将展示我的代码,然后我将向您展示我的问题。
d3.dsv(';','files/d3.csv').then(function(data){
var s_w = 600;
var s_h = 500;
var svg2 = d3.select('.font_tem_export_content_3')
.append('svg')
.attr('width',s_w)
.attr('height',s_h);
///bars
var gg2 = svg2.append('g')
.attr('transform','translate(60,'+30+')')
gg2.selectAll('.d3_bars')
.data(data)
.enter()
.append('rect')
.attr('x',function(d){
return x_scale3(d.year);
})
.attr('y',function(d){
return y_scale3(d.value);
})
.attr('width', x_scale3.bandwidth())
.on('mouseover',onMouseOver);
});
function onMouseOver(d,i){
console.log(d);
}
然后,当我将鼠标移入那些“rect”元素时,我得到了结果:
{stt:“9”,姓名:“I”,年龄:“18”,性别:“nữ”,年份:“2018”,...}
就个人而言,我不知道为什么函数onMouseOver
在外面d3.dsv(';','files/d3.csv').then(function(data){}
,他们仍然可以获得它们的价值(var d
in function)。此外,它们是如何存储在客户端屏幕中的?(我没有在 html 代码中看到任何数据)。有人介意帮助我吗。
解决方案
- d3.selection.on(type[, listener[, capture]]) 为当前选择中的每个元素添加一个事件监听器
- D3 调用侦听器的方式与调用其他 D3 运算符函数的方式相同——通过将当前数据“d”、索引“i”和“this”上下文作为当前 DOM 元素传递
- 注意 D3 允许您利用捕获阶段与冒泡阶段事件触发器
- d3.event 在事件发生时捕获事件并将其存储在变量 d3.event 中
- d3.event 变量是一个全局变量,可以在使用 d3.selection.on 操作符注册的事件监听回调函数中使用
- JavaScript 回调函数完成运行后,当前的 d3.event 变量被重置
- 您可以通过将 JavaScript 空对象作为 eventListener 类型的函数传递来“删除”事件侦听器
推荐阅读
- javascript - ResponsiveVoice - 避免将 API 密钥硬编码到 index.html
- java - 在光束变换内循环。使用 Apache Beam 按顺序处理
- cakephp - Cakephp 4 命名约定策略单数/复数
- javascript - 如何为 GOOGLE ANALYTICS 4 设置 Google Opt Out Cookie - 不是通用的 - 新的 ga4
- mediawiki - 如何使用 Wikipedia 的 API 搜索标题和内容中的术语
- python - 如何使用 django 视图中所需的注销之类的东西?
- dart - Dart:如何迭代整数的数字?
- database - 为什么要使用异步数据库连接?
- python - 在 Python 的 if 语句中创建值数组
- lorawan - 单通道 LoRaWAN 系统地接受节点发送的 3 个数据包中的一个