Рисуем анимированные SVG в Angular 7 - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь перенести следующие варианты в Angular 7:

https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_svg_scrolldrawing

(TL; DR - SVG из примера работает, SVG, который я сделал, нет.Путать)

В настоящее время у меня есть следующий компонент:

import { Component, OnInit, HostListener, ElementRef, Renderer2, ViewChild } from '@angular/core';

@Component({
  selector: 'svg-component',
  templateUrl: './svg.component.html',
  styleUrls: ['./svg.component.css'],
})

export class SvgComponent implements OnInit {

  @ViewChild('svgElement') svgElement;

  constructor(private el: ElementRef) {}

  @HostListener('window:scroll', ['$event'])
    checkScroll() {
      let componentPosition = this.el.nativeElement.offsetTop;
      let scrollPosition = window.pageYOffset;

      let svgLength = this.svgArrow.nativeElement.getTotalLength();
      this.svgArrow.nativeElement.style.strokeDasharray = arrowLength;
      this.svgArrow.nativeElement.style.strokeDashoffset = arrowLength;

      let scrollPercent: number;

      if (scrollPosition >= componentPosition) {
        // This isn't actually a percentage - in the example they're using a variable between 0 and 1.
        scrollPercent =  (((scrollPosition - componentPosition) / svgLength));

        let draw = svgLength * scrollPercent;
        this.svgArrow.nativeElement.style.strokeDashoffset = svgLength - draw;
      }
    }

}

И HTML для него работает с треугольником из примера:

<svg>
  <path #svgArrow fill="none" stroke="red" stroke-width="3" id="triangle" d="M150 0 L75 200 L225 200 Z" />
  Sorry, your browser does not support inline SVG.
</svg>

Однако, когда я добавляю свою собственную стрелку, сгенерированную таким образом, она ничего не отображает:

enter image description here

При использовании следующего HMTL:

<svg>
  <svg #svgArrow stroke="black" stroke-width="3" id="arrow" d="M 400 100 C 350 150 450 125 400 175 C 350 225 450 225 400 300 C 350 350 450 350 400 475 Q 390 450 375 450 Q 380 490 400 525 Q 420 490 425 450" />
  Browser doesn't support inline SVG?
</svg>

Так что SVG из примера работает, сгенерированный SVG вообще не отображается.Это потому что это не закрытый рисунок?Любая помощь приветствуется:)

1 Ответ

0 голосов
/ 16 ноября 2018

Омг, я так глуп.Контейнер не имел ширины и высоты, поэтому он отображался, но окно было 0 x 0 и поэтому не было видно.Все вышеперечисленное работает, если для SVG указаны размеры:

<svg height="600px" width="600px">
  <path #svgArrow fill="none" stroke="red" stroke-width="3" id="triangle" d="M150 0 L75 200 L225 200 Z" />
  Sorry, your browser does not support inline SVG.
</svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...