CSS: Как изменить обводку по кругу заливки ангелом (заливка слева не справа) - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь использовать этот код для рисования обводки кругов, но слева направо

jsfiddle

Вот краткий код, над которым я работаю сейчас

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 300 300" preserveAspectRatio="none" style="width:300; height:300; top:0; left:0;">
  <circle cx="100" cy="100" r="57" id="grey-halo" fill="none" stroke="#dddddd" stroke-width="15" transform="rotate(-90,100,100)" />
<circle cx="100" cy="100" r="57" id="green-halo" fill="none" stroke="#00CC33" stroke-width="15" stroke-dasharray="0,20000" transform="rotate(-90,100,100)"  />

(function () {
var circle = document.getElementById('green-halo');
var interval = 30;
var angle = 0;
var angle_increment = 6;
var max_angle = 265;

window.timer = window.setInterval(function () {
    circle.setAttribute("stroke-dasharray", angle + ", 20000");
    circle.setAttribute("stroke", "rgb(80, 80, 80)");

    if (angle >= max_angle) {
        window.clearInterval(window.timer);
    }
    angle += angle_increment;
  }.bind(this), interval);
})()

Я хочу нарисовать эту часть обводки слева направо, а не справа налево. Как это может быть сделано? Вы можете отредактировать оригинальную скрипку и упомянуть об изменениях. Заранее спасибо.

1 Ответ

1 голос
/ 05 апреля 2020

отрегулируйте трансфомацию

(function () {
    // math trick 2*pi*57 = 358, must be less than 360 degree 
    var circle = document.getElementById('green-halo');
    var myTimer = document.getElementById('myTimer');
    var interval = 30;
    var angle = 0;
    var angle_increment = 6;
    var max_angle = parseInt(Math.random()*360);

    window.timer = window.setInterval(function () {
        circle.setAttribute("stroke-dasharray", angle + ", 20000");
        circle.setAttribute("stroke", "hsl(" + parseInt(angle/360*100) + ", 90%, 45%)");
        myTimer.innerHTML = parseInt(angle/360*100) + '%';
        myTimer.setAttribute("fill", "hsl(" + parseInt(angle/360*100) + ", 90%, 45%)");

        if (angle >= max_angle) {
            window.clearInterval(window.timer);
        }
        angle += angle_increment;
    }.bind(this), interval);
})()
#green-halo {
  transform:scaleX(-1) rotate(-90deg);
  transform-box:fill-box;
  transform-origin:center;
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 300 300" preserveAspectRatio="none" style="width:300; height:300; top:0; left:0;">
      <circle cx="100" cy="100" r="57" id="grey-halo" fill="none" stroke="#dddddd" stroke-width="15" transform="rotate(-90,100,100)" />
    <circle cx="100" cy="100" r="57"  id="green-halo" fill="none" stroke="#00CC33" stroke-width="15" stroke-dasharray="0,20000" />
    <text id="myTimer" text-anchor="middle" x="100" y="110" fill="#00CC33" style="font-size: 36px;" >0%</text>
</svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...