ЁЯОЙрдХреИрдирд╡рд╛рд╕-рдХрдВрдлреЗрдЯреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ЁЯОЙ

рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрдирд╡рд╛рд╕-рдХрдВрдлреЗрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдгреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП

рдкреВрд░реНрд╡рд╛рд╡рд╢реНрдпрдХрддрд╛рдПрдБ

  • рдореМрд▓рд┐рдХ HTML рдФрд░ CSS рдЬреНрдЮрд╛рди
  • рдХреЛрдгреАрдп 2+ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡

рд╕реНрд░реЛрдд рдХреЛрдб

https://github.com/LucyVeron/confetti-ui

рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐

рдкрд┐рдЫрд▓реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рддрд░рд╣, рдЖрдЗрдП рдкрд╣рд▓реЗ рдиреЛрдб рдФрд░ рдПрдирдкреАрдПрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдПрдВрдЧреБрд▓рд░ рд╕реАрдПрд▓рдЖрдИ рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ рдПрдВрдЧреБрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ

npm install -g @angular/cli

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ

ng new confetti-ui

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ

cd confetti-ui

рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдБ

ng serve

рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 4200

рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ:4200


рд╣рдо рдХрдВрдлрд╝реЗрджреНрджреА рдкреНрд░рднрд╛рд╡ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдПрдХ рдХреИрдирд╡рд╛рд╕ HTML рддрддреНрд╡ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХрдВрдлрд╝реЗрджреНрджреА рдПрдиреАрдореЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрдИ рдХреИрдирд╡рд╕ рдмрдирд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдмрдЯрди рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреВрд▓рд┐рдпрди рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
рд╣рдо рдПрдВрдЧреБрд▓рд░ рд░реЗрдВрдбрд░рд░2 рдХреНрд▓рд╛рд╕ рдЙрд╕реЗ рдХрд░реЗрдВрдЧреЗ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдХреНрд░рд┐рдПрдЯ рдФрд░ рдЖрддреНрддрд╛рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПрдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЗ
рд░реЗрдВрдбрд░рд░ 2 рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдПрдкреАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

https://angular.io/api/core/Renderer2


рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреВрд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВрдЧреЗ
рдЖрдЗрдП рдЗрд╕реЗ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдХрдВрдлрд╝реЗрджреНрджреА рдХрд╣рддреЗ рд╣реИрдВред

app.component.ts

import { Component, ElementRef, Renderer2 } from '@angular/core';
import * as confetti from 'canvas-confetti';
 
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
 
  public clicked = false;
 
  constructor(
    private renderer2: Renderer2,
    private elementRef: ElementRef
  ) {}
 
  public surprise(): void {
 
    const canvas = this.renderer2.createElement('canvas');
 
    this.renderer2.appendChild(this.elementRef.nativeElement, canvas);
 
    const myConfetti = confetti.create(canvas, {
      resize: true // will fit all screen sizes
    });
 
    myConfetti();
 
    this.clicked = true;
  }
}

app.component.html

<div class="container">
  <button *ngIf="!clicked" (click)="surprise()"><img draggable="false" role="img" class="emoji" alt="ЁЯОК" src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/1f38a.svg">  Surprise  <img draggable="false" role="img" class="emoji" alt="ЁЯОЙ" src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/1f389.svg"></button>
</div>

app.component.css

button {
  border: none;
  padding: 0.5rem;
  background: #fddde3;
  color: #8e5d5d;
  width: 200px;
  height: 50px;
  font-size: 21px;
  box-shadow: 0px 1px 4px 0px #d59d9d;
  margin-top: 2rem;
  cursor: pointer;
}
 
canvas {
  height: 100%; /* рд╣рдореЗрдВ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЗрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ */
  width: 100%;
}
 
.container {
  display: flex;
  justify-content: center;
}


рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛

рдирд╡реАрдирддрдо

1 Comment

Leave a Reply