Java 30周年
Java发布于1995年,一开始开发小组只想用C++做,后来发现移植问题太麻烦又严重。
最终想出了字节码这个办法,从此一发不可收拾。
从机顶盒到互联网,到如今的AI。
Java的足迹无处不在,也正因此。
完善的生态让Java更加繁荣,超快的发布周期,使Java不至于落伍。
让DeepSeek给Java送祝福
整体效果不错,页面还有动态效果。
提示词
Java语言今年30岁了,帮我生成一个祝福网页。
要求:
1. 美观,大气;
2. 充满趣味;
3. 科技风,带一点搞怪;
4. 能体现Java语言的稳重;
5. 能展现巨大发展前景。
可以使用d3或者three.js等动画库。
思考过程
我们将创建一个具有科技感和趣味性的网页,庆祝Java语言30岁生日。为了满足要求,我们将结合以下元素:
1. 使用Three.js创建3D背景,比如旋转的Java咖啡杯(Java的logo)和飘浮的代码字符,体现科技风。
2. 设计一个中心区域,展示祝福语,字体要大气,同时带有搞怪的动画效果(比如文字跳动、变色)。
3. 通过时间线或3D柱状图展示Java的发展历程和前景,使用D3.js或Three.js实现。
4. 整体色调以科技蓝为主,搭配Java的红色(咖啡色)和橙色,体现稳重又不失活力。
具体实现步骤:
1. 创建HTML结构,引入Three.js和D3.js(如果需要),以及自定义的CSS和JS文件。
2. 使用Three.js创建3D场景,包括:
- 背景:星空或网格背景。
- 中央放置一个3D的Java咖啡杯模型(如果没有现成的模型,可以用一个圆柱体加一个手柄,然后贴上Java的logo纹理)。
- 随机飘浮的字符,可以是Java相关的关键字(如“public”、“class”、“static”等)或者0和1,营造科技感。
3. 在页面中央放置祝福语,例如:“Happy 30th Birthday, Java!” 并添加动画效果。
4. 在页面下方,使用D3.js创建一个时间线,展示Java历史上的重大事件,以及未来的发展前景(可以虚构一些未来的事件,体现前景)。
5. 添加一些搞怪的元素,比如在某个位置隐藏一些彩蛋(点击咖啡杯会弹出一些搞怪的消息或动画)。
考虑到时间,我们可能无法构建一个完整的3D咖啡杯模型,但可以用简单的几何体组合。
由于代码量可能较大,这里我将提供一个简化的版本,重点放在Three.js的3D场景和飘浮的字符上,时间线部分用静态的D3图表示意。
注意:由于Three.js需要引入一些库,我们将使用CDN链接。
开始编写代码:
源码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Java 30周年 - 生日快乐!</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.4.4/d3.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background: linear-gradient(135deg, #0f172a, #1e293b);
color: #f8fafc;
min-height: 100vh;
overflow-x: hidden;
position: relative;
}
#background-canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
position: relative;
z-index: 1;
}
header {
text-align: center;
padding: 3rem 1rem;
position: relative;
}
.logo-container {
display: flex;
justify-content: center;
margin-bottom: 1.5rem;
}
.java-logo {
width: 120px;
height: 120px;
background: linear-gradient(135deg, #f97316, #ea580c);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 4rem;
font-weight: bold;
color: white;
box-shadow: 0 0 30px rgba(249, 115, 22, 0.6);
animation: pulse 2s infinite;
position: relative;
z-index: 2;
}
.java-logo::after {
content: "☕";
position: absolute;
top: -20px;
right: -20px;
font-size: 2rem;
transform: rotate(15deg);
}
@keyframes pulse {
0% { transform: scale(1); box-shadow: 0 0 20px rgba(249, 115, 22, 0.6); }
50% { transform: scale(1.05); box-shadow: 0 0 40px rgba(249, 115, 22, 0.8); }
100% { transform: scale(1); box-shadow: 0 0 20px rgba(249, 115, 22, 0.6); }
}
h1 {
font-size: 4.5rem;
margin-bottom: 1rem;
background: linear-gradient(to right, #60a5fa, #f97316);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
letter-spacing: -2px;
}
.subtitle {
font-size: 1.8rem;
margin-bottom: 2rem;
color: #cbd5e1;
max-width: 800px;
margin: 0 auto 2rem;
line-height: 1.4;
}
.highlight {
color: #f97316;
font-weight: bold;
}
.stats-section {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
gap: 1.5rem;
margin: 3rem 0;
}
.stat-card {
background: rgba(30, 41, 59, 0.7);
border-radius: 12px;
padding: 1.5rem;
text-align: center;
flex: 1;
min-width: 200px;
backdrop-filter: blur(10px);
border: 1px solid rgba(100, 116, 139, 0.3);
transition: transform 0.3s ease;
}
.stat-card:hover {
transform: translateY(-5px);
background: rgba(30, 41, 59, 0.9);
}
.stat-number {
font-size: 3rem;
font-weight: bold;
color: #60a5fa;
margin-bottom: 0.5rem;
}
.stat-label {
font-size: 1.1rem;
color: #cbd5e1;
}
.timeline-section {
background: rgba(15, 23, 42, 0.8);
border-radius: 16px;
padding: 2.5rem;
margin: 4rem 0;
backdrop-filter: blur(10px);
border: 1px solid rgba(100, 116, 139, 0.3);
}
.section-title {
text-align: center;
font-size: 2.5rem;
margin-bottom: 2.5rem;
color: #f8fafc;
position: relative;
}
.section-title::after {
content: "";
display: block;
width: 100px;
height: 4px;
background: linear-gradient(to right, #60a5fa, #f97316);
margin: 0.5rem auto;
border-radius: 2px;
}
.timeline {
position: relative;
max-width: 900px;
margin: 0 auto;
}
.timeline::before {
content: "";
position: absolute;
top: 0;
bottom: 0;
width: 4px;
background: linear-gradient(to bottom, #60a5fa, #f97316);
left: 50%;
margin-left: -2px;
}
.timeline-item {
position: relative;
width: 50%;
padding: 1.5rem;
}
.timeline-item:nth-child(odd) {
left: 0;
text-align: right;
padding-right: 3rem;
}
.timeline-item:nth-child(even) {
left: 50%;
padding-left: 3rem;
}
.timeline-content {
background: rgba(30, 41, 59, 0.9);
padding: 1.5rem;
border-radius: 12px;
border: 1px solid rgba(100, 116, 139, 0.3);
position: relative;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
}
.timeline-year {
font-size: 1.8rem;
font-weight: bold;
color: #f97316;
margin-bottom: 0.5rem;
}
.timeline-title {
font-size: 1.4rem;
margin-bottom: 0.8rem;
color: #f8fafc;
}
.timeline-desc {
color: #cbd5e1;
line-height: 1.5;
}
.future-section {
text-align: center;
padding: 4rem 2rem;
margin: 4rem 0;
background: rgba(15, 23, 42, 0.8);
border-radius: 16px;
backdrop-filter: blur(10px);
border: 1px solid rgba(100, 116, 139, 0.3);
}
.future-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
margin-top: 3rem;
}
.future-card {
background: rgba(30, 41, 59, 0.9);
border-radius: 12px;
padding: 2rem;
text-align: center;
transition: transform 0.3s ease;
border: 1px solid rgba(100, 116, 139, 0.3);
}
.future-card:hover {
transform: translateY(-10px);
background: rgba(30, 41, 59, 1);
}
.future-icon {
font-size: 3.5rem;
margin-bottom: 1rem;
color: #60a5fa;
}
.future-title {
font-size: 1.5rem;
margin-bottom: 1rem;
color: #f8fafc;
}
.future-desc {
color: #cbd5e1;
line-height: 1.5;
}
.celebration {
text-align: center;
margin: 5rem 0;
}
.cake {
font-size: 5rem;
margin-bottom: 2rem;
animation: bounce 2s infinite;
display: inline-block;
}
@keyframes bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-20px); }
}
.birthday-message {
font-size: 2rem;
max-width: 800px;
margin: 0 auto;
line-height: 1.6;
color: #f8fafc;
}
.birthday-message span {
color: #f97316;
font-weight: bold;
}
footer {
text-align: center;
padding: 2rem;
color: #94a3b8;
font-size: 1rem;
border-top: 1px solid rgba(100, 116, 139, 0.3);
margin-top: 3rem;
}
.code-rain {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 0;
opacity: 0.1;
}
@media (max-width: 768px) {
h1 {
font-size: 3rem;
}
.subtitle {
font-size: 1.4rem;
}
.timeline::before {
left: 30px;
}
.timeline-item {
width: 100%;
padding-left: 70px;
padding-right: 25px;
text-align: left;
}
.timeline-item:nth-child(odd) {
text-align: left;
padding-right: 25px;
}
.timeline-item:nth-child(even) {
left: 0;
padding-left: 70px;
}
}
</style>
</head>
<body>
<!-- 3D背景 -->
<canvas id="background-canvas"></canvas>
<!-- 代码雨效果 -->
<div class="code-rain"></div>
<div class="container">
<header>
<div class="logo-container">
<div class="java-logo">J</div>
</div>
<h1>Java 30周年</h1>
<p class="subtitle">从1995年诞生至今,Java已经<span class="highlight">稳健运行了整整30年</span>!<br>让我们一起庆祝这个改变世界的编程语言的辉煌历程!</p>
</header>
<div class="stats-section">
<div class="stat-card">
<div class="stat-number">30</div>
<div class="stat-label">年发展历程</div>
</div>
<div class="stat-card">
<div class="stat-number">51亿+</div>
<div class="stat-label">台设备运行Java</div>
</div>
<div class="stat-card">
<div class="stat-number">90亿+</div>
<div class="stat-label">Java卡运行中</div>
</div>
<div class="stat-card">
<div class="stat-number">97%</div>
<div class="stat-label">企业级应用使用Java</div>
</div>
</div>
<div class="timeline-section">
<h2 class="section-title">Java发展历程</h2>
<div class="timeline">
<div class="timeline-item">
<div class="timeline-content">
<div class="timeline-year">1995</div>
<div class="timeline-title">Java诞生</div>
<div class="timeline-desc">Sun Microsystems发布Java 1.0,口号"Write Once, Run Anywhere"</div>
</div>
</div>
<div class="timeline-item">
<div class="timeline-content">
<div class="timeline-year">1998</div>
<div class="timeline-title">Java 2发布</div>
<div class="timeline-desc">引入Swing、集合框架和JIT编译器</div>
</div>
</div>
<div class="timeline-item">
<div class="timeline-content">
<div class="timeline-year">2004</div>
<div class="timeline-title">Java 5里程碑</div>
<div class="timeline-desc">引入泛型、注解、自动装箱和枚举</div>
</div>
</div>
<div class="timeline-item">
<div class="timeline-content">
<div class="timeline-year">2009</div>
<div class="timeline-title">Oracle收购Sun</div>
<div class="timeline-desc">Oracle以74亿美元收购Sun Microsystems</div>
</div>
</div>
<div class="timeline-item">
<div class="timeline-content">
<div class="timeline-year">2014</div>
<div class="timeline-title">Java 8发布</div>
<div class="timeline-desc">引入Lambda表达式和Stream API</div>
</div>
</div>
<div class="timeline-item">
<div class="timeline-content">
<div class="timeline-year">2023</div>
<div class="timeline-title">Java 21 LTS</div>
<div class="timeline-desc">虚拟线程、记录模式等重大更新</div>
</div>
</div>
</div>
</div>
<div class="future-section">
<h2 class="section-title">Java的未来前景</h2>
<div class="future-grid">
<div class="future-card">
<div class="future-icon">☁️</div>
<div class="future-title">云原生Java</div>
<div class="future-desc">GraalVM和Quarkus等框架推动Java在云原生领域的应用</div>
</div>
<div class="future-card">
<div class="future-icon">🤖</div>
<div class="future-title">AI与机器学习</div>
<div class="future-desc">Deeplearning4j等库使Java成为AI开发的重要工具</div>
</div>
<div class="future-card">
<div class="future-icon">📱</div>
<div class="future-title">移动开发</div>
<div class="future-desc">Kotlin与Java的协同发展持续推动Android生态</div>
</div>
<div class="future-card">
<div class="future-icon">🚀</div>
<div class="future-title">性能优化</div>
<div class="future-desc">Project Loom和Valhalla等计划持续提升Java性能</div>
</div>
</div>
</div>
<div class="celebration">
<div class="cake">🎂</div>
<p class="birthday-message">
30年风雨兼程,<span>Java</span>依然充满活力!<br>
在这个特殊的日子里,让我们举杯<span>☕</span>庆祝!<br>
<span>Happy 30th Birthday, Java!</span>
</p>
</div>
<footer>
<p>© 2024 Java 30周年纪念 | Java是Oracle的注册商标</p>
<p>感谢Java社区30年来的不懈贡献!</p>
</footer>
</div>
<script>
// 初始化Three.js场景
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({
canvas: document.getElementById('background-canvas'),
alpha: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
// 创建粒子系统
const particlesGeometry = new THREE.BufferGeometry();
const particlesCount = 5000;
const posArray = new Float32Array(particlesCount * 3);
const colorArray = new Float32Array(particlesCount * 3);
for(let i = 0; i < particlesCount * 3; i++) {
posArray[i] = (Math.random() - 0.5) * 50;
colorArray[i] = Math.random();
}
particlesGeometry.setAttribute('position', new THREE.BufferAttribute(posArray, 3));
particlesGeometry.setAttribute('color', new THREE.BufferAttribute(colorArray, 3));
const particlesMaterial = new THREE.PointsMaterial({
size: 0.1,
vertexColors: true,
transparent: true,
opacity: 0.7
});
const particlesMesh = new THREE.Points(particlesGeometry, particlesMaterial);
scene.add(particlesMesh);
camera.position.z = 5;
// 添加Java标志
const addJavaLogo = () => {
const geometry = new THREE.TorusGeometry(1.5, 0.4, 16, 100);
const material = new THREE.MeshBasicMaterial({
color: 0xf97316,
wireframe: true
});
const torus = new THREE.Mesh(geometry, material);
torus.position.x = -3;
torus.position.y = 1;
scene.add(torus);
const geometry2 = new THREE.CylinderGeometry(1, 1, 0.5, 32);
const material2 = new THREE.MeshBasicMaterial({
color: 0x60a5fa,
wireframe: true
});
const cylinder = new THREE.Mesh(geometry2, material2);
cylinder.position.x = 3;
cylinder.position.y = -1;
scene.add(cylinder);
}
addJavaLogo();
// 动画循环
function animate() {
requestAnimationFrame(animate);
particlesMesh.rotation.x += 0.0005;
particlesMesh.rotation.y += 0.001;
scene.children.forEach((child, index) => {
if(index > 0) { // 除了粒子系统外的其他对象
child.rotation.x += 0.005;
child.rotation.y += 0.005;
}
});
renderer.render(scene, camera);
}
animate();
// 窗口大小调整
window.addEventListener('resize', () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
});
// 代码雨效果
const codeRain = document.querySelector('.code-rain');
const characters = '01{}()<>;:,.=+-*/%&|^~!?@#$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
function createCodeRain() {
const columns = Math.floor(window.innerWidth / 20);
for(let i = 0; i < columns; i++) {
const column = document.createElement('div');
column.classList.add('code-column');
column.style.left = `${i * 20}px`;
column.style.animationDuration = `${Math.random() * 5 + 3}s`;
column.style.animationDelay = `${Math.random() * 2}s`;
// 创建列中的字符
const chars = Math.floor(Math.random() * 20) + 15;
for(let j = 0; j < chars; j++) {
const char = document.createElement('span');
char.textContent = characters.charAt(Math.floor(Math.random() * characters.length));
char.style.opacity = Math.random() * 0.5 + 0.1;
column.appendChild(char);
}
codeRain.appendChild(column);
}
}
createCodeRain();
// 时间线动画
const timelineItems = document.querySelectorAll('.timeline-item');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if(entry.isIntersecting) {
entry.target.style.opacity = 1;
entry.target.style.transform = 'translateY(0)';
}
});
}, { threshold: 0.1 });
timelineItems.forEach(item => {
item.style.opacity = 0;
item.style.transform = 'translateY(30px)';
item.style.transition = 'opacity 0.5s ease, transform 0.5s ease';
observer.observe(item);
});
</script>
</body>
</html>
这次的DeepSeek-R1-0528更新代码生成能力强的超乎想象,不敢想R2推出的时候得有多强。