简约拟态博客网页源码 (大作业html)

「简约博客网页」
链接:https://pan.quark.cn/s/74cbfa52edbe

链接:https://pan.quark.cn/s/74cbfa52edbe

链接:https://pan.quark.cn/s/74cbfa52edbe

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>我的简约拟态博客 - 首页</title>
    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <style>
        :root {
            --bg-color: #e0e5ec;
            --primary-text-color: #525f7f; /* 深灰色,用于主要文本 */
            --secondary-text-color: #8898aa; /* 浅灰色,用于次要文本 */
            --accent-color: #3498db; /* 强调色,如蓝色 */
            --accent-color-darker: #2980b9;
            --container-padding: 25px;
            --border-radius-main: 20px;
            --border-radius-small: 12px;

            /* Neumorphism Shadows */
            --shadow-outer-light: rgba(255, 255, 255, 0.8);
            --shadow-outer-dark: rgba(163, 177, 198, 0.6);
            --shadow-inner-light: rgba(255, 255, 255, 0.7);
            --shadow-inner-dark: rgba(193, 204, 218, 0.7);

            --box-shadow-concave: inset 6px 6px 12px var(--shadow-inner-dark),
                                  inset -6px -6px 12px var(--shadow-inner-light);
            --box-shadow-convex: 6px 6px 12px var(--shadow-outer-dark),
                                -6px -6px 12px var(--shadow-outer-light);
            --box-shadow-flat: 3px 3px 6px var(--shadow-outer-dark),
                               -3px -3px 6px var(--shadow-outer-light);
        }

        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: 'Noto Sans SC', sans-serif;
            background-color: var(--bg-color);
            color: var(--primary-text-color);
            line-height: 1.8;
            overflow-x: hidden; /* 防止水平滚动条 */
        }

        .container {
            width: 90%;
            max-width: 1200px;
            margin: 0 auto;
            padding: 40px 0;
        }

        /* Header */
        .main-header {
            padding: 20px 0;
            background-color: var(--bg-color);
        }

        .main-header .container {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding-top: 0;
            padding-bottom: 0;
        }

        .logo {
            font-size: 1.8em;
            font-weight: 700;
            color: var(--primary-text-color);
            text-decoration: none;
            padding: 10px 15px;
            border-radius: var(--border-radius-small);
            box-shadow: var(--box-shadow-flat);
            transition: all 0.3s ease;
        }
        .logo:hover {
            box-shadow: var(--box-shadow-concave);
            color: var(--accent-color);
        }

        .main-nav ul {
            list-style: none;
            display: flex;
        }

        .main-nav ul li {
            margin-left: 20px;
        }

        .main-nav ul li a {
            text-decoration: none;
            color: var(--secondary-text-color);
            font-weight: 500;
            padding: 10px 15px;
            border-radius: var(--border-radius-small);
            transition: all 0.3s ease;
            box-shadow: var(--box-shadow-flat);
        }

        .main-nav ul li a:hover,
        .main-nav ul li a.active {
            color: var(--accent-color);
            box-shadow: var(--box-shadow-concave);
        }


        /* Hero Section */
        .hero {
            height: 75vh;
            min-height: 450px;
            display: flex;
            align-items: center;
            justify-content: center;
            text-align: center;
            padding: var(--container-padding);
            background: url('https://picsum.photos/seed/techblog/1920/1080') no-repeat center center/cover;
            position: relative;
            border-radius: 0 0 var(--border-radius-main) var(--border-radius-main); /* Rounded bottom corners */
            overflow: hidden; /* For pseudo-element overlay */
            box-shadow: var(--box-shadow-convex); /* Give the hero section a slight pop */
            margin-bottom: 50px;
        }

        .hero::before { /* Overlay for better text readability */
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: rgba(224, 229, 236, 0.3); /* Slight bg-color tint */
            backdrop-filter: blur(3px); /* Frosted glass effect */
        }

        .hero-content {
            position: relative; /* To be above the overlay */
            z-index: 1;
            padding: 30px;
            background-color: rgba(224, 229, 236, 0.7); /* Semi-transparent bg for content box */
            border-radius: var(--border-radius-main);
            box-shadow: var(--box-shadow-convex);
        }

        .hero-title {
            font-size: 3.5em;
            font-weight: 700;
            color: var(--primary-text-color);
            margin-bottom: 0.3em;
            letter-spacing: 1px;
        }

        .hero-subtitle {
            font-size: 1.5em;
            color: var(--secondary-text-color);
            margin-bottom: 1.2em;
            font-weight: 300;
        }

        .cta-button {
            display: inline-block;
            padding: 15px 35px;
            background-color: var(--accent-color);
            color: #fff;
            font-size: 1.1em;
            font-weight: 500;
            text-decoration: none;
            border-radius: var(--border-radius-small);
            box-shadow: 4px 4px 8px #b8c1d1, -4px -4px 8px #ffffff; /* Convex for buttons */
            transition: all 0.3s ease;
        }

        .cta-button:hover {
            background-color: var(--accent-color-darker);
            box-shadow: inset 2px 2px 5px #b8c1d1, inset -2px -2px 5px #ffffff; /* Concave on hover */
        }
        .cta-button:active { /* Pressed effect */
             box-shadow: inset 4px 4px 8px #b8c1d1, inset -4px -4px 8px #ffffff;
        }


        /* Section Styling */
        .section {
            padding: 50px var(--container-padding);
            margin-bottom: 40px;
        }
        .section-title {
            text-align: center;
            font-size: 2.5em;
            color: var(--primary-text-color);
            margin-bottom: 40px;
            font-weight: 600;
            position: relative;
            padding-bottom: 10px;
        }
        .section-title::after { /* Subtle underline */
            content: '';
            position: absolute;
            bottom: 0;
            left: 50%;
            transform: translateX(-50%);
            width: 80px;
            height: 4px;
            background-color: var(--accent-color);
            border-radius: 2px;
            box-shadow: var(--box-shadow-flat);
        }

        /* Blog Posts Grid */
        .posts-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
            gap: 30px;
        }

        .post-card {
            background-color: var(--bg-color);
            border-radius: var(--border-radius-main);
            padding: 25px;
            box-shadow: var(--box-shadow-convex);
            transition: all 0.3s ease-out;
            display: flex;
            flex-direction: column;
        }

        .post-card:hover {
            transform: translateY(-10px) scale(1.02);
            box-shadow: 10px 10px 20px var(--shadow-outer-dark),
                        -10px -10px 20px var(--shadow-outer-light);
        }

        .post-card-image {
            width: 100%;
            height: 200px;
            object-fit: cover;
            border-radius: var(--border-radius-small);
            margin-bottom: 20px;
            box-shadow: var(--box-shadow-flat); /* Slight shadow for image itself */
        }

        .post-card-category {
            display: inline-block;
            padding: 5px 10px;
            background-color: var(--accent-color);
            color: white;
            border-radius: 5px;
            font-size: 0.8em;
            margin-bottom: 10px;
            align-self: flex-start; /* Align to the start of the flex container */
            box-shadow: var(--box-shadow-flat);
        }
         .post-card-category:hover {
            background-color: var(--accent-color-darker);
        }


        .post-card-title {
            font-size: 1.6em;
            font-weight: 600;
            color: var(--primary-text-color);
            margin-bottom: 10px;
            line-height: 1.3;
        }

        .post-card-excerpt {
            font-size: 0.95em;
            color: var(--secondary-text-color);
            flex-grow: 1; /* Allows excerpt to take available space */
            margin-bottom: 20px;
        }

        .post-card-readmore {
            align-self: flex-start; /* Align button to left */
            text-decoration: none;
            color: var(--accent-color);
            font-weight: 500;
            padding: 8px 15px;
            border-radius: var(--border-radius-small);
            box-shadow: var(--box-shadow-flat);
            transition: all 0.3s ease;
        }
        .post-card-readmore:hover {
            background-color: var(--accent-color);
            color: white;
            box-shadow: var(--box-shadow-concave);
        }

        /* About Section */
        .about-section .container {
            background-color: var(--bg-color);
            border-radius: var(--border-radius-main);
            padding: 40px;
            box-shadow: var(--box-shadow-convex);
            display: flex; /* For potential image + text layout */
            align-items: center;
            gap: 30px;
        }
        .about-image {
            width: 200px;
            height: 200px;
            border-radius: 50%; /* Circular image */
            object-fit: cover;
            box-shadow: var(--box-shadow-convex);
            flex-shrink: 0; /* Prevent image from shrinking */
        }
        .about-content p {
            margin-bottom: 15px;
            font-size: 1.05em;
        }

        /* Footer */
        .main-footer {
            text-align: center;
            padding: 30px var(--container-padding);
            background-color: var(--bg-color);
            margin-top: 50px;
            border-top-left-radius: var(--border-radius-main);
            border-top-right-radius: var(--border-radius-main);
            box-shadow: inset 4px 4px 8px var(--shadow-inner-dark),
                        inset -4px -4px 8px var(--shadow-inner-light); /* Inner shadow for footer container */
        }
        .social-links {
            margin-bottom: 15px;
        }
        .social-links a {
            margin: 0 12px;
            display: inline-block;
            padding: 12px;
            border-radius: 50%;
            background-color: var(--bg-color);
            box-shadow: var(--box-shadow-convex);
            transition: all 0.3s ease;
        }
        .social-links a img {
            width: 24px;
            height: 24px;
            vertical-align: middle;
        }
        .social-links a:hover {
            box-shadow: var(--box-shadow-concave);
            transform: translateY(-3px);
        }
        .social-links a:hover img {
             filter: brightness(0.8) sepia(1) hue-rotate(180deg) saturate(5); /* Accent color on hover */
        }

        .copyright {
            font-size: 0.9em;
            color: var(--secondary-text-color);
        }

        /* Responsive Design */
        @media (max-width: 992px) {
            .hero-title {
                font-size: 2.8em;
            }
            .hero-subtitle {
                font-size: 1.3em;
            }
            .about-section .container {
                flex-direction: column;
                text-align: center;
            }
            .about-image {
                margin-bottom: 20px;
            }
        }

        @media (max-width: 768px) {
            .main-header .container {
                flex-direction: column;
                align-items: center;
            }
            .main-nav ul {
                margin-top: 20px;
                flex-wrap: wrap; /* Allow nav items to wrap */
                justify-content: center;
            }
            .main-nav ul li {
                margin: 5px 10px;
            }

            .hero {
                height: auto;
                min-height: 350px;
                padding: 20px;
            }
            .hero-title {
                font-size: 2.2em;
            }
            .hero-subtitle {
                font-size: 1.1em;
            }
            .cta-button {
                padding: 12px 25px;
                font-size: 1em;
            }
            .section-title {
                font-size: 2em;
            }
            .posts-grid {
                grid-template-columns: 1fr; /* Stack posts on smaller screens */
            }
            .post-card {
                margin-bottom: 20px;
            }
        }

        @media (max-width: 480px) {
            .logo {
                font-size: 1.5em;
            }
            .hero-title {
                font-size: 1.8em;
            }
            .hero-subtitle {
                font-size: 1em;
            }
            .container {
                width: 95%;
            }
            .post-card-title {
                font-size: 1.4em;
            }
            .social-links a {
                margin: 0 8px;
                padding: 10px;
            }
            .social-links a img {
                width: 20px;
                height: 20px;
            }
        }

        /* Animation utility classes (can be added by GSAP) */
        .fade-in { opacity: 0; }
        .slide-up { opacity: 0; transform: translateY(30px); }
        .scale-up { opacity: 0; transform: scale(0.9); }

    </style>
</head>
<body>

    <header class="main-header">
        <div class="container">
            <a href="#" class="logo anim-logo">我的博客</a>
            <nav class="main-nav">
                <ul>
                    <li><a href="index.html" class="active anim-nav-item">首页</a></li>
                    <li><a href="article.html" class="anim-nav-item">文章</a></li>
                    <li><a href="about.html" class="anim-nav-item">关于</a></li>
                    <li><a href="contact.html" class="anim-nav-item">联系</a></li>
                </ul>
            </nav>
        </div>
    </header>

    <main>
        <section class="hero">
            <div class="hero-content">
                <h1 class="hero-title anim-hero-title">探索·思考·分享</h1>
                <p class="hero-subtitle anim-hero-subtitle">记录每一点灵感,分享每一次成长。欢迎来到我的数字花园。</p>
                <a href="#latest-posts" class="cta-button anim-hero-cta">开始阅读</a>
            </div>
        </section>

        <section id="latest-posts" class="section latest-posts-section">
            <div class="container">
                <h2 class="section-title anim-section-title">最新博文</h2>
                <div class="posts-grid">
                    <article class="post-card anim-post-card">
                        <img src="https://picsum.photos/seed/post1/600/400" alt="博文封面" class="post-card-image">
                        <span class="post-card-category">技术</span>
                        <h3 class="post-card-title">深入理解现代前端框架的核心原理</h3>
                        <p class="post-card-excerpt">本文将带你探索React、Vue等现代前端框架背后的设计哲学与实现机制,助你成为更优秀的前端开发者...</p>
                        <a href="#" class="post-card-readmore">阅读全文 &rarr;</a>
                    </article>

                    <article class="post-card anim-post-card">
                        <img src="https://picsum.photos/seed/post2/600/400" alt="博文封面" class="post-card-image">
                        <span class="post-card-category">生活</span>
                        <h3 class="post-card-title">极简主义生活方式:少即是多</h3>
                        <p class="post-card-excerpt">分享我实践极简主义的心得体会,从物品整理到心态调整,体验简单生活的快乐与自由,发现生活中的小确幸...</p>
                        <a href="#" class="post-card-readmore">阅读全文 &rarr;</a>
                    </article>

                    <article class="post-card anim-post-card">
                        <img src="https://picsum.photos/seed/post3/600/400" alt="博文封面" class="post-card-image">
                        <span class="post-card-category">思考</span>
                        <h3 class="post-card-title">人工智能时代的批判性思维培养</h3>
                        <p class="post-card-excerpt">在信息爆炸和AI日益普及的今天,如何保持独立思考,培养批判性思维能力?本文将探讨其重要性与实践方法...</p>
                        <a href="#" class="post-card-readmore">阅读全文 &rarr;</a>
                    </article>
                </div>
            </div>
        </section>

        <section class="section about-section">
            <div class="container anim-about-container">
                <img src="https://picsum.photos/seed/avatar/200/200" alt="博主头像" class="about-image anim-about-image">
                <div class="about-content anim-about-content">
                    <h2 class="section-title" style="text-align: left; margin-bottom: 20px;">关于我</h2>
                    <p>你好!我是一名热衷于技术探索与生活分享的博主。这个小站是我记录学习心得、生活感悟和奇思妙想的地方。</p>
                    <p>我坚信持续学习和分享的力量,希望通过文字与你交流,共同成长。如果你对我的内容感兴趣,欢迎常来逛逛!</p>
                </div>
            </div>
        </section>

    </main>

    <footer class="main-footer anim-footer">
        <div class="container">
            <div class="social-links">
                <a href="#" title="GitHub" class="anim-social-icon"><img src="https://cdnjs.cloudflare.com/ajax/libs/simple-icons/3.0.1/github.svg" alt="GitHub"></a>
                <a href="#" title="LinkedIn" class="anim-social-icon"><img src="https://cdnjs.cloudflare.com/ajax/libs/simple-icons/3.0.1/linkedin.svg" alt="LinkedIn"></a>
                <a href="#" title="Twitter" class="anim-social-icon"><img src="https://cdnjs.cloudflare.com/ajax/libs/simple-icons/3.0.1/twitter.svg" alt="Twitter"></a>
                <a href="#" title="Email" class="anim-social-icon"><img src="https://cdnjs.cloudflare.com/ajax/libs/simple-icons/3.0.1/gmail.svg" alt="Email"></a>
            </div>
            <p class="copyright">&copy; <span id="currentYear"></span> 我的简约拟态博客. 保留所有权利.</p>
        </div>
    </footer>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            gsap.registerPlugin(ScrollTrigger);

            // 设置当前年份
            document.getElementById('currentYear').textContent = new Date().getFullYear();

            // --- 通用动画函数 ---
            const animateOnScroll = (selector, vars) => {
                gsap.utils.toArray(selector).forEach(elem => {
                    gsap.fromTo(elem,
                        { opacity: 0, y: 50, scale: 0.95, ...vars.from },
                        {
                            opacity: 1,
                            y: 0,
                            scale: 1,
                            duration: 0.8,
                            ease: 'power3.out',
                            scrollTrigger: {
                                trigger: elem,
                                start: 'top 85%', // 元素顶部到达视口85%时触发
                                toggleActions: 'play none none none', // 进入时播放,离开时不反向
                                // markers: true, // 调试用
                                ...vars.scrollTrigger
                            },
                            ...vars.to
                        }
                    );
                });
            };


            // --- 页面加载动画 ---
            const tlOnLoad = gsap.timeline({ defaults: { ease: "power2.out", duration: 0.7 }});

            tlOnLoad
                .fromTo('.anim-logo', {opacity: 0, y: -30}, {opacity: 1, y: 0, duration: 0.5}, 0.2)
                .staggerFromTo('.anim-nav-item', 0.3, {opacity:0, y: -20}, {opacity:1, y:0}, 0.15, "-=0.2")
                .fromTo('.anim-hero-title', {opacity:0, y: 30, scale:0.9}, {opacity:1, y:0, scale:1, duration: 0.8, ease: "elastic.out(1, 0.75)"}, 0.5)
                .fromTo('.anim-hero-subtitle', {opacity:0, y: 20}, {opacity:1, y:0}, "-=0.6")
                .fromTo('.anim-hero-cta', {opacity:0, scale:0.8}, {opacity:1, scale:1, ease: "back.out(1.7)"}, "-=0.4");

            // --- 滚动触发动画 ---

            // Section Titles
            animateOnScroll('.anim-section-title', { from: {y: 30, opacity: 0}, to: {duration: 0.6} });

            // Post Cards (staggered)
             gsap.utils.toArray('.anim-post-card').forEach((card, index) => {
                gsap.fromTo(card,
                    { opacity: 0, y: 60, scale: 0.9 },
                    {
                        opacity: 1,
                        y: 0,
                        scale: 1,
                        duration: 0.7,
                        delay: index * 0.15, // Stagger effect
                        ease: 'power3.out',
                        scrollTrigger: {
                            trigger: card.parentNode, // Trigger based on the grid container
                            start: 'top 80%',
                            toggleActions: 'play none none none',
                        }
                    }
                );
            });


            // About Section
            animateOnScroll('.anim-about-container', { from: { opacity: 0, scale: 0.9 }, to: { duration: 1, ease: 'expo.out' } });
            // Individual elements within about section can have slight delays if desired
            gsap.fromTo('.anim-about-image',
                { opacity: 0, x: -50, scale:0.8 },
                {
                    opacity: 1, x: 0, scale:1, duration: 0.8, ease: 'power3.out',
                    scrollTrigger: { trigger: '.anim-about-container', start: 'top 70%' }
                }
            );
            gsap.fromTo('.anim-about-content',
                { opacity: 0, x: 50 },
                {
                    opacity: 1, x: 0, duration: 0.8, ease: 'power3.out', delay: 0.2,
                    scrollTrigger: { trigger: '.anim-about-container', start: 'top 70%' }
                }
            );


            // Footer elements (social icons can be staggered)
            const footerTl = gsap.timeline({
                scrollTrigger: {
                    trigger: '.anim-footer',
                    start: 'top 95%',
                    toggleActions: 'play none none none'
                }
            });
            footerTl.fromTo('.anim-footer .copyright', {opacity:0, y:20}, {opacity:1, y:0, duration:0.6, ease:'power2.out'});
            gsap.utils.toArray('.anim-social-icon').forEach((icon, index) => {
                 footerTl.fromTo(icon,
                    { opacity: 0, y: 20, scale: 0.5 },
                    { opacity: 1, y: 0, scale: 1, duration: 0.4, ease: 'back.out(2)', delay: index * 0.1 },
                    "<0.1" // Stagger start relative to previous animation in timeline
                );
            });


            // --- Interactive Hover Animations (Neumorphism Enhancements) ---
            // Example for buttons (can be expanded to other elements)
            const neoHoverElements = document.querySelectorAll('.cta-button, .post-card-readmore, .main-nav ul li a, .logo, .social-links a');
            neoHoverElements.forEach(el => {
                const originalShadow = getComputedStyle(el).boxShadow;
                let hoverShadow = '';

                // Determine hover shadow based on existing style or a predefined one
                // This is a simplified example; for true neomorphism, shadow changes are key
                if (el.classList.contains('cta-button') || el.classList.contains('post-card-readmore')) {
                    hoverShadow = `inset 2px 2px 5px var(--shadow-inner-dark), inset -2px -2px 5px var(--shadow-inner-light)`;
                } else if (el.classList.contains('logo') || el.classList.contains('main-nav ul li a')) {
                     hoverShadow = `inset 3px 3px 7px var(--shadow-inner-dark), inset -3px -3px 7px var(--shadow-inner-light)`;
                } else if (el.closest('.social-links')) {
                     hoverShadow = `inset 3px 3px 6px var(--shadow-inner-dark), inset -3px -3px 6px var(--shadow-inner-light)`;
                }


                el.addEventListener('mouseenter', () => {
                    if(hoverShadow) { // Only apply if hoverShadow is defined
                        gsap.to(el, {
                            boxShadow: hoverShadow,
                            duration: 0.2,
                            ease: 'power1.inOut'
                        });
                    }
                    // For elements not using inset shadow on hover, maybe a slight scale or y-translate
                    if (!el.classList.contains('cta-button') && !el.classList.contains('post-card-readmore') && !el.classList.contains('logo') && !el.closest('.social-links') && !el.classList.contains('main-nav ul li a')) {
                         gsap.to(el, { y: -2, scale: 1.03, duration: 0.2, ease: 'power1.out' });
                    }
                });

                el.addEventListener('mouseleave', () => {
                     if(hoverShadow) {
                        gsap.to(el, {
                            boxShadow: originalShadow,
                            duration: 0.3,
                            ease: 'power1.inOut'
                        });
                     }
                     if (!el.classList.contains('cta-button') && !el.classList.contains('post-card-readmore') && !el.classList.contains('logo') && !el.closest('.social-links') && !el.classList.contains('main-nav ul li a')) {
                        gsap.to(el, { y: 0, scale: 1, duration: 0.2, ease: 'power1.out' });
                     }
                });

                // Active state for CTA style buttons
                if (el.classList.contains('cta-button') || el.classList.contains('post-card-readmore')) {
                    el.addEventListener('mousedown', () => {
                        gsap.to(el, {
                            boxShadow: `inset 4px 4px 8px var(--shadow-inner-dark), inset -4px -4px 8px var(--shadow-inner-light)`,
                            scale: 0.98,
                            duration: 0.1,
                            ease: 'power1.in'
                        });
                    });
                     el.addEventListener('mouseup', () => {
                        gsap.to(el, {
                            boxShadow: hoverShadow, // return to hover state shadow
                            scale: 1,
                            duration: 0.1,
                            ease: 'power1.out'
                        });
                    });
                     el.addEventListener('mouseleave', () => { // Ensure it resets if mouse leaves while pressed
                        gsap.to(el, {
                            boxShadow: originalShadow,
                            scale: 1,
                            duration: 0.1,
                            ease: 'power1.out'
                        });
                    });
                }

            });

            // Post card hover animation (already handled by CSS, but GSAP could do more complex things)
            // document.querySelectorAll('.post-card').forEach(card => {
            //     const originalShadow = getComputedStyle(card).boxShadow;
            //     card.addEventListener('mouseenter', () => {
            //         gsap.to(card, {
            //             y: -8,
            //             scale: 1.01,
            //             boxShadow: `10px 10px 20px ${getComputedStyle(document.documentElement).getPropertyValue('--shadow-outer-dark').trim()}, -10px -10px 20px ${getComputedStyle(document.documentElement).getPropertyValue('--shadow-outer-light').trim()}`,
            //             duration: 0.25,
            //             ease: 'power1.out'
            //         });
            //     });
            //     card.addEventListener('mouseleave', () => {
            //         gsap.to(card, {
            //             y: 0,
            //             scale: 1,
            //             boxShadow: originalShadow,
            //             duration: 0.25,
            //             ease: 'power1.out'
            //         });
            //     });
            // });


        });
    </script>
    <script src="snoweffect.js"></script>


</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peter123123123123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值