gpt4 book ai didi

javascript - SVG 中的内嵌文本编辑

转载 作者:行者123 更新时间:2023-12-03 02:48:21 28 4
gpt4 key购买 nike

我在网站中渲染内联 SVG,并且必须允许用户以所见即所得的方式添加和修改该 SVG 中的文本。基本上我需要类似 svg-edit 的东西。但是,我不需要完全所见即所得的编辑器,而只需要内联文本编辑部分。我查看了 svg-edit 的源代码,似乎很难只提取其中的那部分。

所以我正在寻找一种简单的方法(也许使用第三方库)来实现内联 SVG 文本编辑。我已经考虑过在聚焦时将 SVG 文本替换为 HTML 文本输入,但在编辑模式下,文本的渲染必须与生成的 SVG 中的渲染完全相同。

最佳答案

我制作了一个 fiddle ,无论您在 SVG 中单击什么位置,它都会创建可编辑的文本。最后一步是获取 HTML 文本并将其放入 SVG 元素中。

http://jsfiddle.net/brx3xm59/

代码如下:

var mousedownonelement = false;

window.getlocalmousecoord = function (svg, evt) {
var pt = svg.createSVGPoint();
pt.x = evt.clientX;
pt.y = evt.clientY;
var localpoint = pt.matrixTransform(svg.getScreenCTM().inverse());
localpoint.x = Math.round(localpoint.x);
localpoint.y = Math.round(localpoint.y);
return localpoint;
};

window.createtext = function (localpoint, svg) {
var myforeign = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject')
var textdiv = document.createElement("div");
var textnode = document.createTextNode("Click to edit");
textdiv.appendChild(textnode);
textdiv.setAttribute("contentEditable", "true");
textdiv.setAttribute("width", "auto");
myforeign.setAttribute("width", "100%");
myforeign.setAttribute("height", "100%");
myforeign.classList.add("foreign"); //to make div fit text
textdiv.classList.add("insideforeign"); //to make div fit text
textdiv.addEventListener("mousedown", elementMousedown, false);
myforeign.setAttributeNS(null, "transform", "translate(" + localpoint.x + " " + localpoint.y + ")");
svg.appendChild(myforeign);
myforeign.appendChild(textdiv);

};

function elementMousedown(evt) {
mousedownonelement = true;
}


$(('#thesvg')).click(function (evt) {
var svg = document.getElementById('thesvg');
var localpoint = getlocalmousecoord(svg, evt);
if (!mousedownonelement) {
createtext(localpoint, svg);
} else {
mousedownonelement = false;
}
});

关于javascript - SVG 中的内嵌文本编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308938/

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