You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox中React+d3-geo投影缩放至最大时卡顿问题排查

Firefox中D3-Geo投影在最大缩放级别下旋转/缩放卡顿问题

我正在开发React + D3的项目,核心使用d3-geo包处理地图投影。相关代码如下:

投影定义

const projectionFunction = d3[projectionName] || d3GeoProjection[projectionName]; 
let projection = projectionFunction().reflectX(true).clipAngle(90); 

useLayoutEffect(() => { 
  projection.scale(projection.scale() * scale); 
}, [scale, projection]);

缩放事件处理

通过d3.zoom实现缩放,修改scale状态同步投影缩放:

const zoomed = useCallback(function zoomed(e) {
  const { k } = e.transform;
  setScale(k);
}, []);

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

拖拽旋转处理

通过d3.drag实现投影旋转:

function onDrag(e) {
  setRotation((cur) => {
    return [cur[0] - e.dx / (6 * scale), cur[1] - e.dy / (6 * scale)]; // 6用于降低旋转速度
  });
}

问题现象

代码在Chrome和Edge中运行流畅,但仅在Firefox中,当缩放至最大级别(scale=8,投影scale同步乘以8)时,旋转和缩放操作异常卡顿。

性能分析对比

  • 拖动旋转时,Chrome的函数调用无明显延迟;Firefox的函数调用间隔约50ms,全程存在该延迟。
  • scale=1(完全缩小)时,Firefox函数调用无延迟,运行流畅。
  • scale≈4(半缩放)时,Firefox开始出现轻微延迟,但程度远小于最大缩放状态。

疑问

是否存在Firefox与D3交互的特殊问题?另外如果需要调整标签或更换发布渠道也请告知,我可以提供更多信息。

内容的提问来源于stack exchange,提问作者trumanf_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:40:15