Путь SVG, созданный с помощью Javascript, не имеет ширины или высоты - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь программно создать закругленный угол, используя Javascript и SVG.Угол успешно создан, но path всегда установлен на 0 ширины и 0 высоты.

Если я скопирую созданный строковый элемент и вставлю его в файл, он будет работать без проблем, как показано навторая строка фрагмента.

Почему только программно созданный путь без ширины и высоты?Чего мне не хватает?

var cornerTopLeft = createCorner("top-left");
applyCornerStyles.call(cornerTopLeft, 0, 0, 10);

var body = document.getElementsByTagName("body")[0];
body.appendChild(cornerTopLeft);

function createCorner(cornerPosition) {
  var corner = document.createElement("svg");
  corner.setAttribute("fill", "red");
  corner.setAttribute("style", "width:10px;height:10px;background-color: red;");
  corner.setAttribute("viewBox", "0 0 100 100");
  corner.setAttribute("xmlns", "http://www.w3.org/2000/svg")
  corner.innerHTML = '<path class="" style="background-color: rgba(0, 0, 0, .5);fill: rgba(0, 0, 0, .5);" d="M100 0 ,Q 0 0 0 100, L0 0, Z"></path>';
  return corner;
}

function applyCornerStyles(top, left, size) {
  this.style.top = top + "px";
  this.style.left = left + "px";
  this.style.width = size + "px";
  this.style.height = size + "px";
  this.style.zIndex = "20002";
  this.style.position = "absolute";
}
<h3>This svg was created using svg string created programatcally.</h3>
<svg fill="none" viewbox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" style="top: 22px; left: 510px; width: 10px; height: 10px; z-index: 20001; position: absolute;">
  <path class="" style="background-color: rgba(0, 0, 0, .5);fill: rgba(0, 0, 0, .5);" d="M100 0 ,Q 0 0 0 100, L0 0, Z"></path>
</svg>

( скрипка )

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Чтобы создать новый элемент SVG, вам нужно использовать document.createElementNS вместо document.createElement. Также вам нужно создать путь с document.createElementNS.corner.innerHTML = '<path class=... не подойдет.

const SVG_NS = 'http://www.w3.org/2000/svg';

var cornerTopLeft = createCorner("top-left");
applyCornerStyles.call(cornerTopLeft, 0, 0, 10);

var body = document.getElementsByTagName("body")[0];
body.appendChild(cornerTopLeft);

function createCorner(cornerPosition) {
  var corner = document.createElementNS(SVG_NS, 'svg');
  corner.setAttributeNS(null,"fill", "red");
  corner.setAttribute("class","corner")
  corner.setAttributeNS(null,"viewBox", "0 0 100 100");
  //corner.setAttribute("xmlns", "http://www.w3.org/2000/svg")
  var path = document.createElementNS(SVG_NS, 'path');
  path.setAttributeNS(null,"fill", "rgba(0, 0, 0, .5)");
  path.setAttributeNS(null,"d","M100 0 ,Q 0 0 0 100, L0 0, Z");
  corner.appendChild(path)
  return corner;
}




function applyCornerStyles(top, left, size) {
  this.style.top = top + "px";
  this.style.left = left + "px";
  this.style.width = size + "px";
  this.style.height = size + "px";
  
  this.style.position = "absolute";
}
svg{border:1px solid}

.corner{background-color: red;}
<h3>This svg was created using svg string created programatcally.</h3>
<svg fill="none" viewbox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" style="top: 22px; left: 510px; width: 10px; height: 10px; z-index: 20001; position: absolute;">
  <path class="" style="background-color: rgba(0, 0, 0, .5);fill: rgba(0, 0, 0, .5);" d="M100 0 ,Q 0 0 0 100, L0 0, Z"></path>
</svg>
0 голосов
/ 19 февраля 2019

Используйте var corner = document.createElementNS("http://www.w3.org/2000/svg", "svg"); вместо var corner = document.createElement("svg");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...