DOM中的新SVG元素,通过JavaScript添加,直到鼠标up才呈现

New SVG elements in DOM, added through JavaScript, not rendered until mouseup

本文关键字:鼠标 up 添加 JavaScript SVG 通过 元素 DOM      更新时间:2023-09-26

纯JavaScript(没有JQuery, D3或其他外部库)。我正在拖动看起来像矩形列的SVG对象。它们在矩形之间有连接线,当我将一个矩形拖到另一个矩形上时,我将从DOM中删除所有元素,检查列中的每个矩形是否对应于相邻列中的矩形,如果该条件为真,则在它们之间绘制新的连接线。在控制台中,我可以看到元素是立即创建的,但是直到我松开鼠标并停止拖动它们才呈现出来。因为我可能会拖过多个列,并且需要在决定放到哪里之前比较每个位置的结果,所以我不仅需要立即创建新元素,还需要立即呈现新元素,而不是在释放鼠标之前被阻塞。

[编辑:为了回应对"不显示研究"的反对,请注意以下(原始)段落。]尝试了我能找到的所有建议,明确地提到了最常见的建议。也许我的研究方法不成熟;你能不能给点建议,以便我下次能做得更好?)

根据本网站和其他地方的建议,我尝试从DOM中添加和删除一个元素,并切换各种元素的显示属性,但没有成功。

示例文件位于https://github.com/obdurodon/drag。要运行,克隆并在浏览器中打开textual_correspondence_static_sample/test.xhtml(从文件系统中,这样它就可以找到链接到的CSS和JavaScript文件)。抓住列顶部的拖动图标并向左或向右拖动。连接线只在下降时重新绘制,但我需要它们在每次交叉后立即重新绘制(我会担心稍后在鼠标移动时拉伸它们)。

我认为原因是因为你在endMove()(在你的drawLines()调用之后)中给线条一个笔画颜色。但在swapColumns()函数中不是这样做的。SVG中的新元素默认没有描边