gpt4 book ai didi

javascript - addEventListener (经典 dom svg-elment) 和 .on (at d3js) 之间的区别在哪里

转载 作者:行者123 更新时间:2023-11-28 03:08:12 25 4
gpt4 key购买 nike

我遇到了 context-event 及其参数的问题。

我的网站使用以下版本来附加事件:

此方法用于简单的图形元素,这些元素在从数据库加载后获取事件:

        const graph = editor.append("g")
.attr("id", "a" + graphic.Id.toString())
.html(graphic.SvgString)
.on("mouseover", graphicMouseOver)
.on("mouseout", graphicMouseOut)
.on("mousedown", graphicMouseDown)
.on("contextmenu", onGraphicContext)
.call(d3.drag()
.on("start", graphicDragStart)
.on("drag", graphicDragging)
.on("end", graphicDragEnd));

然后我对某种符号有不同的方法,加载到我的编辑器:

        const g = editor.append("g")
.attr("transform", "translate(" + symbol.SymbolPosition + ")")
.attr("id", subFunctionId.toString())
.attr("class", "draggable preview")
.attr("pointer-events", "fill")
.call(d3.drag()
.on("start", symbolDragStart)
.on("drag", symbolDragging)
.on("end", symbolDragEnd)
);

根据某些情况,我稍后会在这些“符号”上附加一些事件:

function addSymbolEvents(svgSymbols) {
log.debug("addSymbolEvents");
for (var i = 0; i < svgSymbols.length; i++) {
svgSymbols[i].addEventListener('mouseenter', symbolMouseEnter);
svgSymbols[i].addEventListener('mouseover', symbolMouseOver);
svgSymbols[i].addEventListener('mouseout', symbolMouseOut);

svgSymbols[i].addEventListener('pointerdown', symbolMouseDown);
svgSymbols[i].addEventListener('dblclick', symbolDblClick);
svgSymbols[i].addEventListener('contextmenu', symbolRightClick);
}
return svgSymbols;
}

如果我按以下方式记录事件参数,我会得到 undefinedonGraphicContext以及 symbolRightClick 上的完整 MouseEvent 对象

function onGraphicContext(evt) {
console.log("onGraphicContext", evt);
}

function symbolRightClick(evt) {
console.log("symbolRightClick", evt);
}

这里有什么区别?不是 d3.js- .on -属性与 addEventListener 相同?

谢谢卡斯滕

最佳答案

selection.on() 是 D3 方法,而不是 native JavaScript。在内部,selection.on() 使用 addEventListener,如 source code 中所示。 。

但是,selection.on() 不仅仅是addEventListener 的包装器。作为API说,当您使用 selection.on() 附加监听器时,该监听器...

...will be evaluated for the element, being passed the current datum (d), the current index (i), and the current group (nodes), with this as the current DOM element (nodes[i])

因此,对于 D3 程序员来说,selection.on() 比仅使用普通 addEventListener 更方便。

关于javascript - addEventListener (经典 dom svg-elment) 和 .on (at d3js) 之间的区别在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60414831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com