Изменить SVG заполнить в цикле - PullRequest
0 голосов
/ 31 января 2019

У меня есть простая иллюстрация SVG, есть ли способ постоянно менять ее цвет?как петля нон-стоп случайного изменения цвета.

вот мой svg

<svg width="533" height="499" viewBox="0 0 533 499" fill="none" xmlns="http://www.w3.org/2000/svg">

Ответы [ 3 ]

0 голосов
/ 31 января 2019

fill на <svg> не работает.Это для его элементов.Вы можете изменить его background

    function random_rgba() {
        var o = Math.round, r = Math.random, s = 255;
        return 'rgba(' + o(r()*s) + ',' + o(r()*s) + ',' + o(r()*s) + ',' + r().toFixed(1) + ')';
    }
    function changeColor(){
    	document.querySelector('svg').style.background = random_rgba();
    }
    setInterval(changeColor,200);
<svg width="533" height="499" viewBox="0 0 533 499" fill="none" xmlns="http://www.w3.org/2000/svg">
0 голосов
/ 31 января 2019

Вот как я бы это сделал: я использую цвета hsl для заливки и анимирую оттенок цветов, используя requestAnimationFrame.Надеюсь, это поможет.

let p1 = document.querySelectorAll("path")[0];
let p2 = document.querySelectorAll("path")[1]
let h = 0;

function changeColor(){
  
  window.requestAnimationFrame(changeColor);
  h+=.5;
  h2=210+h;
  p1.setAttributeNS(null,"fill", `hsl(${~~h},100%,50%)`);
  p2.setAttributeNS(null,"fill", `hsl(${~~h2},100%,50%)`);
}

changeColor()
<svg width="533" height="499" viewBox="0 0 533 499" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M258.089 59.6035C309.803 -3.94652 379.363 78.1818 407.679 127.19C352.338 67.4782 301.718 129.7 287.076 167.787C272.435 205.874 233.694 210.043 205.199 217.679C187.359 222.459 146.446 248.26 128.6 264.085C109.864 289.466 48.3081 292.846 41.8378 268.698C27.0852 213.64 95.5238 148.37 137.644 123.97C163.705 101.458 206.375 123.154 258.089 59.6035Z" fill="blue"/>
<path d="M448.323 394.788C427.389 384.661 420.75 356.279 420.047 343.354C441.009 284.421 527.63 350.762 528.167 368.218C528.703 385.674 474.491 407.447 448.323 394.788Z" fill="red"/>
</svg>
0 голосов
/ 31 января 2019

Выберите элемент и рекурсивно вызовите функцию, которая устанавливает атрибут fill элемента SVG, который вы хотите перекрасить со случайным гексом.

const recolor = element => {
  const randomColor = '#'+Math.floor(Math.random()*16777215).toString(16)
  
  circle.setAttribute('fill', randomColor)
  
  setTimeout(() => recolor(element), 600)
}

recolor(document.querySelector('#circle'))
svg circle { 
  transition: fill .5s linear; 
}
<svg height="100" width="100">
  <circle id="circle" cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...