241 lines
4.3 KiB
HTML
241 lines
4.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>My Life in Twenty Years</title>
|
|
|
|
<style>
|
|
body {
|
|
margin:0;
|
|
font-family:Arial,sans-serif;
|
|
background:linear-gradient(to right,#4e54c8,#8f94fb);
|
|
color:white;
|
|
display:flex;
|
|
justify-content:center;
|
|
align-items:center;
|
|
height:100vh;
|
|
}
|
|
|
|
#app {
|
|
width:100%;
|
|
max-width:1200px;
|
|
}
|
|
|
|
/* 3-Spalten Layout */
|
|
.slide-layout {
|
|
display:grid;
|
|
grid-template-columns: 1fr 2fr 1fr;
|
|
align-items:center;
|
|
}
|
|
|
|
/* TEXT MITTE */
|
|
.text-content {
|
|
grid-column:2;
|
|
text-align:center;
|
|
}
|
|
|
|
h1 {font-size:70px;}
|
|
h2 {font-size:45px;}
|
|
li {font-size:28px; margin:10px 0;}
|
|
|
|
ul {
|
|
padding-left:0;
|
|
list-style-position:inside;
|
|
}
|
|
|
|
/* BILDER RECHTS */
|
|
.image-container {
|
|
grid-column:3;
|
|
display:flex;
|
|
flex-wrap:wrap;
|
|
gap:10px;
|
|
justify-content:center;
|
|
align-items:center;
|
|
}
|
|
|
|
/* 🔥 ANIMATION FIX */
|
|
.image-container img {
|
|
width:auto;
|
|
height:auto;
|
|
max-width:180px;
|
|
|
|
border-radius:10px;
|
|
|
|
opacity:0;
|
|
transform: scale(0.2) translateY(80px);
|
|
transition: all 0.8s cubic-bezier(.68,-0.55,.27,1.55);
|
|
}
|
|
|
|
/* großes Bild erste Seite */
|
|
.big-image img {
|
|
max-width:400px;
|
|
}
|
|
|
|
/* Buttons */
|
|
button {
|
|
padding:10px 20px;
|
|
font-size:18px;
|
|
margin:10px;
|
|
border:none;
|
|
border-radius:8px;
|
|
cursor:pointer;
|
|
}
|
|
|
|
#progress {
|
|
text-align:center;
|
|
margin-top:10px;
|
|
font-size:20px;
|
|
}
|
|
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="app">
|
|
<div id="slide-container"></div>
|
|
|
|
<div style="text-align:center;">
|
|
<button onclick="prevSlide()">Back</button>
|
|
<button onclick="nextSlide()">Next</button>
|
|
</div>
|
|
|
|
<div id="progress"></div>
|
|
</div>
|
|
|
|
<script>
|
|
|
|
// --- Slides ---
|
|
const slidesData = [
|
|
|
|
{type:"title", content:"Cro", images:[
|
|
"img1.jpg"
|
|
]},
|
|
|
|
{type:"list", title:"My Job", items:[
|
|
"I will work as a programmer!",
|
|
"I will love my job!",
|
|
"I will earn good money!"
|
|
], images:[
|
|
"img1.jpg","img2.jpg","img3.jpg","img4.jpg","img5.jpg"
|
|
]},
|
|
|
|
{type:"list", title:"My Home", items:[
|
|
"I will live in a modern house.",
|
|
"Maybe in a small city.",
|
|
"Very comfortable."
|
|
], images:[
|
|
"img1.jpg","img2.jpg","img3.jpg","img4.jpg","img5.jpg"
|
|
]},
|
|
|
|
{type:"list", title:"My Family", items:[
|
|
"Family is important.",
|
|
"I will be married.",
|
|
"I will have children."
|
|
], images:[
|
|
"img1.jpg","img2.jpg","img3.jpg","img4.jpg","img5.jpg"
|
|
]}
|
|
|
|
];
|
|
|
|
let currentSlide=0;
|
|
const container=document.getElementById('slide-container');
|
|
const progress=document.getElementById('progress');
|
|
|
|
// --- RENDER ---
|
|
function renderSlide(index){
|
|
|
|
container.innerHTML="";
|
|
|
|
const slide=slidesData[index];
|
|
|
|
const div=document.createElement('div');
|
|
div.classList.add('slide-layout');
|
|
|
|
// TEXT
|
|
const textDiv=document.createElement('div');
|
|
textDiv.classList.add('text-content');
|
|
|
|
if(slide.type==="title"){
|
|
const h1=document.createElement('h1');
|
|
h1.textContent=slide.content;
|
|
textDiv.appendChild(h1);
|
|
}
|
|
|
|
if(slide.type==="list"){
|
|
const h2=document.createElement('h2');
|
|
h2.textContent=slide.title;
|
|
textDiv.appendChild(h2);
|
|
|
|
const ul=document.createElement('ul');
|
|
|
|
slide.items.forEach(item=>{
|
|
const li=document.createElement('li');
|
|
li.textContent=item;
|
|
ul.appendChild(li);
|
|
});
|
|
|
|
textDiv.appendChild(ul);
|
|
}
|
|
|
|
// BILDER
|
|
const imgDiv=document.createElement('div');
|
|
imgDiv.classList.add('image-container');
|
|
|
|
if(index===0){
|
|
imgDiv.classList.add('big-image');
|
|
}
|
|
|
|
if(slide.images){
|
|
slide.images.forEach((src,i)=>{
|
|
const img=document.createElement('img');
|
|
img.src=src;
|
|
|
|
imgDiv.appendChild(img);
|
|
|
|
// 🔥 FIXED ANIMATION
|
|
setTimeout(()=>{
|
|
requestAnimationFrame(()=>{
|
|
img.style.opacity=1;
|
|
img.style.transform="scale(1) translateY(0)";
|
|
});
|
|
}, i*180);
|
|
});
|
|
}
|
|
|
|
div.appendChild(textDiv);
|
|
div.appendChild(imgDiv);
|
|
|
|
container.appendChild(div);
|
|
|
|
progress.textContent=`Slide ${index+1} / ${slidesData.length}`;
|
|
}
|
|
|
|
// --- NAVIGATION ---
|
|
function nextSlide(){
|
|
if(currentSlide<slidesData.length-1){
|
|
currentSlide++;
|
|
renderSlide(currentSlide);
|
|
}
|
|
}
|
|
|
|
function prevSlide(){
|
|
if(currentSlide>0){
|
|
currentSlide--;
|
|
renderSlide(currentSlide);
|
|
}
|
|
}
|
|
|
|
// KEYBOARD
|
|
document.addEventListener('keydown', e=>{
|
|
if(e.key==="ArrowRight") nextSlide();
|
|
if(e.key==="ArrowLeft") prevSlide();
|
|
});
|
|
|
|
// START
|
|
renderSlide(currentSlide);
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html> |