mirror of
https://github.com/kunkunsh/kunkun-ext-neohtop.git
synced 2025-04-11 17:29:45 +00:00
93 lines
2.4 KiB
JavaScript
93 lines
2.4 KiB
JavaScript
// Theme Management
|
|
const themeToggle = document.getElementById('themeToggle');
|
|
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');
|
|
|
|
function setTheme(isDark) {
|
|
document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');
|
|
themeToggle.querySelector('.theme-icon').textContent = isDark ? '☀️' : '🌙';
|
|
localStorage.setItem('theme', isDark ? 'dark' : 'light');
|
|
}
|
|
|
|
// Initialize theme
|
|
const savedTheme = localStorage.getItem('theme');
|
|
if (savedTheme) {
|
|
setTheme(savedTheme === 'dark');
|
|
} else {
|
|
setTheme(prefersDark.matches);
|
|
}
|
|
|
|
// Theme toggle button
|
|
themeToggle.addEventListener('click', () => {
|
|
const isDark = document.documentElement.getAttribute('data-theme') === 'dark';
|
|
setTheme(!isDark);
|
|
});
|
|
|
|
// System theme changes
|
|
prefersDark.addEventListener('change', (e) => {
|
|
if (!localStorage.getItem('theme')) {
|
|
setTheme(e.matches);
|
|
}
|
|
});
|
|
|
|
// FAQ Accordion
|
|
document.querySelectorAll('.faq-question').forEach(button => {
|
|
button.addEventListener('click', () => {
|
|
const faqItem = button.parentElement;
|
|
const isActive = faqItem.classList.contains('active');
|
|
|
|
// Close all FAQ items
|
|
document.querySelectorAll('.faq-item').forEach(item => {
|
|
item.classList.remove('active');
|
|
});
|
|
|
|
// Toggle clicked item
|
|
if (!isActive) {
|
|
faqItem.classList.add('active');
|
|
}
|
|
});
|
|
});
|
|
|
|
// Download tracking
|
|
document.querySelectorAll('.download-button').forEach(button => {
|
|
button.addEventListener('click', (e) => {
|
|
const version = button.getAttribute('data-version');
|
|
const type = button.getAttribute('data-type');
|
|
|
|
// Google Analytics event
|
|
gtag('event', 'download', {
|
|
'event_category': 'App',
|
|
'event_label': type,
|
|
'value': version
|
|
});
|
|
});
|
|
});
|
|
|
|
// Smooth scroll for navigation
|
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
anchor.addEventListener('click', function (e) {
|
|
e.preventDefault();
|
|
const target = document.querySelector(this.getAttribute('href'));
|
|
if (target) {
|
|
target.scrollIntoView({
|
|
behavior: 'smooth',
|
|
block: 'start'
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
// Intersection Observer for animations
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('visible');
|
|
}
|
|
});
|
|
}, {
|
|
threshold: 0.1
|
|
});
|
|
|
|
document.querySelectorAll('.feature, .step, .download-button').forEach(el => {
|
|
observer.observe(el);
|
|
});
|