【发布时间】:2019-04-07 23:02:53
【问题描述】:
我在这里有一个 CSS4 颜色关键字在 HSL 空间中分布的 SVG 可视化:https://meyerweb.com/eric/css/colors/hsl-dist.html
我最近添加了通过鼠标滚轮进行缩放,并通过鼠标咔嗒声和拖动进行平移。感谢我在网上找到的示例代码,我可以使用matrixTransform、.getScreenCTM() 和.inverse() 将点从屏幕空间转换为 SVG 坐标空间,但是如何在拖动过程中转换鼠标移动?现在我只是将viewBox 坐标移动了event 的X 和Y 值,这意味着放大时图像拖动比鼠标移动更快。
例如,假设我放大了图像并拖动以平移,我将鼠标向左并略微向下猛拉。 event.movementX 返回 -37 和 event.movementY 返回 6。如何确定 SVG 坐标中的距离,以便正确移动 viewBox 坐标?
(注意:我知道有一些库可以处理这类事情,但我有意编写香草 JS 代码以了解有关 SVG 和 JS 的更多信息。所以,请不要发布“lol just use library X”并留下它。谢谢!)
编辑添加:我被要求发布代码。发布整个 JS 似乎过长,但这是在 mousemove 事件上触发的函数:
function dragger(event) {
var target = document.getElementById('color-wheel');
var coords = parseViewBox(target);
coords.x -= event.movementX;
coords.y -= event.movementY;
changeViewBox(target,coords);
}
如果需要更多,请在链接页面上查看源代码;所有的 JS 都在页面的顶部。除了只包含可视化的所有 HSL 值和颜色名称的文件之外,没有什么是外部的。
【问题讨论】:
-
嗨,埃里克。这是您可以直接添加到帖子中的代码量吗?
-
我不确定其中有多少是相关的,但我会添加我认为需要修改的功能。
标签: javascript svg matrix