D3 Click 坐标相对于页面而非 SVG,如何进行转换(Chrome 错误)

当使用 D3.js 创建 SVG 点击事件时,您可能会注意到 click 事件返回的坐标是相对于整个页面而不是 SVG 元素本身的。这可能会导致错误的结果或无法按预期工作。

这是因为在 Chrome 中,SVG 标签上的 getBoundingClientRect() 方法返回值的 top 和 left 属性是相对于视口而非 SVG 元素本身的。因此,click 事件中的坐标也是相对于视口的。

解决这个问题的方法是,您需要将页面坐标转换为 SVG 坐标。以下是一个例子:

----- --- - -----------------
----- ---- - -----------------------------------
----- - - ------------- - ----------
----- - - ------------- - ---------

在此示例中,我们首先获取 SVG 元素的 DOM 节点,并使用 getBoundingClientRect() 获取其位置和大小。然后,我们通过从 click 事件的 clientXclientY 属性中减去 SVG 元素的左上角位置来计算出 click 事件的 x 和 y 坐标。这样就可以得到相对于 SVG 元素的坐标。

如果您在处理鼠标滚轮事件时遇到相同的问题,还需要进行一些额外的步骤来将页面中心转换为 SVG 中心。以下是一个示例:

----- --- - -----------------
----- ---- - -----------------------------------
----- - - ------------- - --------- - ---------- - --
----- - - ------------- - -------- - ----------- - --

在此示例中,我们首先将页面坐标转换为相对于 SVG 元素的坐标,然后从 SVG 元素的宽度和高度的一半中减去相应的值以得到相对于 SVG 中心的坐标。

希望这些代码可以帮助您解决 D3.js 中 click 和鼠标滚轮事件的坐标问题。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/30014


猜你喜欢

  • 在 HTML Canvas 上禁用右键菜单

    HTML Canvas 是一个强大的前端技术,允许你在网页上绘制图形、做动画和创建游戏。但有时我们可能想禁止用户使用某些功能,比如右键点击显示上下文菜单。本文将介绍如何在 HTML Canvas 上禁...

    6 年前
  • 如何在JavaScript字符串中转义&符号以使页面严格验证?

    在编写 JavaScript 代码时,我们可能会遇到需要在字符串中使用特殊字符的情况。其中一个常见的问题是如何在 JavaScript 字符串中转义 & 符号以便让页面通过严格验证。

    6 年前
  • 更新至 Angular 5

    Angular 是一个流行的前端框架,它为开发人员提供了构建动态 Web 应用程序所需的所有工具。在这篇文章中,我们将探讨如何将 Angular 应用程序从旧版本更新到 Angular 5,以及必要的...

    6 年前
  • JavaScript中的双精度浮点数精度问题

    JavaScript是一种弱类型语言,它使用IEEE 754标准来表示数字,其中包括双精度浮点数。在处理一些需要高精度的计算时,我们可能会遇到由于双精度浮点数精度问题而导致的错误结果。

    6 年前
  • 如何防止 Google Chrome 阻止弹出窗口?

    随着浏览器的不断发展,防止滥用弹出窗口已成为常规做法。Google Chrome 也不例外,它会自动拦截由网页触发的弹出窗口。这在某些情况下可能会导致一些问题。本文将介绍如何在前端代码中防止 Goog...

    6 年前
  • Google Chrome Extension - Script Injections

    Google Chrome扩展程序是一种可以让用户在Chrome浏览器上添加自定义功能和功能的工具。其中一个重要特性是它允许开发者注入脚本以定制页面行为。这篇文章将会介绍如何使用Script Inje...

    6 年前
  • 去除字符串开头和结尾的换行符

    在前端开发中,我们经常需要处理字符串。有时候,我们会遇到字符串开头或结尾存在多余的换行符的情况,这可能会影响我们的程序逻辑和显示效果。本文将介绍如何使用 JavaScript 来去除字符串开头和结尾的...

    6 年前
  • 在特定 UpdatePanel 加载完成后调用客户端 JavaScript 函数的方法

    背景 ASP.NET Web Forms 中的 UpdatePanel 控件是一种使 Ajax 功能更易于实现的方式。通过将控件放置在 UpdatePanel 内,可以使用部分页面刷新技术来更新页面的...

    6 年前
  • Jquery选择器在元素标签名中包含点时无法正常工作

    在前端开发中,JQuery是广泛使用的JavaScript库之一。然而,当我们要使用JQuery选择器来获取特定元素时,可能会遇到一个问题:当元素标签名中包含点(".")时,选择器无法正常工作。

    6 年前
  • 在浏览器上下文菜单中添加选项

    在前端开发中,我们经常需要为用户提供一些便捷的操作,以提高用户体验。添加菜单选项到浏览器上下文菜单可以是一个很好的方式。 什么是浏览器上下文菜单? 浏览器上下文菜单(也称为右键菜单)是在浏览器窗口中右...

    6 年前
  • 将 jQuery 对象转储到警告框中

    在开发前端应用程序时,经常需要使用 jQuery 库来处理 DOM 元素。有时候我们想要查看一个 jQuery 对象的细节信息,比如该对象包含哪些元素或属性等。本文将介绍如何将 jQuery 对象转储...

    6 年前
  • 如何使用 React 存储配置文件并读取

    在前端开发中,存储配置文件是一项非常重要的任务。本文将介绍如何使用 React 存储配置文件,并从中读取所需信息。 配置文件的作用 配置文件是一个包含应用程序设置的文本文件。

    6 年前
  • 使用 JQuery 在不选择当前文本的情况下聚焦输入框

    在前端开发中,经常需要使用 JavaScript 和 JQuery 来操作用户界面。其中一个常见的任务是将焦点集中到输入字段上,以便用户可以立即开始输入。然而,在某些情况下,我们不希望当前文本被选中,...

    6 年前
  • Vue组件属性的默认值及如何检查用户是否设置了属性

    Vue是一个非常流行的JavaScript框架,它提供了一种创建复杂交互式Web应用程序的简便方法。在Vue中,组件是构建应用程序的基本单元。组件可以通过props属性接收来自父组件的数据。

    6 年前
  • 使用 matches 替代回调函数

    在前端开发中,我们经常需要对字符串进行一些操作。其中,替换子字符串是一个常见的需求,通常使用 replace 函数实现。然而,在这个过程中使用回调函数也很常见,但是回调函数可能会让代码更难以阅读和维护...

    6 年前
  • 在 contenteditable div 中替换选中文本

    在前端开发中,经常会有需要用户可以编辑某个区域内的文本内容的需求。而 contenteditable 属性正好可以实现这一功能。但是,当需要对其中选中的文本进行替换时,该如何实现呢?接下来,我们将探讨...

    6 年前
  • 在 JavaScript 中遍历对象数组 - 奇怪的行为?

    在 JavaScript 中,遍历对象数组是一项常见的任务。然而,当你第一次尝试时,你可能会遇到一些奇怪的行为。本文将详细介绍对象数组的遍历方式、奇怪行为的原因以及如何解决这些问题。

    6 年前
  • 使用 JavaScript 设置 Canvas 大小

    在前端开发中,Canvas 是一个非常有用的工具,它可以让我们以编程方式绘制图形和动画。但是,在使用 Canvas 之前,我们需要先设置 Canvas 的大小。在本文中,我们将介绍如何使用 JavaS...

    6 年前
  • 如何注册 document.onkeypress 事件

    在前端开发中,有时候我们需要对用户的键盘输入进行操作和处理,这就需要使用到 document.onkeypress 事件。本文将介绍如何注册该事件以及相关的深入讨论和指导意义。

    6 年前
  • JavaScript数组添加属性

    简介 JavaScript中的数组可以包含任何类型的数据,包括对象、字符串和数字等等。在某些情况下,我们可能需要向一个现有的数组添加属性。这篇文章将介绍如何向JavaScript数组中添加属性。

    6 年前

相关推荐

    暂无文章