diff --git a/src/css/style.css b/src/css/style.css index 332c3db..c70c02d 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -185,6 +185,7 @@ article li { .like-icon { cursor: pointer; transition: color 0.2s ease-in-out; + transition: color 0.2s ease-in-out, transform 0.2s ease-in-out; } .like-icon:hover { color: #fff; @@ -197,3 +198,14 @@ article li { .like-icon.liked:hover { transform: scale(1.15); } +.hint-animation { + animation: wobble 1s ease-in-out 2; +} +@keyframes wobble { + 0%, 100% { transform: translateX(0) rotate(0deg) scale(1); } + 15% { transform: translateX(-3px) rotate(-7deg) scale(1.1); } + 30% { transform: translateX(2px) rotate(5deg) scale(1.2); } + 45% { transform: translateX(-1px) rotate(-5deg) scale(1.2); } + 60% { transform: translateX(1px) rotate(3deg) scale(1.1); } + 75% { transform: translateX(0) rotate(-1deg) scale(1); } +} diff --git a/src/js/like-button.js b/src/js/like-button.js index 1864e11..a72fa55 100644 --- a/src/js/like-button.js +++ b/src/js/like-button.js @@ -26,6 +26,15 @@ document.addEventListener('DOMContentLoaded', () => { const data = await response.json(); const isLiked = localStorage.getItem(storageKey) === 'true'; updateUI(isLiked, data.count || 0); + // Check if the user has ever interacted with this button before + if (localStorage.getItem(storageKey) === null) { + // If not, add the animation class + likeIcon.classList.add('hint-animation'); + // Remove the animation after it runs to prevent it from looping + setTimeout(() => { + likeIcon.classList.remove('hint-animation'); + }, 2000); // Animation duration is 2s + } } catch (error) { console.error('Error fetching likes:', error); } @@ -33,6 +42,9 @@ document.addEventListener('DOMContentLoaded', () => { // Add click event listener to the icon likeIcon.addEventListener('click', async () => { + // Stop the hint animation if it's running + likeIcon.classList.remove('hint-animation'); + // Toggle the liked state const isCurrentlyLiked = likeIcon.classList.contains('liked'); const method = isCurrentlyLiked ? 'DELETE' : 'POST';