- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
The html code and how it shows up on the inspector
你好,我开始学习一些网络开发。它一直很顺利,直到我尝试在一个组中动态生成一些 SVG 矩形。但是即使代码显示在检查器上,当我将鼠标悬停在动态生成的矩形代码上时,它也会显示“矩形 0x0”,并且不会在视觉上出现。我搜索了许多其他帖子,但没有找到解决方案。
function getMousePosition(svg, event) {
var CTM = svg.getScreenCTM();
if (event.touches) { event = event.touches[0]; }
return {
x: (event.clientX - CTM.e) / CTM.a,
y: (event.clientY - CTM.f) / CTM.d
};
}
var NS = "http://www.w3.org/2000/svg", elemWidth = 80, elemHeight = 40, slotWidth = 10, slotHeight = 10;
function spawnElem(event){
let svg = event.target;
if(event.which == 3){
let pos = getMousePosition(svg, event)
spawnElemHelper(svg, pos.x, pos.y);
}
}
function spawnElemHelper(svg, x, y){
topLeft = {x: x - elemWidth / 2,
y: y - elemHeight / 2
};
// group = document.createElementNS(NS, 'g');
// group.classList.add('draggable-group');
main = document.createElementNS("http://www.w3.org/2000/svg", 'rect');
main.setAttributeNS(NS, 'x', String(topLeft.x));
main.setAttributeNS(NS, 'y', String(topLeft.y));
main.setAttributeNS(NS, 'width', String(elemWidth));
main.setAttributeNS(NS, 'height', String(elemHeight));
main.setAttributeNS(NS, 'fill', 'blue');
// slotInput = document.createElementNS(NS, 'rect');
// slotInput.classList.add("slot");
// slotInput.setAttributeNS(NS, 'x', String(topLeft.x));
// slotInput.setAttributeNS(NS, 'y', String(topLeft.y + (elemHeight - slotHeight) / 2));
// slotInput.setAttributeNS(NS, 'width', String(slotWidth));
// slotInput.setAttributeNS(NS, 'height', String(slotHeight));
// slotInput.setAttributeNS(NS, 'fill', 'yellow');
// slotOutput = document.createElementNS(NS, 'rect');
// slotOutput.classList.add("slot");
// slotOutput.setAttributeNS(NS, 'x', String(topLeft.x + elemWidth - slotWidth));
// slotOutput.setAttributeNS(NS, 'y', String(topLeft.y + (elemHeight - slotHeight) / 2));
// slotOutput.setAttributeNS(NS, 'width', String(slotWidth));
// slotOutput.setAttributeNS(NS, 'height', String(slotHeight));
// slotOutput.setAttributeNS(NS, 'fill', 'yellow');
// group.appendChild(main);
// group.appendChild(slotInput);
// group.appendChild(slotOutput);
//svg.appendChild(group);
svg.appendChild(main);
}
//var svg is the svg element in the HTML which has the id "canvas"
document.getElementById('canvas').addEventListener('mousedown', spawnElem);
最佳答案
SVG 仅将命名空间用于元素而不是属性。属性位于“空”命名空间中。这对于 XML 来说是典型的(有几种格式都这样做),并且命名空间属性需要使用前缀。
您可以使用 setAttribute()
或 setAttributeNS('', ...)
:
const xmlns_svg = 'http://www.w3.org/2000/svg';
const svg = document.implementation.createDocument(xmlns_svg, 'svg', null);
svg.documentElement.setAttribute('width', '100');
svg.documentElement.setAttribute('height', '100');
const rect = svg.documentElement.appendChild(
svg.createElementNS(xmlns_svg, 'rect')
);
rect.setAttribute('x', '25');
rect.setAttribute('y', '25');
rect.setAttribute('width', '50');
rect.setAttribute('height', '50');
rect.setAttribute('fill', 'blue');
document.querySelector('div.demo').appendChild(
document.importNode(svg.documentElement, true)
);
const svgData = (new XMLSerializer()).serializeToString(svg);
document.querySelector('img.demo').setAttribute(
'src',
'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(svgData)
);
<div class="demo"></div>
<img class="demo"/>
关于javascript - 即使使用 createElementNS,动态添加的 SVG 元素也不会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68297683/
在链接到 XHTML 页面的 JS 中,我使用 createElementNS 创建新元素,如下所示: const NS = 'http://my.site/xmlns'; const el1 = d
我不太明白 createElementNS 是如何工作的。例如: svg = "http://www.w3.org/2000/svg"; group = document.createElementN
我想使用 Javascript 创建内联 SVG 图形。 但是,看起来像createElementNS函数应用一些标准化并将所有标签转换为小写。这对于 HTML 来说很好,但对于 XML/SVG 来说
我正在构建一个游戏并尝试在最后显示高分。当前用户名应该用不同的颜色突出显示,但我无法让它工作。当我出于测试目的尝试更改字体大小时,它仍然有效! var nameSpan = svgdoc.create
我正在尝试创建一个新的 与 每次我点击按钮时都会使用 JavaScript 进行标记。当我在控制台 Firebug 中看到结果时,它工作正常,但屏幕上没有显示任何内容。我想要的是图像 每次单击该按钮时
这两者之间的真正区别是什么?我的意思是真正的,本质上的区别。常规 createElement 的 future 是什么? Svg 是 xml,不是 html。我明白了。所以我们使用 createEle
这个问题已经有答案了: I need compatible JavaScript code for document.createElementNS() in older versions of IE
缩短,我正在使用(使用)来复制正方形(路径)代码被添加到 DOM 然而,只有 1px(调试 chrome)。第六 block 用户不可见!谢谢你! code in: codepen $(functio
The html code and how it shows up on the inspector 你好,我开始学习一些网络开发。它一直很顺利,直到我尝试在一个组中动态生成一些 SVG 矩形。但是即
Document.createElementNS() 的 jQuery 是什么? function emleGraphicToSvg(aGraphicNode) { var lu = functi
我正在尝试运行此函数,该函数采用路径并将其转换为多边形: function polygonSampledFromPath(path,samples){ var doc = path.ownerDo
这行不通: const svg = document.createElement('svg') svg.setAttribute('height', '100') svg.setAttribute('
我在其中一个 JS 中有以下声明。 var path = document.createElementNS('http://www.w3.org/2000/svg', 'path') 这在不缩小的情况
我将此问题发布到 Meteor-Talk Google 群组,但我认为这是一个晦涩的问题,需要信号增强。 我正在尝试创建一个插件,让您可以将 XML 样式元素添加到 HTML 文档中,就像 HTML5
我找不到任何关于此的有用信息,我找到的最好的线程是:createElement vs. createElementNS 但是我不明白这样一行是怎么来的:var path = document.crea
我正在使用 nvd3 绘制折线图,当我将 div 传递给 nvd3 绘制图表时,它给我这个错误 Uncaught TypeError: Cannot read property 'createEl
本文整理了Java中org.apache.cxf.helpers.XMLUtils.createElementNS()方法的一些代码示例,展示了XMLUtils.createElementNS()的具
我试图在纯 JS 中操作 SVG,发现如果我不使用像 createElementNS 这样的方法,它就不会按预期运行。和setAttributeNS . 上面的标记工作得很好。但如果您尝试通
我试图在纯 JS 中操作 SVG,发现如果我不使用 createElementNS 和 setAttributeNS 等方法,它不会按预期运行。 上面的标记工作得很好。但是,如果您尝试通过以
JavaScript 函数 document.createElementNS()在旧版本的 IE (6,7,8) 中不起作用?这个函数有没有兼容的代码,比如Array的compatible map f
我是一名优秀的程序员,十分优秀!