React 中使用鼠标滚轮缩放图像

2023-11-29

所以我正在尝试重制这个版本(取自并修改自这个帖子)在 React 中使用鼠标滚轮进行图像缩放。

问题是,即使在 React 中使用相同的数学和逻辑,它也不能完美地工作,我不知道为什么。图像似乎没有在光标所在的位置缩放。

这是我的组件:

import React, { useState } from "react";

export default () => {
  const [pos, setPos] = useState({ x: 0, y: 0, scale: 1 });

  const onScroll = (e) => {
    const delta = e.deltaY * -0.01;
    const newScale = pos.scale + delta;

    const ratio = 1 - newScale / pos.scale;

    setPos({
      scale: newScale,
      x: pos.x + (e.clientX - pos.x) * ratio,
      y: pos.y + (e.clientY - pos.y) * ratio,
    });
  };

  return (
    <div onWheelCapture={onScroll}>
      <img
        src="https://source.unsplash.com/random/300x300?sky"
        style={{
          transformOrigin: "0 0",
          transform: `scale(${pos.scale}) translate(${pos.x}px, ${pos.y}px)`,
        }}
      />
    </div>
  );
};

我做了一个CodeSandbox:https://codesandbox.io/s/lingering-breeze-ho4do?file=/src/App.js

当光标位于图像右下角时尝试缩放,您会看到问题。


抱歉,请仔细阅读您的问题。问题是变换顺序很重要。您需要交换比例和变换(https://codesandbox.io/s/wonderful-cerf-69doe?file=/src/App.js)。祝你的项目好运

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

React 中使用鼠标滚轮缩放图像 的相关文章

  • 正则表达式中的“g”标志是什么意思?

    的含义是什么g正则表达式中的标志 之间有什么区别 g and g用于全局搜索 这意味着它将匹配所有出现的情况 通常你还会看到i这意味着忽略大小写 参考 全局 JavaScript MDN https developer mozilla or
  • 无法填充名为“status”的数组

    我正在尝试做一些非常简单的事情 在 Javascript 中初始化一个数组 而且它在 Google Chrome 中不起作用 这是代码 status for i 0 i lt 8 i status i false alert status
  • Webpack 缺少 CommonsChunk 和 extract-text-webpack-plugin 模块

    我正在跟进Maxime Fabre 的 Webpack 教程 https blog madewithlove be post webpack your bags 我正在尝试获得一个非常简单的 webpack 包 其中包含 1 个入口点和 2
  • 使用 requirejs 加载外部脚本而无需访问配置

    我正在尝试在我正在编写的插件中加载数据表 javascript 库 问题是 当我加载外部资源时 我会遇到冲突 因为当我调用 require 时 数据表与某些内容发生冲突 这是错
  • Google Charts(AreaChart)如何检测缩放变化

    我正在画一个面积图 在覆盖层上有一些标记 我正在使用explorer选项 仅限水平 以便用户放大和缩小 问题是我找不到一种方法来通知缩放更改 以便有机会更新制造商位置 有一个图表范围变化事件 但它不是由 AreaChart 触发的 我尝试检
  • 夜间值班。单击带有文本的元素

    我遇到问题 无法单击具有某些独特文本的网页元素 我有这样的结构 div class wg wagon type title Text div 我试试这个 click wg wagon type title contains Text 但我有
  • 卸载/销毁 Angular 延迟加载组件

    我的设置与此处找到的帖子类似http ify io lazy loading in angularjs http ify io lazy loading in angularjs 处理 Angular 中我的应用程序的各种组件的延迟加载 我
  • canvas.getContext('2D') 返回空值

    我创建了一个画布并将其命名为getContext 方法 但它返回null为上下文 这是我使用的代码 我在控制台中得到了这个
  • 如何将当前元素传递给 Knockout.js 绑定中的 Javascript 函数?

    因此 我尝试根据是否选中子复选框 使用 Knockout js 将类添加到元素 为此 我试图通过this作为我的函数的参数 目前 我的精简 DOM 结构如下 tr td td tr
  • ReferenceError 和全局对象

    在浏览器中的 JavaScript 中window是全局对象 这意味着在全局范围内定义的每个变量都是window 那么为什么我会得到这个结果 console log window foo No error logs undefined co
  • 如何在 JavaScript 中对关联数组进行排序?

    我需要为我的一个项目通过 JS 对关联数组进行排序 我发现这个函数在 Firefox 中运行得很好 但不幸的是它在 IE8 OPERA CHROME 中不起作用 无法找到使其在其他浏览器中运行的方法 或者找到另一个适合该目的的函数 我真的很
  • 如何使用 Jest 测试对象键和值的相等性?

    我有一个mapModule我在其中导入组件并导出它们 import ComponentName from components ComponentName export default name ComponentName 我该如何测试ma
  • Angular 2访问组件内的ng-内容

    我怎样才能访问 content 来自组件类本身的组件 我想做这样的事情
  • 跨浏览器:禁用输入字段的不同行为(文本可以/不能复制)

    我有一个被禁用的输入 html 字段 在某些浏览器 Chrome Edge Internet Explorer 和 Opera 中可以选择并复制文本 但至少在 Firefox 中这是不可能的 您可以通过在不同浏览器中执行以下代码来测试
  • 在 JSP 或 Javascript 中清除浏览器缓存中的图像

    我正在为一所大学开发JSP Web 应用程序 用户页面中显示人员图片 用户注销后如何从网络浏览器缓存中清除这张图片 使用 JSP 或 JavaScript 那是不可能的 最好的选择是完全禁用相关资源的缓存 创建一个filter https
  • 使用 JavaScript onclick 添加表格行

    我正在尝试使用 javascript 添加下面找到的完全相同的元素 我已经尝试了这里找到的所有解决方案 我什至尝试用php echo但没有运气 无需更改任何输入名称或类似内容 只需单击该按钮即可向表中添加另一行 仅此而已 这是该元素 tr
  • 如何设置 Firebase 用户的显示名称?

    根据Firebase网站上的JS Auth文档 它只展示了如何获取 displayName 以及如何更新 displayName 所以我尝试更新它 但这有点不合逻辑 因为你怎么能在不创建某些东西的情况下更新它呢 所以我的问题是 如何设置注册
  • Apollo 客户端延迟刷新

    In Apollo Client v3React 实现 我使用钩子来使用订阅 当我从订阅接收数据时 我想重新获取查询 但前提是查询之前已执行过并且位于缓存中 有办法实现这一点吗 我首先进行惰性查询 然后在收到订阅数据时手动检查缓存 然后尝试
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • NodeJS:如何获取服务器的端口?

    您经常会看到 Node 的示例 hello world 代码 它创建一个 Http Server 开始侦听端口 然后执行以下操作 console log Server is listening on port 8000 但理想情况下你会想要

随机推荐

  • 如何使用带通配符的 AzureSearch

    我想搜索名称为 14009 00080300 的字段 并且希望仅搜索其中的一部分 例如 14009 000803 时获得命中 使用这段代码我没有得到任何点击 search 14009 000803 count true top 10 有没有
  • SharedSecrets机制是如何工作的?

    jdk internal misc SharedSecrets自我描述为 共享秘密 的存储库 这是一种机制 调用另一个包中的实现私有方法而不需要 使用反射 包私有类实现了一个公共类 接口并提供调用包私有方法的能力 在该包内 实现该接口的对象
  • Visual Studio Express 2012 for Desktop 中没有 Metro 项目模板?

    两个下载页面桌面版 and 对于 Windows 8提供相同的 Web 安装程序 名为 Visual Studio Express 2012 for Windows Desktop 我安装了它 这是它的 新项目 窗口 In 本教程页面 它说
  • 如何使用 Accessstoken 通过图 api 向 Facebook 好友发送消息

    任何人都可以帮助我使用 graph api 向 Facebook 好友发送消息 I tried response facebook gt call api me feed post to john message You have a Te
  • Visual Studio:如何显示从基类继承的所有类?

    在 Visual Studio 中 如何显示从基类继承的所有类 例如 在 ASP NET MVC 中有几个 动作结果 类型 它们都继承 实现基类ActionResult 看起来除非你只是 知道 View and Json有效ActionRe
  • GZip 压缩在 IIS 7.5 上不起作用

    我试图在 IIS 下支持静态文件的 GZip 压缩 默认情况下应该启用 但没有 但到目前为止还没有工作 这是下面的部分
  • 如何在 Java 中通过引用传递可变参数

    我正在编写一个方法 该方法接收任意数量的参数并返回修改后的参数 我尝试过使用 varargs 但它不起作用 在这里您可以看到代码的简化版本 public static void main String args String hello h
  • 为 Flexbox 列表设置固定间距

    i noticed that on my firefox the distance between the bottom of the website and the list for links terms about is really
  • 这是聚合吗?

    我有以下代码 public static void main String args Engine engine new Engine This Engine Car b new Car engine b null 这是聚合吗 我一直认为聚
  • pgrep -P,但对于孙子而不仅仅是孩子

    我在用 pgrep P 获取 的子进程 pid 但我实际上也想要一份孙子和曾孙的名单 我该怎么做呢 例如 使用常规编程语言 我们会使用递归来做到这一点 但是使用 bash 呢 也许使用 bash 函数 我已经发布了尝试解决方案 它简短而有效
  • uwp InkCanvas 将斯托克斯保存为 svg

    我正在尝试将 InkCanvas InkStorkes 保存为 SVG 我发现之前的一个问题适用于 Wpf 但我无法让它与 uwp 一起使用 Wpf InkCanvas 将斯托克斯保存为 svg 我对其进行了一些更改 但遇到了 GetGro
  • 如何将 simulink 文件转换为 XML

    我需要将 Simulink 文件 mdl 转换为 XML 文件 经过任何搜索后 我没有找到任何内容来帮助我解决此问题 您知道 Java 中的某种方法或现成的解决方案吗 从 R2008b 开始 您可以使用以下命令将 mdl 文件导出到 xml
  • Angular 表单 - 访问子组件模板中的 FormArray

    我有一个需要几个组件FormControls and FormArrays 作为输入 我正在访问FormControl来自子组件的 s 如下所示 formControl control 这工作得很好 但我找不到一种方法来做同样的事情Form
  • 将 dd/mm/yy 和 dd/mm/yyyy 转换为日期

    我有一些字符向量 其中包含各种格式的日期 如下所示 dates lt c 23 11 12 20 10 2012 22 10 2012 23 11 12 我想将它们转换为日期 我已经尝试了 lubridate 包中非常好的 dmy 但这不起
  • 手动对整数列表进行排序

    我对编程还很陌生 我只学习了几个星期的Python 最近有人给我一个练习 要求我生成一个整数列表 然后在单独的列表中手动将数字从最低到最高排序 import random unordered list range 10 ordered lo
  • 虚拟 COM 端口还是使用原始端点?

    我正在使用 USB 控制器和代码示例在微控制器中开发软件来实现虚拟 COM 端口 它的实现是一个来回传输数据的设备 我正在考虑使用 2 个批量端点 在我的计算机中使用 libusb 来读取和写入它们 虚拟 COM 的优点是不需要 libus
  • 通过 Outlook 在 R 中发送电子邮件 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何在 R 中通过 Outlook 发送电子邮件 所有的例子sendmailR使用 Gmail 服务器 但我不能这样做 您可以使用RDCOMClient包从 R 中访问 COM
  • SQL Server LocalDB 实例无法启动(自动)

    我有一个 WPF 应用程序连接到 SQL Server 2014 Express LocalDB 即本地数据库 mdf数据库文件 该应用程序使用 Entity Framework Core 库版本 7 0 0 rc1 final 这是我正在
  • JsonConstructor 在 IEnumerable 属性上失败?

    因此 使用访问器设置可枚举效果非常好 public class SetEnumerableWithAccessor public IEnumerable
  • React 中使用鼠标滚轮缩放图像

    所以我正在尝试重制这个版本 取自并修改自这个帖子 在 React 中使用鼠标滚轮进行图像缩放 问题是 即使在 React 中使用相同的数学和逻辑 它也不能完美地工作 我不知道为什么 图像似乎没有在光标所在的位置缩放 这是我的组件 impor
Powered by Hwhale