123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- // 页面加载完成后执行
- document.addEventListener('DOMContentLoaded', function() {
- // 添加卡片点击效果
- addCardClickEffects();
-
- // 添加滚动动画
- addScrollAnimations();
-
- // 添加触摸反馈
- addTouchFeedback();
- });
- // 添加卡片点击效果
- function addCardClickEffects() {
- const cards = document.querySelectorAll('.card');
-
- cards.forEach((card, index) => {
- // 鼠标悬停效果
- card.addEventListener('mouseenter', function() {
- this.style.transform = 'translateY(-4px) scale(1.02)';
- });
-
- card.addEventListener('mouseleave', function() {
- this.style.transform = 'translateY(0) scale(1)';
- });
- });
- }
- // 添加滚动动画
- function addScrollAnimations() {
- const cards = document.querySelectorAll('.card');
-
- const observer = new IntersectionObserver((entries) => {
- entries.forEach((entry, index) => {
- if (entry.isIntersecting) {
- entry.target.style.opacity = '0';
- entry.target.style.transform = 'translateY(30px)';
-
- setTimeout(() => {
- entry.target.style.transition = 'all 0.6s ease';
- entry.target.style.opacity = '1';
- entry.target.style.transform = 'translateY(0)';
- }, index * 100);
- }
- });
- }, {
- threshold: 0.1,
- rootMargin: '0px 0px -50px 0px'
- });
-
- cards.forEach(card => {
- observer.observe(card);
- });
- }
- // 添加触摸反馈
- function addTouchFeedback() {
- const cards = document.querySelectorAll('.card');
-
- cards.forEach(card => {
- card.addEventListener('touchstart', function() {
- this.style.transform = 'scale(0.98)';
- });
-
- card.addEventListener('touchend', function() {
- this.style.transform = 'scale(1)';
- });
- });
- }
- // 添加CSS动画样式
- const style = document.createElement('style');
- style.textContent = `
- @keyframes ripple {
- to {
- transform: scale(4);
- opacity: 0;
- }
- }
-
- .card {
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- }
-
- .card:active {
- transform: scale(0.98) !important;
- }
- `;
- document.head.appendChild(style);
- // 添加页面加载动画
- window.addEventListener('load', function() {
- document.body.style.opacity = '0';
- document.body.style.transition = 'opacity 0.5s ease';
-
- setTimeout(() => {
- document.body.style.opacity = '1';
- }, 100);
- });
- // 添加键盘导航支持
- document.addEventListener('keydown', function(e) {
- const cards = document.querySelectorAll('.card');
- const currentIndex = Array.from(cards).findIndex(card =>
- card === document.activeElement || card.contains(document.activeElement)
- );
-
- let nextIndex = currentIndex;
-
- switch(e.key) {
- case 'ArrowDown':
- e.preventDefault();
- nextIndex = Math.min(currentIndex + 1, cards.length - 1);
- break;
- case 'ArrowUp':
- e.preventDefault();
- nextIndex = Math.max(currentIndex - 1, 0);
- break;
- case 'Enter':
- case ' ':
- e.preventDefault();
- if (currentIndex >= 0) {
- cards[currentIndex].click();
- }
- break;
- }
-
- if (nextIndex !== currentIndex && nextIndex >= 0) {
- cards[nextIndex].focus();
- }
- });
- // 为卡片添加焦点样式
- document.querySelectorAll('.card').forEach(card => {
- card.setAttribute('tabindex', '0');
- });
|