לדלג לתוכן

3.7 אחסון מקומי תרגול

תרגול אחסון מקומי


תרגיל 1 - שמירת שם

בנו דף פשוט עם:
- שדה input לשם
- כפתור "save"
- הודעת פתיחה

דרישות:
- כשהמשתמש כותב שם ולוחץ save, שמרו את השם ב-localStorage
- כשהדף נטען, בדקו אם יש שם שמור. אם כן, הציגו "welcome back, [name]!" במקום "welcome, stranger!"
- הוסיפו כפתור "forget me" שמוחק את השם מ-localStorage ומחזיר את ההודעה ל-"welcome, stranger!"
- ודאו שזה עובד גם אחרי רענון הדף


תרגיל 2 - מונה לחיצות

בנו מונה שזוכר את מספר הלחיצות:
- הציגו מספר על המסך (מתחיל מ-0)
- כפתור "+" מגדיל ב-1
- כפתור "-" מקטין ב-1
- כפתור "reset" מאפס ל-0
- שמרו את המונה ב-localStorage אחרי כל שינוי
- כשטוענים את הדף מחדש, המונה חוזר לערך האחרון שנשמר


תרגיל 3 - בורר ערכת צבעים

בנו בורר theme עם 3 אפשרויות:
- בהיר (light) - רקע לבן, טקסט שחור
- כהה (dark) - רקע כהה, טקסט לבן
- כחול (blue) - רקע כחול כהה, טקסט לבן

דרישות:
- 3 כפתורים לבחירת theme
- שינוי ה-theme משנה מיד את צבעי הדף (background ו-color)
- שמרו את הבחירה ב-localStorage
- כשטוענים את הדף, החילו את ה-theme השמור
- הכפתור של ה-theme הנוכחי צריך להיות מודגש (class="active")


תרגיל 4 - רשימת מועדפים

בנו רשימה של 10 סרטים (מוצגים ככרטיסים) עם אפשרות להוסיף למועדפים:
- כל כרטיס מכיל שם סרט וכפתור "add to favorites" / "remove from favorites"
- רשימת המועדפים נשמרת ב-localStorage
- כשטוענים את הדף, כפתורי הסרטים שכבר במועדפים מראים "remove from favorites"
- הציגו בצד מונה "X favorites" שמתעדכן בזמן אמת
- הוסיפו כפתור "clear all favorites" שמוחק את כל המועדפים


תרגיל 5 - טופס עם שמירה אוטומטית

בנו טופס יצירת קשר עם שמירה אוטומטית:
- שדות: שם, אימייל, נושא (select), הודעה (textarea)
- בכל שינוי בשדה כלשהו (אירוע input), שמרו את כל הנתונים ב-localStorage
- כשטוענים את הדף, שחזרו את הנתונים מ-localStorage ומלאו את השדות
- הציגו הודעת "draft saved" שנעלמת אחרי 2 שניות אחרי כל שמירה
- כפתור "clear draft" שמנקה את ה-localStorage ומרוקן את הטופס
- כשהטופס נשלח בהצלחה (submit), מחקו את הטיוטה מ-localStorage


תרגיל 6 - יומן רשומות

בנו אפליקציית יומן שמאחסנת רשומות:
- שדה textarea לכתיבת רשומה חדשה
- כפתור "add entry" שמוסיף את הרשומה עם תאריך ושעה
- כל הרשומות מוצגות ברשימה (מהחדשה לישנה)
- כל רשומה כוללת: תאריך ושעה, הטקסט, כפתור מחיקה
- כל הרשומות נשמרות ב-localStorage כמערך
- הוסיפו שדה חיפוש שמסנן רשומות לפי טקסט
- הציגו מונה "X entries"


תרגיל 7 - Storage Wrapper

בנו עטיפה (wrapper) ל-localStorage שמספקת:

let storage = {
  get: function (key, defaultValue) { /* ... */ },
  set: function (key, value) { /* ... */ },
  remove: function (key) { /* ... */ },
  has: function (key) { /* ... */ },
  clear: function () { /* ... */ },
  getAll: function () { /* ... */ }
};

דרישות:
- get - מחזיר ערך מפוענח (JSON.parse). אם אין ערך, מחזיר את defaultValue
- set - שומר ערך מקודד (JSON.stringify)
- remove - מוחק key ספציפי
- has - בודק אם key קיים (מחזיר boolean)
- clear - מנקה הכל
- getAll - מחזיר אובייקט עם כל הkey-value pairs
- טיפול בשגיאות - אם JSON.parse נכשל, החזירו את המחרוזת הגולמית
- אחרי שבניתם את ה-wrapper, השתמשו בו כדי לבנות רשימת משימות קטנה (הוספה, מחיקה, סימון כהושלם)


תרגיל 8 - תקשורת בין טאבים

בנו הדגמה של תקשורת בין טאבים באמצעות אירוע storage:
- שדה input לכתיבת הודעות
- כפתור "send" ששומר את ההודעה ב-localStorage
- אזור שמציג הודעות שהתקבלו מטאבים אחרים
- כל הודעה מציגה את הזמן שנשלחה

דרישות:
- השתמשו באירוע storage כדי לזהות שינויים שבוצעו בטאבים אחרים
- פתחו את הדף בשני טאבים ובדקו שהודעה שנשלחת מטאב אחד מופיעה בשני
- הציגו היסטוריית הודעות (נשמרת ב-localStorage)
- הוסיפו כפתור "clear history" שמנקה את כל ההודעות
- ההודעה לא צריכה להופיע בטאב ששלח אותה (רק בטאבים אחרים)


תרגיל 9 - מערכת ציונים גבוהים

בנו מערכת high scores למשחק דמיוני:
- שדה לשם השחקן ושדה לציון (number)
- כפתור "add score"
- טבלת top 10 שמציגה את הציונים הגבוהים ביותר (ממוינים מהגבוה לנמוך)
- כל שורה מציגה: מיקום, שם, ציון, תאריך
- הנתונים נשמרים ב-localStorage
- אם יש יותר מ-10 ציונים, שמרו רק את ה-top 10
- הוסיפו הדגשה ויזואלית לציון שנוסף הכי לאחרונה
- כפתור "reset scores" שמוחק את כל הציונים