当前位置: 首页 > 知识库问答 >
问题:

D3。js:使用元素位置而不是鼠标位置来定位工具提示?

唐焕
2023-03-14

我用D3画了一个散点图。我想在用户将鼠标移到每个圆上时显示工具提示。

我的问题是我可以附加工具提示,但它们是使用鼠标事件d3定位的。事件第X页和第d3页。事件pageY,因此它们在每个圆上的位置不一致。

取而代之的是,有些稍微偏左,有些偏右——这取决于用户的鼠标如何进入圆圈。

这是我的代码:

circles
  .on("mouseover", function(d) {         
    tooltip.html(d)  
      .style("left", (d3.event.pageX) + "px")     
      .style("top", (d3.event.pageY - 28) + "px");    
  })                  
  .on("mouseout", function(d) {       
    tooltip.transition().duration(500).style("opacity", 0);   
  });

JSFiddle是否显示了问题:http://jsfiddle.net/WLYUY/5/

是否有某种方法可以使用圆心本身作为定位工具提示的位置,而不是鼠标位置?

共有3个答案

彭炳
2023-03-14

根据我的经验,最简单的解决办法如下:

首先,getBoundingClientRect()获取元素的位置。

然后,使用window.pageYOffset调整高度,相对于你所在的位置。

例如。

.on('mouseover', function(d) {
    let pos = d3.select(this).node().getBoundingClientRect();
    d3.select('#tooltip')
        .style('left', `${pos['x']}px`)
        .style('top', `${(window.pageYOffset  + pos['y'] - 100)}px`);
})

在上面的例子中,我不使用X的偏移量,因为我们很少需要这样做(除非您水平滚动)。

添加window.pageYOffsetpos['y']将为我们提供当前鼠标位置(无论我们在页面上的任何位置)。我减去100,把工具提示放在它上面一点。

贾烨
2023-03-14

在这里找到了一些即使

.on("mouseover", function(d) {
    var matrix = this.getScreenCTM()
        .translate(+ this.getAttribute("cx"), + this.getAttribute("cy"));
    tooltip.html(d)
        .style("left", (window.pageXOffset + matrix.e + 15) + "px")
        .style("top", (window.pageYOffset + matrix.f - 30) + "px");
})

羊舌胡非
2023-03-14

在特定情况下,您只需使用d定位工具提示,即。

tooltip.html(d)  
  .style("left", d + "px")     
  .style("top", d + "px");

为了使这更一般,您可以选择鼠标悬停的元素并获取其坐标来定位工具提示,即。

tooltip.html(d)  
  .style("left", d3.select(this).attr("cx") + "px")     
  .style("top", d3.select(this).attr("cy") + "px");
 类似资料:
  • 问题内容: 有没有一种方法可以获取鼠标的位置并将其设置为var? 问题答案: 您可以设置一个回调来响应事件: 我不确定您想要哪种变量。在上面,我设置了局部变量并设置了鼠标坐标。 如果创建类方法,则可以设置实例属性和鼠标坐标,然后可以从其他类方法访问它们。

  • 问题内容: 我想使用画布制作一个绘画应用程序。所以我需要找到鼠标在画布上的位置。 问题答案: 对于使用JQuery的人: 有时,当您拥有嵌套元素时,其中一个元素会附加事件,这可能会使您难以理解浏览器将其视为父级。在这里,您可以指定哪个父级。 您采用鼠标位置,然后从父元素的偏移位置中减去它。 如果要在滚动窗格内的页面上获取鼠标位置: 或相对于页面的位置: 请注意以下性能优化: 这样,JQuery不必

  • 问题内容: 我正在尝试使用Jinput打印出鼠标位置: 这是我的InputManager,它在初始化时扫描所有输入设备,并将所有鼠标分离到单独的列表中: x和y的打印信息始终为0。我在Windows 10上运行此程序,是否会引起任何问题?如何使用Jinput从鼠标获取鼠标数据? 问题答案: JInput处于较低级别,您正在混淆窗口指针和鼠标。鼠标只是相对轴> 2的设备。每次轮询后或在每个事件中的值

  • 问题内容: 我想在Java中模拟鼠标的自然运动(从此处逐像素移动)。为此,我需要知道起始坐标。 我找到了方法event.getX()和event.getY(),但是我需要一个事件… 我如何不做任何事情(或看不见的事情)就知道职位? 谢谢 问题答案: MouseInfo.getPointerInfo()。getLocation()可能会有所帮助。它返回与当前鼠标位置相对应的Point对象。

  • 问题内容: 我希望每t毫秒定期跟踪一次鼠标光标的位置。因此,从本质上讲,当页面加载时- 该跟踪器应该启动,并且每(例如)每100毫秒启动一次,我应该获取posX和posY的新值并以表格形式打印出来。 我尝试了以下代码-但值没有刷新-表单框中仅显示posX和posY的初始值。关于如何启动和运行它的任何想法? 问题答案: 在事件处理程序接收到的对象上报告鼠标的位置,您可以将其附加到窗口(事件冒泡):

  • 问题内容: 我想创建一个以动态宽度和高度为中心的弹出框。我曾经为此。没有它,则水平居中,但不能垂直居中。添加后,它甚至没有水平居中。 这是完整的设置: 如何使用CSS在屏幕上将此框居中? 问题答案: 基本上,您需要设置div 并将其居中放置在div的左上角。您还需要将和设置为div的高度和宽度的负一半,以将中心移到div的中间。 因此,在提供(标准模式)的情况下,此操作应: 或者,如果你不关心垂直