Browse Source

新增localstroage

steve07s 1 year ago
parent
commit
d9df09206b
1 changed files with 29 additions and 3 deletions
  1. 29 3
      static/spa.js

+ 29 - 3
static/spa.js

@@ -1,6 +1,7 @@
 var pckry;
 var pckry;
 document.addEventListener('DOMContentLoaded', (event) => {
 document.addEventListener('DOMContentLoaded', (event) => {
     // 初始化函數
     // 初始化函數
+    restoreState();
     init();
     init();
 });
 });
 
 
@@ -224,13 +225,17 @@ function getRandomMemeGif(callback) {
         });
         });
 }
 }
 
 
-function addImageWithUrl(imageUrl) {
+function addImageWithUrl(imageUrl, sizeClass = null) {
     const card = document.createElement('div');
     const card = document.createElement('div');
     card.className = 'card';
     card.className = 'card';
+    if (!sizeClass) {
+        sizeClass = 'card-size-' + (Math.floor(Math.random() * 4) + 1);
+    }
+    card.classList.add(sizeClass);
+    
 
 
     // 隨機選擇一個大小
     // 隨機選擇一個大小
-    const sizeClass = 'card-size-' + (Math.floor(Math.random() * 4) + 1);
-    card.classList.add(sizeClass);
+
 
 
     // 創建按鈕容器
     // 創建按鈕容器
     const buttonsContainer = document.createElement('div');
     const buttonsContainer = document.createElement('div');
@@ -315,5 +320,26 @@ function addImageWithUrl(imageUrl) {
         // 通知 Packery 新增了卡片並重新布局
         // 通知 Packery 新增了卡片並重新布局
         pckry.appended(card);
         pckry.appended(card);
         pckry.layout();
         pckry.layout();
+        // 更新localStorage的狀態
+        saveState();
     };
     };
+}
+
+
+function saveState() {
+    const cards = document.querySelectorAll('.card');
+    const state = Array.from(cards).map(card => ({
+        url: card.querySelector('img').src,
+        sizeClass: card.classList[1] // 假設大小類別為第二個class
+    }));
+    localStorage.setItem('cardsState', JSON.stringify(state));
+}
+
+function restoreState() {
+    const state = JSON.parse(localStorage.getItem('cardsState'));
+    if (state) {
+        state.forEach(cardState => {
+            addImageWithUrl(cardState.url, cardState.sizeClass);
+        });
+    }
 }
 }