<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>窗边风景动画</title><link rel="stylesheet" href="./style.css">
</head>
<body><div class="window-top" id="window-top"></div><div class="window-square" id="window-main"></div><div class="inner-line-hz-one"></div><div class="inner-line-hz-two"></div><div class="inner-line-hz-three"></div><div class="inner-line-vt"></div><div class="floor-line"></div><div class="plant-one"></div><div class="plant-two"></div><div class="plant-two-shadow"></div><div class="flower-blue-leaf"></div><div class="flower-blue-line"></div><div class="flower-blue-leaf-two"></div><div class="flower-blue-line-two"></div><div class="plant-shadow"></div><div class="root-one"></div><div class="root-two"></div><div class="root-three"></div><div class="root-four"></div><div class="root-five"></div><div class="root-six"></div><div class="main-leaf-one"></div><div class="main-leaf-two"></div><div class="main-leaf-three"></div><div class="main-leaf-four"></div><div class="main-leaf-five"></div><div class="main-leaf-six"></div><div class="cloud-one c"></div><div class="cloud-two c"></div><div class="cloud-three c"></div><div class="cloud-ball-one c"></div><div class="cloud-ball-two c"></div><div class="cloud-ball-three c"></div><div class="cloud-ball-four c"></div><div class="cloud-ball-five c"></div><div class="cloud-ball-six c"></div><div class="lamp" id="light-switch"></div><div class="lamp-wire"></div><div class="lamp-shadow"></div><div class="star-one s"></div><div class="star-two s"></div><div class="star-three s"></div><div class="star-four s"></div><div class="star-five s"></div><div class="star-six s"></div><div class="moon"></div><div class="moon-crater"></div><div class="light-source"></div><script src="./script.js"></script>
</body>
</html>
const lamp = document.getElementById("light-switch");
const topWindow = document.getElementById("window-top");
const mainWindow = document.getElementById("window-main");
const lightSource = document.querySelector(".light-source");
const moon = document.querySelector(".moon");
const clouds = document.querySelectorAll(".c");
const stars = document.querySelectorAll(".s");
lamp.addEventListener("click", () => {topWindow.classList.toggle("night");mainWindow.classList.toggle("night");clouds.forEach(c => c.classList.toggle("hide-cloud"));lightSource.classList.toggle("show-light");moon.classList.toggle("show-moon");stars.forEach(s => s.classList.toggle("show-star"));
});
:root {--page-background: #fef5e7;--light-purple: #adbdfc;--window-top-height: 45;--window-top-width: 40;--window-day-background: #d6eaf8;--window-square-height: 40;--window-square-width: 40;--floor-line-height: 1;--floor-line-width: 80;--inner-line-vt-width: 62;--plant-one-height: 6;--plant-one-width: 9;--plant-two-shadow-height: .5;--plant-two-shadow-width: 4;--flower-blue-height: 6;--flower-blue-width: 3;--flower-blue-line-height: .2;--flower-blue-line-width: 5;--flower-two-blue-height: 7;--flower-two-blue-width: 4.5;--root-height: 10;--root-width: 33;--main-leaf-height: 8;--main-leaf-width: 8;--cloud-base-height: 8;--cloud-base-width: 17;--cloud-ball-height: 5;--cloud-ball-width: 5;--lamp-height: 15;--lamp-width: 19;--lamp-wire-height: 70;--lamp-wire-width: .1; --star-height: 1.2;--star-width: 1.2;--light-source-height: 20;--light-source-width: 20;--moon-height: 10;--moon-width: 10;
}
body {position: fixed;top: 55%;left: 50%;transform: translate(-50%, -50%);background: var(--page-background);
}
.window-square {height: calc(var(--window-square-height) * 1vmin);width: calc(var(--window-square-width) * 1vmin);background: var(--window-day-background);
}.window-top {height: calc(var(--window-top-height) * 1vmin);width: calc(var(--window-top-width) * 1vmin);border-radius: 50%;position: fixed;top: -55%;background: linear-gradient(to bottom, var(--window-day-background) 50%, transparent 50%);
}
.floor-line {position: fixed;left: -45%;height: calc(var(--floor-line-height) / 3 * 1vmin);width: calc(var(--floor-line-width) * 1vmin);background: #AAA;border-radius: 1rem;
}.inner-line-hz-one,
.inner-line-hz-two,
.inner-line-hz-three,
.inner-line-vt {position: fixed;top: -5%;height: calc(var(--floor-line-height) / 6 * 1vmin);width: calc(var(--window-square-width) * 1vmin);background: #AAA;
}.inner-line-hz-one {top: 33%;
}.inner-line-hz-two {top: 70%;
}.inner-line-vt {top: 22.4%;left: -27%;transform: rotate(90deg);width: calc(var(--inner-line-vt-width) * 1vmin);
}
.plant-one {position: fixed;bottom: -1%;right: -8%;height: calc(var(--plant-one-height) * 1vmin);width: calc(var(--plant-one-width) * 1vmin);background: linear-gradient(to bottom, #000 6%, #ba4a00 12%);border-radius: 13%;clip-path: polygon(0 0, 100% 0, 80% 100%, 19% 100%);
}.plant-two {position: fixed;bottom: -5.2%;right: -12%;z-index: 999;height: calc(var(--plant-one-height) / 1.5 * 1vmin);width: calc(var(--plant-one-width) / 2 * 1vmin);background: linear-gradient(to bottom, #000 5%, #eb8fbb 10%);border-radius: 10%;clip-path: polygon(0 0, 100% 0, 80% 100%, 19% 100%);
}
.plant-two-shadow {height: calc(var(--plant-two-shadow-height) * 1vmin);width: calc(var(--plant-two-shadow-width) * 1vmin);background: #000;position: fixed;z-index: -1;bottom: -4.9%;right: -15%;border-radius: 50%;box-shadow: 0px 0px 1px 0px #000;
}
.flower-blue-leaf {position: fixed;height: calc(var(--flower-blue-height) * 1vmin);width: calc(var(--flower-blue-width) * 1vmin);background: #6e8ce9;border-radius: 95% 0;transform: rotate(185deg);border-left: 1px solid #111;border-right: 1px solid #111;bottom: 4.3%;right: -16%;
}.flower-blue-line {position: fixed;height: calc(var(--flower-blue-line-height) * 1vmin);width: calc(var(--flower-blue-line-width) * 1vmin);background: #333;bottom: 10%;right: -17.4%;transform: rotate(-63deg);
}.flower-blue-leaf-two {position: fixed;height: calc(var(--flower-two-blue-height) * 1vmin);width: calc(var(--flower-two-blue-width) * 1vmin);border-left: 1px solid #111;border-right: 1px solid #111;background: #6e8ce9;border-radius: 95% 0;transform: rotate(-48deg);bottom: 5.5%;right: -10%;
}.flower-blue-line-two {position: fixed;height: calc(var(--flower-blue-line-height) * 1vmin);width: calc(var(--flower-blue-line-width) * 1vmin);background: #333;bottom: 10%;right: -12%;transform: rotate(70deg);
}
.root-one {position: fixed;height: calc(var(--root-height) * 1vmin);width: calc(var(--root-width) * 1vmin);top: 35%;right: -49%;z-index: 88;border: 1px solid #000;border-color: #000 transparent transparent transparent;border-radius: 50% / calc(var(--root-height) / 6 * 1vmin) calc(var(--root-height) * 1vmin) 0 0;transform: rotate(-90deg);
}.root-two {position: fixed;height: calc(var(--root-height) * 1vmin);width: calc(var(--root-width) / 1.9 * 1vmin);top: 59%;right: -2.8%;z-index: 88;border: 1px solid #000;border-color: #000 transparent transparent transparent;border-radius: 60% / calc(var(--root-height) * 1vmin) calc(var(--root-height) / 3.5 * 1vmin) 0 0;transform: rotate(69deg);
}.root-two {position: fixed;height: calc(var(--root-height) * 1vmin);width: calc(var(--root-width) / 1.9 * 1vmin);top: 59%;right: -2.8%;z-index: 88;border: 1px solid #000;border-color: #000 transparent transparent transparent;border-radius: 60% / calc(var(--root-height) * 1vmin) calc(var(--root-height) / 3.5 * 1vmin) 0 0;transform: rotate(69deg);
}.root-three {position: fixed;height: calc(var(--root-height) * 1vmin);width: calc(var(--root-width) / 1.5 * 1vmin);top: 45%;right: -8.1%;z-index: 88;border: 1px solid #000;border-color: #000 transparent transparent transparent;border-radius: 60% / calc(var(--root-height) * 1vmin) calc(var(--root-height) / 14 * 1vmin) 0 0;transform: rotate(81deg);
}.root-four {position: fixed;height: calc(var(--root-height) * 1vmin);width: calc(var(--root-width) / 2.7 * 1vmin);top: 17%;right: -19%;z-index: 80;border: 1px solid #000;border-color: #000 transparent transparent transparent;border-radius: 60% / calc(var(--root-height) * 1vmin) calc(var(--root-height) / 8 * 1vmin) 0 0;transform: rotate(-85deg);
}.root-five {position: fixed;height: calc(var(--root-height) * 1vmin);width: calc(var(--root-width) / 1.5 * 1vmin);top: 39%;right: -39.3%;z-index: 88;border: 1px solid #000;border-color: #000 transparent transparent transparent;border-radius: 50% / calc(var(--root-height) / 1.45 * 1vmin) calc(var(--root-height) * 1vmin) 0 0;transform: rotate(-60deg);
}.root-six {position: fixed;height: calc(var(--root-height) * 1vmin);width: calc(var(--root-width) / 1.65 * 1vmin);top: 57%;right: -38%;z-index: 88;border: solid 1px #000;border-color: #000 transparent transparent transparent;border-radius: 50% / calc(var(--root-height) / 1.6 * 1vmin) calc(var(--root-height) * 1vmin) 0 0;transform: rotate(-60deg);
}
.main-leaf-one {position: fixed;top: 28%;right: 8%;z-index: 50;height: calc(var(--main-leaf-height) * 1vmin);width: calc(var(--main-leaf-width) * 1vmin);border-radius: 85% 5%;border-left: .5px solid #111;border-bottom: .5px solid #111;background: #4d8473;transform: rotate(93deg);
}.main-leaf-two {position: fixed;top: 48%;right: 8%;z-index: 50;height: calc(var(--main-leaf-height) * 1vmin);width: calc(var(--main-leaf-width) * 1vmin);border-radius: 85% 0%;border-left: 1px solid #111;border-bottom: 1px solid #111;background: #4d8473;transform: rotate(85deg);
}.main-leaf-three {position: fixed;top: 0%;right: -8.5%;z-index: 50;height: calc(var(--main-leaf-height) * 1.1 * 1vmin);width: calc(var(--main-leaf-width) * 1.3 * 1vmin);border-radius: 95% 10%;border-right: 1px solid #111;border-top: 1px solid #111;background: #4d8473;transform: rotate(-35deg);
}.main-leaf-four {position: fixed;top: 1%;right: -19%;z-index: 55;height: calc(var(--main-leaf-height) * 1.3 * 1vmin);width: calc(var(--main-leaf-width) * 1.2 * 1vmin);border-radius: 85% 5%;border-right: 1px solid #111;border-top: 1px solid #111;background: #4d8473;transform: rotate(-10deg);
}.main-leaf-five {position: fixed;top: 21%;right: -26%;z-index: 55;height: calc(var(--main-leaf-height) * 1.3 * 1vmin);width: calc(var(--main-leaf-width) * 1vmin);border-radius: 85% 5%;border-right: 1px solid #111;border-top: 1px solid #111;background: #4d8473;transform: rotate(18deg);
}.main-leaf-six {position: fixed;top: 46%;right: -30%;z-index: 55;height: calc(var(--main-leaf-height) / 1.2 * 1vmin);width: calc(var(--main-leaf-width) * 1.5 * 1vmin);border-radius: 95% 0%;border-right: 1px solid #111;border-top: 1px solid #111;background: #4d8473;transform: rotate(-8deg);
}
.cloud-one {height: calc(var(--cloud-base-height) / 1.2 * 1vmin);width: calc(var(--cloud-base-width) * 1vmin);position: fixed;top: 50%;left: 0%;border-radius: 50%;background: linear-gradient(to bottom, #fff 50%, transparent 50%);animation: cloud 4s infinite;
}.cloud-two {width: calc(var(--cloud-base-width) * 1vmin);height: calc(var(--cloud-base-height) / 1.3 * 1vmin);background: #fff;position: fixed;top: 0%;left: 0%;border-radius: 50%;background: linear-gradient(to bottom, #fff 50%, transparent 50%);animation: cloud 4s infinite;
}.cloud-three {width: calc(var(--cloud-base-width) * 1.1 * 1vmin);height: calc(var(--cloud-base-height) / 1.2 * 1vmin);position: fixed;top: -30%;right: 5%;border-radius: 50%;background: linear-gradient(to bottom, #fff 50%, transparent 50%);animation: cloud 4s infinite;
}.cloud-ball-one {position: fixed;height: calc(var(--cloud-ball-height) * 1.5 * 1vmin);width: calc(var(--cloud-ball-width) * 1.5 * 1vmin);background: linear-gradient(to bottom, #fff 50%, transparent 50%);border-radius: 50%;z-index: 99;top: 48%;animation: cloud 4s infinite;
}.cloud-ball-two {position: fixed;height: calc(var(--cloud-ball-height) * 2 * 1vmin);width: calc(var(--cloud-ball-width) * 2 * 1vmin);background: linear-gradient(to bottom, #fff 50%, transparent 50%);border-radius: 50%;z-index: 99;top: 45%;left: 10%;animation: cloud 4s infinite;
}.cloud-ball-three {position: fixed;height: calc(var(--cloud-ball-height) * 1.5 * 1vmin);width: calc(var(--cloud-ball-width) * 1.3 * 1vmin);background: linear-gradient(to bottom, #fff 50%, transparent 50%);border-radius: 50%;z-index: 99;top: -32%;left: 54%;animation: cloud 4s infinite;
}.cloud-ball-four {position: fixed;height: calc(var(--cloud-ball-height) * 2 * 1vmin);width: calc(var(--cloud-ball-width) * 2 * 1vmin);background: linear-gradient(to bottom, #fff 50%, transparent 50%);border-radius: 50%;z-index: 99;top: -35%;left: 65%;animation: cloud 4s infinite;
}.cloud-ball-five {position: fixed;height: calc(var(--cloud-ball-height) * 1.5 * 1vmin);width: calc(var(--cloud-ball-width) * 1.5 * 1vmin);background: linear-gradient(to bottom, #fff 50%, transparent 50%);border-radius: 50%;z-index: 99;top: -3%;left: 5%;animation: cloud 4s infinite;
}.cloud-ball-six {position: fixed;height: calc(var(--cloud-ball-height) * 2 * 1vmin);width: calc(var(--cloud-ball-width) * 2 * 1vmin);background: linear-gradient(to bottom, #fff 50%, transparent 50%);border-radius: 50%;z-index: 99;top: -5%;left: 15%;animation: cloud 4s infinite;
}@-webkit-keyframes cloud {0% {-webkit-transform: translate(0px, 0px);transform: translate(0px, 0px);}25% {-webkit-transform: translate(2px, 2px);transform: translate(2px, 2px);}50% {-webkit-transform: translate(0px, 0px);transform: translate(0px, 0px);}75% {-webkit-transform: translate(-1px, -1px);transform: translate(-1px, -1px);}100% {-webkit-transform: translate(0px, 0px);transform: translate(0px, 0px);}
}@keyframes cloud {0% {-webkit-transform: translate(0px, 0px);transform: translate(0px, 0px);}25% {-webkit-transform: translate(2px, 2px);transform: translate(2px, 2px);}50% {-webkit-transform: translate(0px, 0px);transform: translate(0px, 0px);}75% {-webkit-transform: translate(-1px, -1px);transform: translate(-1px, -1px);}100% {-webkit-transform: translate(0px, 0px);transform: translate(0px, 0px);}
}
.lamp {position: fixed;height: calc(var(--lamp-height) * 1vmin);width: calc(var(--lamp-width) * 1vmin);top: -31%;right: -5%;z-index: 999;border-radius: 50%;background: linear-gradient(to bottom, #eb8fbb 42%, #000 43%, transparent 45%);
}.lamp:hover {cursor: pointer;
}.lamp-wire {position: fixed;top: -206%;right: 18%;z-index: 9999;height: calc(var(--lamp-wire-height) * 1vmin);width: calc(var(--lamp-wire-width) * 1vmin);background: #444;
}.lamp-shadow {height: calc(var(--lamp-width) / 1.01 * 1vmin);width: calc(var(--plant-two-shadow-width) / 3.4 * 1vmin);background: #222;position: fixed;z-index: 100;top: -38%;right: 17.3%;border-radius: 90% 50%;transform: rotate(89deg);
}
.night {background: #120326;
}
.hide-cloud {visibility: hidden;
}
.star-one,
.star-two,
.star-three,
.star-four,
.star-five,
.star-six {position: fixed;height: calc(var(--star-height) * 1vmin);width: calc(var(--star-width) * 1vmin);clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);background: #fff;border: 1px solid #eee;visibility: hidden;
}.star-one {top: 50%;left: 60%;transform: rotate(45deg);animation: twinkle 2s infinite linear;
}.star-two {top: 60%;left: 20%;transform: rotate(80deg);animation: twinkle 4s infinite linear;
}.star-three {top: 10%;left: 40%;transform: rotate(20deg);animation: twinkle 2s infinite linear;
}.star-four {top: -40%;left: 60%;transform: rotate(45deg);animation: twinkle 1s infinite linear;
}.star-five {top: 30%;left: 20%;transform: rotate(45deg);animation: twinkle 3s infinite linear;
}.star-six {top: -10%;left: 80%;transform: rotate(45deg);animation: twinkle 1s infinite linear;
}@-webkit-keyframes twinkle {0% {opacity: 1;}25% {opacity: 0.3;}50% {opacity: 0.8;}75% {opacity: 0.5;}100% {opacity: 0.8;}
}@keyframes twinkle {0% {opacity: 1;}25% {opacity: 0.3;}50% {opacity: 0.8;}75% {opacity: 0.5;}100% {opacity: 0.8;}
}
.light-source {position: fixed;top: -65%;right: -28.5%;filter: brightness(105%);z-index: 100;height: calc(var(--light-source-height) * 1vmin);width: calc(var(--lamp-width) / 1.02 * 1vmin);border-bottom: calc(var(--light-source-height) * 2.32 * 1vmin) solid #f9e79f;opacity: 0.6;border-left: calc(var(--lamp-width) / 2 * 1vmin) solid transparent;border-right: calc(var(--lamp-width) / 2 * 1vmin) solid transparent;border-top: 0;visibility: hidden;animation: twinkle 10s infinite linear;
}.show-light,
.show-moon,
.show-star {visibility: visible !important;
}
.moon {height: calc(var(--moon-height) * 1vmin);width: calc(var(--moon-width) * 1vmin);position: fixed;background: linear-gradient(-45deg, #fff 40%, #eee 80%);border-radius: 50%;top: -33%;left: 13%;box-shadow: 0px 0px 5px 1px #fff;visibility: hidden;
}