קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
קודקודייל
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
  • קודקודייל
  • מי אתם קודקודייל?
  • קורסים בחינם
  • צרו קשר
  • בניית אתרים
    • וורדפרס
  • נגישות אתרים
  • כל הקטגוריות
    • אנגולר
    • HTML
    • CSS
    • Javascript
    • Typescript
    • NodeJs
    • בלוקציין
ראשי ♦ אנגולר ♦ מדריך אנימציות באנגולר – מתקדם

מדריך אנימציות באנגולר – מתקדם

עידן יצחקי 2 באפריל 2021 אין תגובות

בחלק הקודם הכרנו איך להשתמש באנמציות של אנגולר בצורה בסיסית, במידה שאתם לא מכירים אנמציות של אנגולר אני ממליץ בחום לקרוא תחילה את המדריך הבסיסי לפני שממשיכים עם המדריך הזה.

כמו שהכותרת מרמזת, כאן נלמד טכניקות יותר מתקדמות באנימציות אנגולר.

במידה שאנחנו רוצים אנמציה שמגיבה ללחיצת כפתור או שינוי של משתנה כלשהו ולא רק יציאה וכניסה של רכיב לדף נעשה את זה כך:

לרכיב שלנו קוראים child.component.ts

אנחנו כותבים את האנמציה בקובץ חיצוני לרכיב כדי שיהיה גלובלי לכל הפרויקט, שם הקובץ colors-changer.animations.ts

<p [@colors]="colorChange? 'blue' : 'red'">
    child works!
</p>
<button (click)="toggle()">toggle</button>
import { Component, OnInit } from '@angular/core';
import { colorChanger } from '../animations/colors-changer.animations';

@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.scss'],
  animations: [
    colorChanger
  ]
})
export class ChildComponent implements OnInit {
  colorChange: boolean = false;
  constructor() { }

  ngOnInit() {
  }
  toggle() {
    this.colorChange = !this.colorChange;
  }
}
import { animate, state, style, transition, trigger } from "@angular/animations";

export let colorChanger = trigger('colors', [
    state('red', style({
        backgroundColor: 'red'
    })),
    state('blue', style({
        backgroundColor: 'blue'
    })),
    transition('red<=>blue', [
        animate(2000)
    ])
])

מה עשינו כאן?

colors-changer.animations.ts – מאכלס את האנמציה שלנו, יש לנו מצב אדום (red) ומצב כחול (blue) שקובעים שהרקע ישתנה בהתאם וכמובן שאפשר להוסיף ערכים נוספים לכל אחד מהם.

אחרי שקבענו מה יקרה בכל מצב, אנחנו מוסיפים את המעבר, אצלנו או דו-כיווני והזמן שנקבע הוא 2000 מילי-שניות.

child.component – די פשוט, יש לנו משתנה בשם colorChange שמחליף מצב בין true ל-false בפונקציה toggle.

ב-html של הרכיב יש כמובן כפתור שמפעיל את הפונקציה toggle כל פעם שלוחצים עליו ובפיסקה יש לנו את הטריגר ולמה הוא שווה.

במילים אחרות יש לנו מעבר ממצב למצב אחר ולכן גם כאן אפשר לקצר קצת ולכתוב את האנמציה כך:

import { animate, state, style, transition, trigger } from "@angular/animations";

export let colorChanger = trigger('colors', [
    state('red', style({
        backgroundColor: 'red'
    })),
    state('blue', style({
        backgroundColor: 'blue'
    })),
    transition('* => *', [  //    <----- מעבר מכל מצב לכל מצב
        animate(2000)
    ])
])

בגלל שכוכבית היא מצב ולא משנה איזה, אז גם void נכלל בפנים (גם הוא סוג של מצב). כך שבמקום לכתוב

void => *

אפשר לכתוב כוכבית לכוכבית כמו בדוגמה למעלה.

אני לא ארחיב בנושא אבל זה טוב לדעת, יש אפשרות לנטרל את האנמציות כך:

<div [@.disabled]="isDisabled">
  <p [@colors]="colorChange?'blue':'red'">
    child works!
  </p>
  <button (click)="toggle()">toggle</button>
</div>

רק חשוב לזכור! זה מנטרל את כל האנמציות בתוכו, לא משנה אם מדובר על רכיבים אחרים. במילים אחרות, אם נשים את זה על ה-body אז לא יהיו אנמציות בכל האתר.

הפעלת פונקציות על ידי האנימציה

אנחנו גם יכולים לדעת מתי האנמציה התחילה ומתי היא הסתיימה, זה טוב לנו אם אנחנו רוצים להפעיל פונקציה נוספת בהתאם לאנמציה.

<div>
    <p [@colors]="colorChange?'blue':'red'" 
    (@colors.start)="animationStatus($event)" 
    (@colors.done)="animationStatus($event)">
        child works!
    </p>
    <button (click)="toggle()">toggle</button>
    <pre>STATUS: {{data|json}}</pre>
</div>
import { Component, OnInit } from '@angular/core';
import { colorChanger } from '../animations/colors-changer.animations';

@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.scss'],
  animations: [
    colorChanger
  ]
})
export class ChildComponent implements OnInit {
  colorChange: boolean = false;
  data: string = '';
  constructor() { }

  ngOnInit() {
  }
  toggle() {
    this.colorChange = !this.colorChange;
  }
  animationStatus(value: string) {
    this.data = value;
  }
}

התוצאה נראת כך:

בהתחלה
STATUS: {
  "element": {},
  "triggerName": "colors",
  "fromState": "void",
  "toState": "red",
  "phaseName": "done",
  "totalTime": 2000,
  "disabled": false,
  "_data": 2
}
בזמן מעבר
STATUS: {
  "element": {},
  "triggerName": "colors",
  "fromState": "red",
  "toState": "blue",
  "phaseName": "start",
  "totalTime": 2000,
  "disabled": false,
  "_data": 5
}
בסוף מעבר
STATUS: {
  "element": {},
  "triggerName": "colors",
  "fromState": "red",
  "toState": "blue",
  "phaseName": "done",
  "totalTime": 2000,
  "disabled": false,
  "_data": 5
}

כמו שניתן לראות אנחנו מקבלים את כל המידע שצריך כדי לדעת איזה אנמציה רצה, מאיזה מצב לאיזה מצב ומה המצב שלה.

אנימציה בשלבים

import { animate, keyframes, state, style, transition, trigger } from "@angular/animations";

export let colorChanger = trigger('colors', [
    state('red', style({
        backgroundColor: 'red'
    })),
    state('blue', style({
        backgroundColor: 'blue'
    })),
    transition('*=>*', [  //    <----- מעבר מכל מצב לכל מצב
        animate(5000,keyframes([
            style({height: '20px',offset:0}),
            style({height: '40px',offset:0.2}),
            style({height: '10px',offset:0.4}),
            style({height: '20px',offset:0.6}),
        ]))
    ])
])

כמו ב-CSS , גם כאן אנחנו משתמשים ב-keyframes , ה-offset הוא מיקום יחסי לזמן הכללי של האנמציה.

יש עוד מספר דברים יותר מסובכים שאפשר לעשות עם אנימציות, נדבר עליהם בפוסט אחר בהמשך…. כרגע יש לכם מספיק מידע לגרום לאתר שלכם לזוז ו"לרקוד" כמו שהמקצוענים עושים 😁.

פוסטים קשורים:

תמונת אווירה של אנמצית קוביות צבעוניותמדריך אנימציות באנגולר מיניון מחזיק בננהangular input and output in the same variable תמונת אווירה של אותיות צבעוניותSEO| שינוי כותרת של הדף באנגולר custom validator for group angularcustom validator for groups – אנגולר ולידטור ייחודי לגרופ ב-reactive form
אנגולר אנימציות

אודות המחבר

עידן יצחקי להציג את כל הפוסטים של עידן יצחקי


« פוסט קודם
פוסט הבא »

השארת תגובה

ביטול

חיפוש באתר
בחירת העורכים
29 בדצמבר 2023 עידן יצחקי

שדה טקסט עשיר עם תמונות

אתם הולכים להיות מופתעים עד כמה HTML יכול להיות חכם ולבצע משהו כל כך מורכב, שאם אנחנו היינו רוצים ליצור

1 באוקטובר 2021 עידן יצחקי

איך למשוך דינמית favicon של אתרים אחרים ב-JS

בפוסט זה נראה איך אפשר על פי לינקים בדף למשוך את ה-favicon מהדומיין שלהם באופן דינמי, בדיקה של תקינות התמונה

פופולרי
Javascript functions – היכרות עם סוגי פונקציות
Javascript
21 בדצמבר 2024 אין תגובות
Nested routing in angular standalone component
Typescript
15 בנובמבר 2024 תגובה אחת
בחרו לפי תגיות
angular blockchain css ethers express front-end fullstack GQL html javascript next js nextjs nodejs react hooks reactjs solidity webgl אנגולר בלוקציין וורדפרס לימודי אנגולר לימודי וורדפרס לימוד ריאקט מדריך front-end מדריך GQL מדריך אנגולר מדריך וורדפרס מדריך חינם react מדריך ריאקט מפתח בלוק מפתח בלוקציין מתכנת front-end מתכנת בלוקציין מתכנת פרונט סולידיטי קורס front end קורס fullstack קורס nextjs קורס אנגולר קורס בלוקציין קורס בלוקציין בחינם קורס סולידיטי קורס ריאקט קורס תכנות קורס תכנות בחינם
סינון על פי קטגוריות
CSS fullstack HTML IIS Javascript nodeJs SEO Typescript אנגולר בלוקציין בניית אתרים וורדפרס חיפוש עבודה כלים נוספים כללי נגישות קורסים ריאקט תלת מימד תקלות ופתרונות
צור קשר
כל הזכויות שמורות לקודקודייל
ליצירת קשר: @ קודקודייל
גלילה לראש העמוד