Skip to content

raaaas/timetopay-vue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Vue.js Expiration Date Function

A simple Vue.js function that implements automatic content expiration based on a server-provided date. The content gradually fades out as it approaches its expiration date.

Features

  • 🕒 Automatic expiration date checking
  • 🌅 Smooth fade-out transitions

Usage

Add this code to your Vue.js project:

// Add these imports at the top of your <script setup> section
import { onMounted, onUnmounted, ref, watch } from 'vue';
import axios from 'axios';

// Add these refs
const bodyOpacity = ref(1);
const expirationDate = ref(null);
const isExpired = ref(false);

// Function to check expiration and update opacity
const checkExpirationAndUpdateOpacity = async () => {
  try {
    // Replace with your actual API endpoint
    const response = await axios.get('YOUR_API_ENDPOINT');
    const data = response.data; // Assuming format "0:2025-01-10"
    
    const [status, dateStr] = data.split(':');
    
    if (status === '0') {
      expirationDate.value = new Date(dateStr);
      
      // Calculate remaining time
      const now = new Date();
      const totalDuration = expirationDate.value - now;
      
      if (totalDuration <= 0) {
        // If expired, set opacity to 0
        bodyOpacity.value = 0;
        isExpired.value = true;
      } else {
        // Calculate opacity based on remaining time
        // Assuming we want to start fading 30 days before expiration
        const fadeStartDuration = 30 * 24 * 60 * 60 * 1000; // 30 days in milliseconds
        
        if (totalDuration <= fadeStartDuration) {
          bodyOpacity.value = totalDuration / fadeStartDuration;
        }
        
        // Schedule next check
        setTimeout(checkExpirationAndUpdateOpacity, 60 * 60 * 1000); // Check every hour
      }
    }
  } catch (error) {
    console.error('Error checking expiration:', error);
  }
};

// Add to mounted lifecycle hook
onMounted(() => {
  checkExpirationAndUpdateOpacity();
});

// Add watch to apply opacity
watch(bodyOpacity, (newOpacity) => {
  document.body.style.opacity = newOpacity;
});

Add this to your template:

<div class="dark" :style="{ opacity: bodyOpacity }">
  <!-- Your content here -->
</div>

Add this CSS:

.dark {
  transition: opacity 1s ease-in-out;
}

Requirements

  • Vue 3
  • Axios

API Response Format

The API should return a string in the format: "0:YYYY-MM-DD"

  • First value (0): Status code
  • Second value: Expiration date

Example: "0:2025-01-10"

About

simple opacity idea from fireship

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors