无法使D3的 .on('mouseover', ...) 生效

7

我正在学习D3,尝试通过悬停在SVG圆上来显示散点图上的数据信息。我从CSV文件中获取数据(数据是关于太阳系的行星名称、质量和半径),所有圆圈都正确显示,但当我尝试在mouseover时console.log数据信息(例如质量)时,它没有输出任何内容。mouseover操作正常工作,但控制台告诉我请求的值为“undefined”。 我弄错了什么?这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>

    <style type="text/css">
    body{
        background-color: black;
    }
    #chart{
        background-color: black;
        width: 800px;
        height: 500px;
        border: solid 1px white;
    }
    svg{
        background-color: white;
    }
    .dot{
        stroke: red;
        stroke-width: 1px;
    }
    </style>
    
    <script type="text/javascript" src="https://d3js.org/d3.v6.min.js"></script>
</head>

<body>

    <div id="chart"></div>

    <script type="text/javascript">
        var width = 800;
        var height = 500;
        var circles;
        var svg = d3.select('#chart')
                .append('svg')
                .attr('width', width + 'px')
                .attr('height', height + 'px');

        d3.csv('astro.csv').then(function(data){

            xScale = d3.scaleLinear()
                .domain([0,500])
                .range([0, 800]);

            circles = svg.selectAll('.dot')
                .data(data)
                .enter()   
                .append('circle')
                .attr('class', '.dot')
                .attr('cx', function(d){
                    return xScale(d.mass);
                })
                .attr('cy', 100)
                .attr('r', 20)
                .on('mouseover', function(d){
                    console.log(d.mass);
                })                
        });
    </script>
</body>
</html>
1个回答

12
自从D3 V6版本以后,所有的鼠标事件处理程序的第一个参数都将是事件(event),第二个参数将是数据(data)。在V5版本或更早的版本中,您的代码将能够正常工作。 V6或更高版本:
.on('mouseover', (event, d) => console.log(d.mass));

V5或更早版本:
.on('mouseover', d => console.log(d.mass));

1
千真万确。 - NickC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接