рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрдирд╡рд╛рд╕-рдХрдВрдлреЗрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдгреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП
рдкреВрд░реНрд╡рд╛рд╡рд╢реНрдпрдХрддрд╛рдПрдБ
- рдореМрд▓рд┐рдХ HTML рдФрд░ CSS рдЬреНрдЮрд╛рди
- рдХреЛрдгреАрдп 2+ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡
рд╕реНрд░реЛрдд рдХреЛрдб
https://github.com/LucyVeron/confetti-ui
рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐
рдкрд┐рдЫрд▓реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рддрд░рд╣, рдЖрдЗрдП рдкрд╣рд▓реЗ рдиреЛрдб рдФрд░ рдПрдирдкреАрдПрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
- Node: https://nodejs.org/
- npm: https://www.npmjs.com/
рдПрдВрдЧреБрд▓рд░ рд╕реАрдПрд▓рдЖрдИ рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ рдПрдВрдЧреБрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ
npm install -g @angular/cli
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
ng new confetti-ui
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ
cd confetti-ui
рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдБ
ng serve
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ 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;
}
рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
рдирд╡реАрдирддрдо
- Accessibility Wins That Take Less Than 30 Minutes to Implement

- Give Me 10 Minutes and IтАЩll Teach You How to Monetize Your Tech Blog

- ЁЯТ╕Passive Income: How To Never Work a 9 to 5 Again

- Building a Design System Without Overengineering It

- ЁЯдФReact IsnтАЩt Always the Answer: When to Skip a Framework


1 Comment