Можно ли, с помощью JS, как-то управлять стилями, атрибутами svg
, который подключен через тег img
?
Считайте что нет, разве что вот так:
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>
Вдохновленный ответом @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="">
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Я подключил к своему коду CRA(create-react-app), что бы разбить приложение на модули, но за ними пошли первые проблемыСегодня хочу её решить , есть код...
Понятно, что в общем случае new Map() гибче, поскольку позволяет различать числовые и строковые ключи, а также использовать ключи любых типов,...
Есть задача, по клику на кнопке начать в цикле выполнение тяжелых вычислений (скажем поиск простых чисел) с постепенным выводом результата...