下面我将为你提供一个完整、可运行的网页源码,这个源码将包含 HTML 结构、CSS 样式和 JavaScript 交互,并详细解释每一部分的功能和实现思路。

英雄联盟总决赛网页源码
(图片来源网络,侵删)

最终效果预览

这个网页将包含以下功能和视觉效果:

  1. :带有打字机效果和闪烁光标的标题。
  2. 英雄展示区:使用卡片布局展示参赛的英雄,鼠标悬停时有动态效果。
  3. 赛程倒计时:实时显示距离总决赛开始还有多长时间。
  4. 比分板:模拟实时更新的比分。
  5. 荣誉墙:展示冠军奖杯和历届冠军信息。
  6. 响应式设计:在不同尺寸的屏幕上都能良好显示。

第一步:创建项目文件

创建一个文件夹,lol-worlds-final,然后在其中创建以下三个文件:

  1. index.html (网页结构)
  2. style.css (样式表)
  3. script.js (交互脚本)

第二步:编写 HTML 代码 (index.html)

这是网页的骨架,定义了所有的内容和结构。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">英雄联盟全球总决赛 - 荣耀之巅</title>
    <link rel="stylesheet" href="style.css">
    <!-- 引入字体图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
</head>
<body>
    <div class="container">
        <!-- 头部英雄区域 -->
        <header class="hero-section">
            <div class="hero-content">
                <h1 class="main-title" id="main-title"></h1>
                <p class="subtitle">巅峰对决,一触即发</p>
            </div>
            <div class="countdown" id="countdown">
                <p>总决赛倒计时</p>
                <div class="time-blocks">
                    <span id="days">00</span>天
                    <span id="hours">00</span>时
                    <span id="minutes">00</span>分
                    <span id="seconds">00</span>秒
                </div>
            </div>
        </header>
        <!-- 英雄展示区 -->
        <section class="champions-section">
            <h2>参赛英雄</h2>
            <div class="champions-grid" id="champions-grid">
                <!-- 英雄卡片将通过 JavaScript 动态生成 -->
            </div>
        </section>
        <!-- 比分板 -->
        <section class="scoreboard-section">
            <h2>实时比分</h2>
            <div class="scoreboard" id="scoreboard">
                <div class="team team-red">
                    <div class="team-info">
                        <i class="fas fa-shield-alt"></i>
                        <span class="team-name">红色方</span>
                    </div>
                    <div class="score" id="red-score">0</div>
                </div>
                <div class="vs">VS</div>
                <div class="team team-blue">
                    <div class="team-info">
                        <i class="fas fa-shield-alt"></i>
                        <span class="team-name">蓝色方</span>
                    </div>
                    <div class="score" id="blue-score">0</div>
                </div>
            </div>
            <button class="update-score-btn" onclick="updateScore()">模拟得分</button>
        </section>
        <!-- 荣誉墙 -->
        <section class="hall-of-fame">
            <h2>召唤师峡谷荣誉墙</h2>
            <div class="trophy">
                <i class="fas fa-trophy trophy-icon"></i>
            </div>
            <div class="champions-list">
                <h3>历届冠军</h3>
                <ul id="champions-list">
                    <li>2025 - <strong>T1</strong></li>
                    <li>2025 - <strong>DRX</strong></li>
                    <li>2025 - <strong>EDG</strong></li>
                    <li>2025 - <strong>DWG</strong></li>
                    <li>2025 - <strong>FPX</strong></li>
                </ul>
            </div>
        </section>
        <!-- 页脚 -->
        <footer>
            <p>&copy; 2025 英雄联盟全球总决赛. 本页面仅为演示用途.</p>
        </footer>
    </div>
    <script src="script.js"></script>
</body>
</html>

第三步:编写 CSS 代码 (style.css)

这是网页的“皮肤”,负责所有的视觉设计,包括颜色、字体、布局和动画。

英雄联盟总决赛网页源码
(图片来源网络,侵删)
/* --- 全局样式 --- */
@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700;900&display=swap');
:root {
    --primary-color: #ff6b35; /* 橙色,代表激情 */
    --secondary-color: #1a1a2e; /* 深蓝色,代表深邃 */
    --accent-color: #f7931e; /* 亮橙色,用于高亮 */
    --text-color: #ffffff;
    --bg-dark: #0f0f1e;
}
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body {
    font-family: 'Arial', sans-serif;
    background-color: var(--bg-dark);
    color: var(--text-color);
    line-height: 1.6;
    overflow-x: hidden;
}
.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 20px;
}
/* --- 头部英雄区域 --- */
.hero-section {
    text-align: center;
    padding: 60px 20px;
    background: linear-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.7)), url('https://images.unsplash.com/photo-1578662996442-48f60103fc96?q=80&w=1974&auto=format&fit=crop') no-repeat center center/cover;
    border-radius: 15px;
    margin-bottom: 40px;
}
.main-title {
    font-family: 'Orbitron', monospace;
    font-size: 3.5rem;
    font-weight: 900;
    color: var(--primary-color);
    text-shadow: 0 0 10px rgba(255, 107, 53, 0.5);
    margin-bottom: 10px;
}
{
    font-size: 1.5rem;
    color: var(--accent-color);
}
/* --- 倒计时 --- */
.countdown {
    margin-top: 30px;
    font-size: 1.2rem;
}
.time-blocks {
    display: flex;
    justify-content: center;
    gap: 15px;
    margin-top: 10px;
}
.time-blocks span {
    background-color: var(--secondary-color);
    padding: 10px 15px;
    border-radius: 8px;
    border: 2px solid var(--primary-color);
    min-width: 60px;
    font-family: 'Orbitron', monospace;
    font-weight: bold;
}
/* --- 英雄展示区 --- */
.champions-section {
    margin-bottom: 40px;
}
h2 {
    text-align: center;
    font-size: 2.5rem;
    margin-bottom: 30px;
    color: var(--accent-color);
}
.champions-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 20px;
}
.champion-card {
    background-color: var(--secondary-color);
    border-radius: 10px;
    overflow: hidden;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
    cursor: pointer;
    border: 1px solid var(--primary-color);
}
.champion-card:hover {
    transform: translateY(-10px);
    box-shadow: 0 10px 20px rgba(255, 107, 53, 0.3);
}
.champion-card img {
    width: 100%;
    height: 180px;
    object-fit: cover;
}
.champion-card-info {
    padding: 15px;
    text-align: center;
}
.champion-card h3 {
    color: var(--primary-color);
    margin-bottom: 5px;
}
.champion-card p {
    font-size: 0.9rem;
    color: #ccc;
}
/* --- 比分板 --- */
.scoreboard-section {
    background-color: var(--secondary-color);
    padding: 30px;
    border-radius: 15px;
    margin-bottom: 40px;
    text-align: center;
}
.scoreboard {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 30px;
    margin: 20px 0;
}
.team {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}
.team-info i {
    font-size: 2rem;
    color: var(--primary-color);
}
.team-name {
    font-size: 1.2rem;
    font-weight: bold;
}
.score {
    font-family: 'Orbitron', monospace;
    font-size: 4rem;
    font-weight: 900;
    color: var(--text-color);
    text-shadow: 0 0 15px rgba(255, 255, 255, 0.5);
}
.vs {
    font-size: 2rem;
    font-weight: bold;
    color: var(--accent-color);
    animation: pulse 2s infinite;
}
@keyframes pulse {
    0% { opacity: 1; }
    50% { opacity: 0.5; }
    100% { opacity: 1; }
}
.update-score-btn {
    background-color: var(--primary-color);
    color: white;
    border: none;
    padding: 12px 25px;
    font-size: 1rem;
    border-radius: 5px;
    cursor: pointer;
    transition: background-color 0.3s ease;
}
.update-score-btn:hover {
    background-color: var(--accent-color);
}
/* --- 荣誉墙 --- */
.hall-of-fame {
    text-align: center;
    padding: 40px;
    background-color: var(--secondary-color);
    border-radius: 15px;
}
.trophy {
    margin: 20px 0;
}
.trophy-icon {
    font-size: 6rem;
    color: var(--accent-color);
    text-shadow: 0 0 20px rgba(247, 147, 30, 0.7);
    animation: glow 2s ease-in-out infinite alternate;
}
@keyframes glow {
    from { text-shadow: 0 0 20px rgba(247, 147, 30, 0.7); }
    to { text-shadow: 0 0 30px rgba(247, 147, 30, 1), 0 0 40px rgba(247, 147, 30, 0.8); }
}
.champions-list {
    max-width: 600px;
    margin: 0 auto;
    text-align: left;
}
.champions-list ul {
    list-style: none;
    padding: 0;
}
.champions-list li {
    padding: 10px;
    border-bottom: 1px solid #444;
    font-size: 1.1rem;
}
.champions-list li:last-child {
    border-bottom: none;
}
/* --- 页脚 --- */
footer {
    text-align: center;
    margin-top: 40px;
    padding-top: 20px;
    border-top: 1px solid #333;
    color: #aaa;
}
/* --- 响应式设计 --- */
@media (max-width: 768px) {
    .main-title {
        font-size: 2.5rem;
    }
    .subtitle {
        font-size: 1.2rem;
    }
    .scoreboard {
        flex-direction: column;
        gap: 20px;
    }
    .vs {
        order: 1;
        font-size: 1.5rem;
    }
}

第四步:编写 JavaScript 代码 (script.js)

这是网页的大脑,负责实现动态效果,如打字机、倒计时、动态生成内容和模拟得分。

document.addEventListener('DOMContentLoaded', () => {
    // 1. 打字机效果
    const titleElement = document.getElementById('main-title');
    const titleText = '英雄联盟全球总决赛';
    let index = 0;
    function typeWriter() {
        if (index < titleText.length) {
            titleElement.innerHTML += titleText.charAt(index);
            index++;
            setTimeout(typeWriter, 150); // 控制打字速度
        } else {
            // 打字完成后,添加光标
            titleElement.innerHTML += '<span class="cursor">|</span>';
        }
    }
    typeWriter();
    // 2. 倒计时功能
    function updateCountdown() {
        // 设置一个未来的日期作为总决赛时间 (2025年11月19日)
        const finalDate = new Date("Nov 19, 2025 20:00:00").getTime();
        const now = new Date().getTime();
        const distance = finalDate - now;
        const days = Math.floor(distance / (1000 * 60 * 60 * 24));
        const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        const seconds = Math.floor((distance % (1000 * 60)) / 1000);
        document.getElementById("days").innerText = days.toString().padStart(2, '0');
        document.getElementById("hours").innerText = hours.toString().padStart(2, '0');
        document.getElementById("minutes").innerText = minutes.toString().padStart(2, '0');
        document.getElementById("seconds").innerText = seconds.toString().padStart(2, '0');
        if (distance < 0) {
            document.getElementById("countdown").innerHTML = "比赛已开始!";
        }
    }
    // 立即执行一次,然后每秒更新
    updateCountdown();
    setInterval(updateCountdown, 1000);
    // 3. 动态生成英雄卡片
    const championsGrid = document.getElementById('champions-grid');
    const champions = [
        { name: '亚索', title: '疾风剑豪', role: '上单', image: 'https://ddragon.leagueoflegends.com/cdn/img/champion/splash/Yasuo_0.jpg' },
        { name: '劫', title: '影流之主', role: '中单', image: 'https://ddragon.leagueoflegends.com/cdn/img/champion/splash/Zed_0.jpg' },
        { name: '伊泽瑞尔', title: '探险家', role: 'ADC', image: 'https://ddragon.leagueoflegends.com/cdn/img/champion/splash/Ezreal_0.jpg' },
        { name: '盲僧', title: '李青', role: '打野', image: 'https://ddragon.leagueoflegends.com/cdn/img/champion/splash/LeeSin_0.jpg' },
        { name: '锤石', title: '魂典典狱长', role: '辅助', image: 'https://ddragon.leagueoflegends.com/cdn/img/champion/splash/Thresh_0.jpg' },
        { name: '阿卡丽', title: '影流之镰', role: '中单', image: 'https://ddragon.leagueoflegends.comcdn/img/champion/splash/Akali_0.jpg' }
    ];
    champions.forEach(champion => {
        const card = document.createElement('div');
        card.className = 'champion-card';
        card.innerHTML = `
            <img src="${champion.image}" alt="${champion.name}">
            <div class="champion-card-info">
                <h3>${champion.name} - ${champion.title}</h3>
                <p>位置: ${champion.role}</p>
            </div>
        `;
        championsGrid.appendChild(card);
    });
    // 4. 模拟比分更新
    let redScore = 0;
    let blueScore = 0;
    function updateScore() {
        // 随机增加分数
        redScore += Math.floor(Math.random() * 3); // 0, 1, 或 2
        blueScore += Math.floor(Math.random() * 3);
        document.getElementById('red-score').innerText = redScore;
        document.getElementById('blue-score').innerText = blueScore;
        // 简单的获胜判定
        if (redScore >= 15 || blueScore >= 15) {
            const winner = redScore >= 15 ? '红色方' : '蓝色方';
            setTimeout(() => {
                alert(`🎉 ${winner} 获胜!`);
                // 重置比分
                redScore = 0;
                blueScore = 0;
                document.getElementById('red-score').innerText = redScore;
                document.getElementById('blue-score').innerText = blueScore;
            }, 500);
        }
    }
});

如何运行

  1. 将上述三段代码分别保存到对应的 index.html, style.css, 和 script.js 文件中。
  2. 确保这三个文件都在同一个文件夹(lol-worlds-final)里。
  3. 用任意现代浏览器(如 Chrome, Firefox, Edge)打开 index.html 文件。

你就可以看到一个功能完整、视觉酷炫的“英雄联盟总决赛”主题网页了!你可以基于这个源码进行修改和扩展,比如添加真实的API数据、更复杂的动画或游戏互动功能。

英雄联盟总决赛网页源码
(图片来源网络,侵删)