| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- var pckry;
- document.addEventListener('DOMContentLoaded', (event) => {
- // 初始化函數
- init();
- });
- function init() {
- // 綁定事件
- document.querySelector('.buttonAddImage').addEventListener('click', showAddImageForm);
- document.querySelector('.buttonCancelAdd').addEventListener('click', hideAddImageForm);
- document.querySelector('.buttonApproveAdd').addEventListener('click', addImage);
- document.querySelector('.buttonClearCards').addEventListener('click', clearAllCards);
- document.querySelector('.buttonSeedCards').addEventListener('click', seedCards);
- var cardholder = document.querySelector('.cardholder');
- pckry = new Packery(cardholder, {
- // Packery 的選項
- itemSelector: '.card',
- // percentPosition: true, // 如果你想要使用百分比定位
- gutter: 1
- });
- makeAllCardsDraggable();
- // 如果有撤銷/重做按鈕的功能,這裡綁定相應的事件
- }
- function showAddImageForm() {
- var modal = document.getElementById('addImageModal');
- modal.style.display = "block";
- var closeButton = document.querySelector('.close');
- closeButton.onclick = function () {
- modal.style.display = "none";
- }
- // 當用戶點擊模態視窗以外的地方,關閉它
- window.onclick = function (event) {
- if (event.target == modal) {
- modal.style.display = "none";
- }
- }
- }
- function makeAllCardsDraggable() {
- // 對現有的每個卡片使用 Draggabilly
- var draggableElems = pckry.getItemElements();
- for (var i = 0, len = draggableElems.length; i < len; i++) {
- var draggableElem = draggableElems[i];
- var draggie = new Draggabilly(draggableElem);
- pckry.bindDraggabillyEvents(draggie);
- }
- }
- function hideAddImageForm() {
- document.querySelector('.newPictureForm').classList.add('displayNone');
- }
- function addImage(event) {
- event.preventDefault();
- const imageUrl = document.getElementById('newPicUrl').value.trim();
- if (imageUrl) {
- // 創建卡片容器
- const card = document.createElement('div');
- card.className = 'card';
- // 創建圖片元素
- const img = document.createElement('img');
- img.src = imageUrl;
- img.alt = 'Mood Image';
- img.className = 'mood-image';
- // 將圖片添加到卡片容器
- card.appendChild(img);
- // 將卡片容器添加到主體(cardholder)中
- const cardholder = document.querySelector('.cardholder');
- cardholder.appendChild(card);
- // 通知 Packery 新增加了一個卡片元素
- pckry.appended(card);
- // 使新加入的卡片可拖動
- var draggie = new Draggabilly(card);
- // 將 Draggabilly 事件綁定到 Packery
- pckry.bindDraggabillyEvents(draggie);
- // 清空輸入欄位
- document.getElementById('newPicUrl').value = '';
- }
- }
- function clearAllCards() {
- // 移除所有 .card 元素
- var cards = document.querySelectorAll('.card');
- cards.forEach(function (card) {
- pckry.remove(card); // 通知 Packery 移除元素
- card.remove(); // 從 DOM 中移除元素
- });
- // 通知 Packery 重新佈局剩下的元素
- pckry.layout();
- }
- function seedCards() {
- getRandomMemeGif(function(gifUrl) {
- // 這裡我們直接調用 addImage 函數,將 Giphy 圖片 URL 作為參數
- addImageWithUrl(gifUrl);
- });
- }
- // 撤銷/重做功能的實現可以根據你的需求設計
- // 將 YOUR_API_KEY 替換成你的 Giphy API 密鑰
- function getRandomMemeGif(callback) {
- const apiKey = 'SHyO3XJY0R71LuTQlx2SlsRuvTrKBjxD';
- const apiUrl = `https://api.giphy.com/v1/gifs/random?api_key=${apiKey}&tag=meme`;
- fetch(apiUrl)
- .then(response => response.json())
- .then(data => {
- const gifUrl = data.data.images.original.url;
- if (callback) callback(gifUrl);
- })
- .catch(error => {
- console.error('Error fetching random meme gif:', error);
- });
- }
- function addImageWithUrl(imageUrl) {
- const card = document.createElement('div');
- card.className = 'card';
- // 隨機選擇一個大小
- const sizeClass = 'card-size-' + (Math.floor(Math.random() * 4) + 1);
- card.classList.add(sizeClass);
- const img = document.createElement('img');
- img.src = imageUrl;
- img.alt = 'Mood Image';
- img.className = 'mood-image';
- img.onload = function() {
- card.appendChild(img);
- const cardholder = document.querySelector('.cardholder');
- cardholder.appendChild(card);
- pckry.appended(card);
- pckry.layout();
- var draggie = new Draggabilly(card);
- pckry.bindDraggabillyEvents(draggie);
- };
- }
|