You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Firefox中D3地图滚轮缩放报ReferenceError: event is not defined求助

解决D3地图滚轮缩放在Firefox中的ReferenceError: event is not defined问题

这个问题我之前踩过同款坑!根源在于浏览器对全局event对象的支持差异——Chrome允许你直接使用全局的event,但Firefox严格遵循标准,要求你必须从事件处理函数的参数中获取事件实例。

把你的代码改成下面这样就能解决:

.on("wheel.zoom", function(event) { 
  var currScale = projection41039.scale(); 
  var newScale = currScale - 1 * event.deltaY; 
  if (newScale >= 150) { 
    var currTranslate = projection41039.translate(); 
    var coords = projection41039.invert([event.offsetX, event.offsetY]); 
    projection41039.scale(newScale); 
    var newPos = projection41039(coords); 
    projection41039.translate([
      currTranslate[0] + (event.offsetX - newPos[0]), 
      currTranslate[1] + (event.offsetY - newPos[1]) 
    ]); 
    updateContents(); 
  } 
})

关键改动说明:

  • 把事件回调函数从function()改成function(event),明确接收事件参数
  • 代码里所有用到event的地方,现在都指向这个传入的参数,而不是全局对象

另外补充一句:如果你的D3版本是v6及以上,有些场景下可能需要通过event.sourceEvent访问原生事件,但针对你当前的缩放逻辑,上面的改动已经足够让代码在Chrome和Firefox中都正常运行了。

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

火山引擎 最新活动