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




