mirror of
https://ghfast.top/https://github.com/zsjy/halo-theme-dream2.0-plus.git
synced 2025-03-16 04:19:41 +08:00
209 lines
5.7 KiB
HTML
209 lines
5.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN" xmlns:th="https://www.thymeleaf.org"
|
|
th:fragment="error_fragment">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>[[${error.status + ' - ' + #strings.defaultString(error.title, 'Internal server error')}]]</title>
|
|
<link rel="icon" th:href="${site.favicon}">
|
|
<style>
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
html {
|
|
height: 100%;
|
|
overflow: hidden;
|
|
}
|
|
|
|
canvas {
|
|
z-index: 1;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.caps {
|
|
z-index: 2;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
opacity: 0;
|
|
animation: as 8s linear infinite;
|
|
}
|
|
|
|
.caps img {
|
|
display: block;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
@keyframes as {
|
|
0% {
|
|
opacity: 0;
|
|
}
|
|
10% {
|
|
opacity: .3;
|
|
}
|
|
20% {
|
|
opacity: .1;
|
|
}
|
|
30% {
|
|
opacity: .5;
|
|
}
|
|
40% {
|
|
opacity: 0;
|
|
}
|
|
50% {
|
|
opacity: .8;
|
|
}
|
|
55% {
|
|
opacity: 0;
|
|
}
|
|
55% {
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
.frame {
|
|
z-index: 3;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: -moz-radial-gradient(center, ellipse cover, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 19%, rgba(0, 0, 0, 0.9) 100%); /* FF3.6+ */
|
|
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(19%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 0.9))); /* Chrome,Safari4+ */
|
|
background: -webkit-radial-gradient(center, ellipse cover, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 19%, rgba(0, 0, 0, 0.9) 100%); /* Chrome10+,Safari5.1+ */
|
|
background: -o-radial-gradient(center, ellipse cover, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 19%, rgba(0, 0, 0, 0.9) 100%); /* Opera 12+ */
|
|
background: -ms-radial-gradient(center, ellipse cover, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 19%, rgba(0, 0, 0, 0.9) 100%); /* IE10+ */
|
|
background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0) 19%, rgba(0, 0, 0, 0.9) 100%); /* W3C */
|
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#e6000000', GradientType=1); /* IE6-9 fallback on horizontal gradient */
|
|
|
|
}
|
|
|
|
.frame div {
|
|
position: absolute;
|
|
left: 0;
|
|
top: -20%;
|
|
width: 100%;
|
|
height: 20%;
|
|
background-color: rgba(0, 0, 0, .12);
|
|
box-shadow: 0 0 10px rgba(0, 0, 0, .3);
|
|
animation: asd 12s linear infinite;
|
|
}
|
|
|
|
.frame div:nth-child(1) {
|
|
animation-delay: 0;
|
|
}
|
|
|
|
.frame div:nth-child(2) {
|
|
animation-delay: 4s;
|
|
}
|
|
|
|
.frame div:nth-child(3) {
|
|
animation-delay: 8s;
|
|
}
|
|
|
|
@keyframes asd {
|
|
0% {
|
|
top: -20%;
|
|
}
|
|
100% {
|
|
top: 100%;
|
|
}
|
|
}
|
|
|
|
h1 {
|
|
z-index: 3;
|
|
position: absolute;
|
|
font: bold 200px/200px Arial, sans-serif;
|
|
left: 50%;
|
|
top: 50%;
|
|
margin-top: -100px;
|
|
width: 100%;
|
|
margin-left: -50%;
|
|
height: 200px;
|
|
text-align: center;
|
|
color: transparent;
|
|
text-shadow: 0 0 30px rgba(0, 0, 0, .5);
|
|
animation: asdd 2s linear infinite;
|
|
}
|
|
|
|
@keyframes asdd {
|
|
0% {
|
|
text-shadow: 0 0 30px rgba(0, 0, 0, .5);
|
|
}
|
|
33% {
|
|
text-shadow: 0 0 10px rgba(0, 0, 0, .4);
|
|
}
|
|
66% {
|
|
text-shadow: 0 0 20px rgba(0, 0, 0, .2);
|
|
}
|
|
100% {
|
|
text-shadow: 0 0 40px rgba(0, 0, 0, .8);
|
|
}
|
|
}
|
|
</style>
|
|
<script>
|
|
var Application = (function () {
|
|
var canvas
|
|
var ctx
|
|
var imgData
|
|
var pix
|
|
var WIDTH
|
|
var HEIGHT
|
|
var flickerInterval
|
|
|
|
var init = function () {
|
|
canvas = document.getElementById('canvas')
|
|
ctx = canvas.getContext('2d')
|
|
canvas.width = WIDTH = 700
|
|
canvas.height = HEIGHT = 500
|
|
ctx.fillStyle = 'white'
|
|
ctx.fillRect(0, 0, WIDTH, HEIGHT)
|
|
ctx.fill()
|
|
imgData = ctx.getImageData(0, 0, WIDTH, HEIGHT)
|
|
pix = imgData.data
|
|
flickerInterval = setInterval(flickering, 30)
|
|
}
|
|
|
|
var flickering = function () {
|
|
for (var i = 0; i < pix.length; i += 4) {
|
|
var color = (Math.random() * 255) + 50
|
|
pix[i] = color
|
|
pix[i + 1] = color
|
|
pix[i + 2] = color
|
|
}
|
|
ctx.putImageData(imgData, 0, 0)
|
|
}
|
|
|
|
return {
|
|
init: init
|
|
}
|
|
}())
|
|
|
|
window.onload = function () {
|
|
// js source https://codepen.io/moklick/pen/zKleC
|
|
Application.init()
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
|
|
<h1>[[${error.status}]]</h1>
|
|
|
|
<div class="frame">
|
|
<div></div>
|
|
<div></div>
|
|
<div></div>
|
|
</div>
|
|
<div class="caps"></div>
|
|
<canvas id="canvas"></canvas>
|
|
</body>
|
|
</html> |