Управление SVG подключенного через img

136
13 октября 2021, 13:50

Можно ли, с помощью JS, как-то управлять стилями, атрибутами svg, который подключен через тег img ?

Answer 1

Считайте что нет, разве что вот так:

requestAnimationFrame(draw);
function draw(t) {
  let svg = `<svg height="100" width="100"
xmlns="http://www.w3.org/2000/svg" >
  <circle cx="50" cy="50" 
    r="${Math.sin(t/1000)*20+25}"
    fill="hsl(${t/10},55%,55%)"/>
</svg>`
 
  img.setAttribute("src", 'data:image/svg+xml;base64,' + btoa(svg))
  
  requestAnimationFrame(draw);
}
<img id=img>

Answer 2

Вдохновленный ответом @StrangerintheQ, придумал вот такую реализацию. Из-за кросс-доменности запросов, здесь не получается воспроизвести результат. Но локально все работает.

const img_origin = document.getElementById('img_origin'); 
const src  = img_origin.src; 
 
const xhr = new XMLHttpRequest(); 
xhr.open('GET', src, true); 
xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); 
 xhr.send(); 
console.log('Запрос ушел'); 
xhr.onreadystatechange = function() { 
  if (xhr.readyState != 4) return; 
  if (xhr.status == 200) { 
const result = xhr.responseText; 
console.log(result) 
const parser = new DOMParser(); 
const doc = parser.parseFromString(result, "application/xml"); 
const svg = doc.querySelector('svg'); 
svg.setAttribute('stroke', 'red') 
svg.setAttribute('fill', 'red'); 
const str = new XMLSerializer().serializeToString(svg) 
const img_modify = document.getElementById('img_modify'); 
img_modify.setAttribute("src", 'data:image/svg+xml;base64,' + btoa(str)) 
  } 
};
 <img id="img_origin" src="https://www.gstatic.com/images/branding/googlelogo/svg/googlelogo_dark_clr_112x36px.svg" alt=""> 
    <img id="img_modify"  alt="">

READ ALSO
Создание кнопок [закрыт]

Создание кнопок [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

69
React не видит значение

React не видит значение

Я подключил к своему коду CRA(create-react-app), что бы разбить приложение на модули, но за ними пошли первые проблемыСегодня хочу её решить , есть код...

165
Что лучше new Map() или Object.create(null)?

Что лучше new Map() или Object.create(null)?

Понятно, что в общем случае new Map() гибче, поскольку позволяет различать числовые и строковые ключи, а также использовать ключи любых типов,...

191
Как заставить браузер без задержки отображать элементы добавленные в цикле javascript

Как заставить браузер без задержки отображать элементы добавленные в цикле javascript

Есть задача, по клику на кнопке начать в цикле выполнение тяжелых вычислений (скажем поиск простых чисел) с постепенным выводом результата...

100