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

(图片来源网络,侵删)
最终效果预览
这个网页将包含以下功能和视觉效果:
- :带有打字机效果和闪烁光标的标题。
- 英雄展示区:使用卡片布局展示参赛的英雄,鼠标悬停时有动态效果。
- 赛程倒计时:实时显示距离总决赛开始还有多长时间。
- 比分板:模拟实时更新的比分。
- 荣誉墙:展示冠军奖杯和历届冠军信息。
- 响应式设计:在不同尺寸的屏幕上都能良好显示。
第一步:创建项目文件
创建一个文件夹,lol-worlds-final,然后在其中创建以下三个文件:
index.html(网页结构)style.css(样式表)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>© 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);
}
}
});
如何运行
- 将上述三段代码分别保存到对应的
index.html,style.css, 和script.js文件中。 - 确保这三个文件都在同一个文件夹(
lol-worlds-final)里。 - 用任意现代浏览器(如 Chrome, Firefox, Edge)打开
index.html文件。
你就可以看到一个功能完整、视觉酷炫的“英雄联盟总决赛”主题网页了!你可以基于这个源码进行修改和扩展,比如添加真实的API数据、更复杂的动画或游戏互动功能。

(图片来源网络,侵删)
