d3.js V4 按钮缩放实现表现得很奇怪

2024-05-04

我正在尝试实现 d3 平移和缩放功能。默认的平移和缩放工作正常,但要求是我们还需要放大和缩小按钮。我还实现了缩放按钮,它也有效。奇怪的是,当我第一次移动图像并单击缩放按钮时,图像会移回到以前的位置,不仅是当我第一次用鼠标缩放并使用按钮再次开始缩放时,图像会缩小到默认值并开始缩放再次。如何设法从从鼠标事件转移到按钮单击事件的位置开始缩放。

let imgHeight = 400,
  imgWidth = 900,
  width = 900,
  height = 450;

let zoom = d3.zoom().scaleExtent([1, 8]).on("zoom", zoomed);

let svg = d3.select("#canvas").append("svg")
  .attr("width", width + "px")
  .attr("height", height + "px");

svg = svg.append("g")
  .attr("transform", "translate(0,25)")
  .call(zoom)
  .append("g");

svg.append("image")
  .attr("width", imgWidth + "px")
  .attr("height", imgHeight + "px")
  .attr("href", "https://www.w3schools.com/howto/img_fjords.jpg");

function zoomed() {
  svg.attr("transform", d3.event.transform);
}

let zoomIn = d3.select("#zoom-in");

zoomIn.on("click", function() {
  zoom.scaleBy(svg.transition().duration(750), 1.2);
})
<div id='canvas'>
</div>
<div id="tools">
  <button id="zoom-in">
    +
  </button>
</div>
<script src="https://d3js.org/d3.v4.min.js"></script>

您在两个不同的“g”元素上调用缩放,您只需附加一次,只需删除第二个附加即可。

svg = svg.append("g")
  .attr("transform", "translate(0,25)")
  .call(zoom)

这就是您遇到此问题的原因,缩放功能正在应用于嵌套元素

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3.js V4 按钮缩放实现表现得很奇怪 的相关文章

随机推荐

  • MongoDB BasicDBObject 与 Java 中的文档

    我正在使用 MongoDB v3 2 0 和 Mongo Java Driver 3 0 4 版本 我正在使用BasicDBObject 已弃用 而不是使用Document在 java 中 因为我需要在独立的 java 项目中进行许多更改才
  • 无参数行为的 C 函数

    有人可以向我解释为什么下面的代码编译时没有警告或错误吗 我希望编译器警告我该函数no args不期望任何争论 但代码编译并运行功能no args递归地 static void has args int a int b int c print
  • DeprecationWarning:移动应用程序时的功能(删除标题栏)-PySide6

    当我移动应用程序时 我收到此警告 C Qt Login Test main py 48 DeprecationWarning Function globalPos const is marked as deprecated please c
  • 在 C# 中是否存在用于将 List 元素向左或向右移动指定量的代码?

    在 C 中是否存在用于将 List 元素向左或向右移动指定量的代码 这是很棘手的代码 需要一些时间来编写和测试特殊情况 我宁愿 重用某些东西 如果存在 Thanks 像这样的左移 public static void ShiftLeft
  • 如何使用柯里化函数删除事件监听器

    我很难删除事件侦听器类型柯里化函数 I register first at some time I want to remove using freezeHighlight but it doesn t working without cu
  • 如何向 hr 标签添加一些文本?

    我试图在 hr 标签末尾添加一些文本 但到目前为止我还没有设法让它正常工作 我期待有一行 顶部有一些文字到最后 你可以在这里看到我的小提琴http jsfiddle net 2BHYr http jsfiddle net 2BHYr Edi
  • iOS Facebook 应用邀请:错误

    我必须在我的 iOS 应用程序中实现 Facebook 邀请 我正在关注以下参考链接 https developers facebook com docs app invites ios https developers facebook
  • 如何用 NumPy 求解齐次线性方程?

    如果我有这样的齐次线性方程 array 0 75 0 25 0 25 0 25 1 1 0 0 1 0 1 0 1 0 0 1 我想得到它的非零解 怎样才能做到NumPy http en wikipedia org wiki NumPy E
  • 无法以管理员身份更改 Windows 10 中的系统变量路径

    我正在 Windows 10 计算机中安装 Java JDK 需要通过在 Windows 设置中编辑系统变量来注册其路径 但我以管理员和普通用户身份尝试过 但它不允许我添加路径 甚至复制粘贴或仅添加任何角色 在 Win 8 中执行此操作没有
  • PHP 与 MySQL 中的资源 id #6 错误

    我这是为了我正在制作的投票系统 此代码向用户显示了他们可以从中选择的问题列表 div class main questions p class style1 style2 strong Select Your Question strong
  • 如何处理 Lollipop 5.1 上的快速滚动?

    背景 我制作了一个小型库 它展示了如何模仿 Android Lollipop 的股票联系人应用程序的风格 here https github com AndroidDeveloperLB ListViewVariants 问题 看来在And
  • 使用 xclip 将剪贴板内容粘贴到 bash 中的变量中

    我知道这个命令会将剪贴板内容粘贴到文件中 xclip out selection clipboard gt gt file txt 如果我想将剪贴板内容粘贴到变量 如字符串 中 我该怎么办 要将命令的输出分配给变量 可以使用命令替换 myv
  • .attr('disabled', 'disabled') 或 .attr('disabled', true) 用于禁用输入

    Both attr disabled disabled and attr disabled true 在我的代码中工作 但我只是想知道 两者中哪一个更有效和 或哪一个更常用 真的有区别吗 也许是性能方面 应该没有什么区别 但从 jQuery
  • WebRTC 暂停和恢复流

    我正在尝试使用 WebRTC 构建一个 Web 应用程序 当某些事件触发时需要暂停 恢复视频 音频流 我已经尝试过getTracks 0 stop 但我不知道如何恢复流 对此有什么建议吗 谢谢 getTracks 0 stop 是永久的 U
  • 如何避免在 std::pair 中“隐式”调用单参数构造函数

    最初的问题是如何与std map
  • 使用 SAML 2.0 进行 Scala Play Web 应用程序的 SSO

    我正在构建一个 scala play Web 应用程序 我需要使用支持 SAML v2 0 的 IdP 构建 SSO 功能 除了 SSO 之外 我还需要根据从 IdP 收到的角色 作为身份验证断言消息的属性 在应用程序内构建授权机制 我是
  • 为什么“not(True) in [False, True]”返回 False?

    如果我这样做 gt gt gt False in False True True 那返回True 仅仅是因为False在列表中 但如果我这样做 gt gt gt not True in False True False 那返回False 然
  • Golang 中的“相互”包导入

    是否可以在 Golang 中执行 相互 包导入之类的操作 举例来说 我有两个包 A 和 B 分别具有 AFunc 和 BFunc BFunc2 函数 package A import B func AFunc do stuff but al
  • 保存 Mongoose 文档时出现版本错误

    我有一个问题 不确定我是否做错了什么或者这是一个错误 我有一些产品 每一种都有一系列的变体 我想浏览一些数据并以这些变体加载它 但我遇到了许多 版本错误 找不到匹配的文档 错误 认为我遇到了竞争条件 我为我修改的每个变体依次保存相同的文档
  • d3.js V4 按钮缩放实现表现得很奇怪

    我正在尝试实现 d3 平移和缩放功能 默认的平移和缩放工作正常 但要求是我们还需要放大和缩小按钮 我还实现了缩放按钮 它也有效 奇怪的是 当我第一次移动图像并单击缩放按钮时 图像会移回到以前的位置 不仅是当我第一次用鼠标缩放并使用按钮再次开