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 按钮缩放实现表现得很奇怪 的相关文章

  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • 将 Regex 对象分配给 html 输入模式

    我需要以编程方式将正则表达式对象分配给输入元素模式属性 以下是我当前的实现 var regex d 5 element attr pattern regex toString slice 1 1 有没有更好的方法来做到这一点而不需要字符串操
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • Javascript 进程是否有多个执行线程?

    背景 我正在创建一个 地址簿 类型的应用程序 有很多条目需要加载 一个想法是首先加载一小部分条目 让用户开始 然后将剩余条目排队 优先考虑用户单击的条目 例如 如果他们单击以 X 开头的名称 请先加载这些名称 然后再处理队列的其余部分 这个
  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • 如何在React Native的MapView中设置标记

    我想在React Native中的MapView上设置一个标记 但是通过官方文档找不到任何信息MapView https facebook github io react native docs mapview html content 如
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • Chrome --app 相当于 Firefox\IE

    我有一个网络应用程序 客户要求单击不同按钮时更改浏览器窗口大小 我发现在那link https stackoverflow com questions 13436855 launch google chrome from the comma
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • 为什么 call 比 apply 快那么多?

    我想知道是否有人知道why call比apply 在 Chrome 中 速度大约快 4 倍 在 Firefox 中快 30 倍 我什至可以制作自定义原型 apply2 在大多数情况下 运行速度是apply 这个想法取自角度 Function
  • 在反应中访问回调内的 event.target

    我有以下课程片段 constructor props super props this timeout null search e gt clearTimeout this timeout this timeout setTimeout f
  • javascript - 如何获取对象名称或关联数组索引名称?

    我有一个像这样的 JSON 对象 var list name1 element1 value1 name2 element1 value2 如何提取所有 nameX 字符串值 例如 假设我想将它们连接在一个字符串中输出 例如 name1 n
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • 如何解决“消息端口在收到响应之前已关闭”的问题。在 JavaScript 中的 window.location.reload() 之后

    我遇到了 javascript 问题 从 chrome v73 0 3683 86 开始 每当我在 window location reload 函数之后运行 javascript 代码时 它总是给我错误 Unchecked runtime
  • 如何在 React Native 中使用相同的 Firebase 数据库在两个应用程序之间进行通信?

    我有两个不同的应用程序使用相同的实时数据库 在第一个应用程序中 我发送的订单包含一些要保存在数据库中的数据字段 在另一个应用程序中 我只添加一个侦听器 firebase database ref userOrder currentUser
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len

随机推荐

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