Compare commits
20 Commits
Author | SHA1 | Date |
---|---|---|
pyg8ivf7o | 2b58036995 | 3 days ago |
pyg8ivf7o | 005028aa4c | 3 days ago |
pyg8ivf7o | 049c0fac8e | 3 days ago |
pyg8ivf7o | 49e3169e02 | 3 days ago |
pyg8ivf7o | 4796478ce3 | 3 days ago |
m3625tzcj | 70b71f099c | 4 days ago |
p9fmnwehk | 79282abca7 | 4 days ago |
pyg8ivf7o | 9abd2bcba0 | 4 days ago |
pt5v4z9ay | 8097fb6019 | 4 days ago |
pyg8ivf7o | bc9d56f4f4 | 4 days ago |
pyg8ivf7o | c7628dd141 | 4 days ago |
pyg8ivf7o | 3c0db7cb83 | 4 days ago |
pyg8ivf7o | e115c99dd4 | 4 days ago |
pyg8ivf7o | cb28aaa03a | 4 days ago |
pyg8ivf7o | e3846afa24 | 4 days ago |
pzgqwaxsf | dc95990987 | 4 days ago |
pyg8ivf7o | 8a46176b0d | 4 days ago |
pyg8ivf7o | 2c57d62872 | 5 days ago |
pyg8ivf7o | 7deb3302dc | 5 days ago |
pyg8ivf7o | 8388dc1725 | 4 weeks ago |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,682 @@
|
||||
/* 基本重置 */
|
||||
body, h1, h2, p, a {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
color: rgb(255, 255, 255);
|
||||
}
|
||||
|
||||
/* 基础字体和背景 */
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
background-color: #f8f8f8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
padding: 20px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #fe5b56;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 输入框和按钮样式 */
|
||||
input[type="text"] {
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 10px 20px;
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #c9302c;
|
||||
}
|
||||
|
||||
/* 动画效果 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
header, main, footer {
|
||||
animation: fadeInDown 1s ease-in-out;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
/* 针对小屏幕的样式调整 */
|
||||
}
|
||||
|
||||
/* 动态阴影效果 */
|
||||
@keyframes shadowPulse {
|
||||
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||
}
|
||||
|
||||
button:hover {
|
||||
animation: shadowPulse 1.5s infinite;
|
||||
}
|
||||
|
||||
/* 文字跳动动画*/
|
||||
h1 {
|
||||
animation: jump 1.5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes jump {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
/* 输入框和按钮的悬停效果*/
|
||||
input[type="text"]:hover, button:hover {
|
||||
border: 1px solid #d9534f;
|
||||
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
/*按钮点击动画*/
|
||||
button:active {
|
||||
transform: scale(0.95);
|
||||
background-color: #b52b27;
|
||||
}
|
||||
/*光晕效果*/
|
||||
.glow {
|
||||
animation: glowEffect 1.5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes glowEffect {
|
||||
from {
|
||||
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||
}
|
||||
to {
|
||||
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||
}
|
||||
}
|
||||
/* 3D翻转效果*/
|
||||
.feature {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
.feature:hover .feature-inner {
|
||||
transform: rotateY(360deg);
|
||||
transition: transform 15s;
|
||||
}
|
||||
/*视差滚动效果*/
|
||||
|
||||
.parallax-section {
|
||||
background-attachment: fixed;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
/* 粒子背景*/
|
||||
.particle-background {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.particle {
|
||||
fill: rgba(255, 255, 255, 0.8);
|
||||
animation: moveParticles 10s infinite linear;
|
||||
}
|
||||
|
||||
@keyframes moveParticles {
|
||||
0% { transform: translate(0, 0); }
|
||||
100% { transform: translate(100px, 100px); }
|
||||
}
|
||||
/*线条动画*/
|
||||
.dynamic-line {
|
||||
stroke-dasharray: 300;
|
||||
stroke-dashoffset: 300;
|
||||
animation: dash 3s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
from {
|
||||
stroke-dashoffset: 300;
|
||||
}
|
||||
to {
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
||||
/*光晕效果*/
|
||||
button {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 300%;
|
||||
height: 200%;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
transform: translate(-50%, -50%) rotate(45deg);
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
button:hover::before {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
/*闪烁效果*/
|
||||
@keyframes blinker {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
|
||||
.blink-text {
|
||||
animation: blinker 1s linear infinite;
|
||||
}
|
||||
/* 打字机效果*/
|
||||
.typewriter {
|
||||
font-family: monospace;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
animation: typewriter 4s steps(40) 1s infinite;
|
||||
}
|
||||
|
||||
@keyframes typewriter {
|
||||
0% { width: 0; }
|
||||
100% { width: 100%; }
|
||||
}
|
||||
/* 3D文字效果*/
|
||||
.three-d-text {
|
||||
transform: rotateX(45deg) rotateY(45deg);
|
||||
transform-style: preserve-3d;
|
||||
perspective: 600px;
|
||||
}
|
||||
/*渐变文字效果*/
|
||||
.gradient-text {
|
||||
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
/*动态阴影效果*/
|
||||
.dynamic-shadow {
|
||||
transition: box-shadow 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.dynamic-shadow:hover {
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
/*光点闪烁效果*/
|
||||
.sparkle-point {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
pointer-events: none;
|
||||
animation: sparkle 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes sparkle {
|
||||
0% { opacity: 0; transform: scale(0); }
|
||||
50% { opacity: 1; transform: scale(1); }
|
||||
100% { opacity: 0; transform: scale(0); }
|
||||
}
|
||||
|
||||
/*动态渲染效果*/
|
||||
.render-effect {
|
||||
animation: renderEffect 5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes renderEffect {
|
||||
0%, 100% { filter: grayscale(0); }
|
||||
50% { filter: grayscale(1); }
|
||||
}
|
||||
/* 全屏背景动画*/
|
||||
body {
|
||||
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||
background-size: 400% 1000%;
|
||||
animation: gradientBG 15s ease infinite;
|
||||
}
|
||||
|
||||
@keyframes gradientBG {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
/*线条动画*/
|
||||
.waves {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
|
||||
@keyframes backgroundGradient {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
body {
|
||||
animation: backgroundGradient 15s ease infinite;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fdfdfd;
|
||||
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
background-color: #d9534f;
|
||||
color: white;
|
||||
}
|
||||
.svg-background {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1; /* 确保SVG在内容的后面 */
|
||||
}
|
||||
@keyframes colorShift {
|
||||
0% { background-color: #d9534f; }
|
||||
50% { background-color: #fe5b56; }
|
||||
100% { background-color: #d9534f; }
|
||||
}
|
||||
button {
|
||||
animation: colorShift 3s infinite;
|
||||
}
|
||||
.blink {
|
||||
animation: blink 1s step-start infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
input[type="text"]:hover {
|
||||
background-color: rgba(217, 83, 79, 0.1);
|
||||
}
|
||||
.parallax-section {
|
||||
background-image: url('your-image.jpg');
|
||||
background-attachment: fixed;
|
||||
background-size: cover;
|
||||
height: 100vh;
|
||||
}
|
||||
/*字体动态改变*/
|
||||
h2 {
|
||||
transition: font-size 0.3s;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
font-size: 2em;
|
||||
}
|
||||
/*动态内容加载*/
|
||||
.main-content {
|
||||
animation: fadeIn 1s ease-in;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
/* 旋转效果*/
|
||||
footer {
|
||||
transition: transform 0.5s;
|
||||
}
|
||||
|
||||
footer:hover {
|
||||
transform: rotate(5deg);
|
||||
}
|
||||
|
||||
.dynamic-line {
|
||||
stroke: #d9534f;
|
||||
stroke-width: 2;
|
||||
fill: none;
|
||||
animation: dash 5s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
0% { stroke-dasharray: 0, 100; }
|
||||
100% { stroke-dasharray: 100, 0; }
|
||||
}
|
||||
|
||||
|
||||
button {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: rotateX(10deg) rotateY(10deg);
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
/*文字打字效果*/
|
||||
.typewriter {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
border-right: .15em solid orange;
|
||||
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||
}
|
||||
|
||||
@keyframes typing {
|
||||
from { width: 0; }
|
||||
to { width: 100%; }
|
||||
}
|
||||
|
||||
@keyframes blink-caret {
|
||||
from, to { border-color: transparent; }
|
||||
50% { border-color: orange; }
|
||||
}
|
||||
/*旋转加载*/
|
||||
.loading {
|
||||
border: 8px solid #f3f3f3;
|
||||
border-top: 8px solid #3498db;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
/*字体阴影动态*/
|
||||
h2 {
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
transition: text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||
}
|
||||
/*彩色阴影*/
|
||||
button {
|
||||
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||
}
|
||||
|
||||
button:hover {
|
||||
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||
}
|
||||
|
||||
.particle-background {
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||
animation: particleAnimation 5s infinite;
|
||||
}
|
||||
/*随机粒子背景*/
|
||||
@keyframes particleAnimation {
|
||||
0% { background-size: 0%; }
|
||||
100% { background-size: 100%; }
|
||||
}
|
||||
|
||||
/*光环效果*/
|
||||
header {
|
||||
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||
}
|
||||
/*悬浮按钮效果*/
|
||||
button {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
/*玻璃效果*/
|
||||
main {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
|
||||
/**/
|
||||
.result-box {
|
||||
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||
}
|
||||
|
||||
/* 结果文本框样式 */
|
||||
.result-textarea {
|
||||
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
padding: 10px;
|
||||
width: 100%; /* 宽度与输入框一致 */
|
||||
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||
resize: none; /* 禁止调整大小 */
|
||||
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||
color: #333; /* 文本颜色与页面一致 */
|
||||
line-height: 1.5; /* 行高 */
|
||||
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.result-box {
|
||||
width: auto; /* 小屏幕上宽度自动调整 */
|
||||
margin-left: 10px; /* 较小的外边距 */
|
||||
margin-right: 10px;
|
||||
}
|
||||
input[type="text"] {
|
||||
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||
}
|
||||
}
|
||||
|
||||
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||
.result-box:hover {
|
||||
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||
.result-box:active {
|
||||
transform: translateY(2px);
|
||||
}
|
||||
/* 显示动画 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 隐藏动画 */
|
||||
@keyframes fadeOutUp {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
}
|
||||
|
||||
/* 展开动画 */
|
||||
@keyframes expand {
|
||||
from {
|
||||
height: 0;
|
||||
}
|
||||
to {
|
||||
height: 200px; /* 根据需要调整高度 */
|
||||
}
|
||||
}
|
||||
.result-box {
|
||||
display: none; /* 初始时隐藏 */
|
||||
background-color: #f8d7da;
|
||||
border: 1px solid #d9534f;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||
overflow: hidden; /* 隐藏内容超出部分 */
|
||||
}
|
||||
|
||||
|
||||
.result-box:active {
|
||||
animation: ripple 0.5s forwards;
|
||||
}
|
||||
|
||||
@keyframes gradientBG {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
.result-box {
|
||||
background-size: 200% 200%;
|
||||
animation: gradientBG 5s ease infinite;
|
||||
}
|
||||
|
||||
|
||||
@keyframes textBounce {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-5px); }
|
||||
}
|
||||
.result-textarea:hover {
|
||||
animation: textBounce 0.5s infinite;
|
||||
}
|
||||
@keyframes borderBounce {
|
||||
0%, 100% { border: 1px solid #d9534f; }
|
||||
50% { border: 2px solid #ff6e7a; }
|
||||
}
|
||||
.result-box:hover {
|
||||
animation: borderBounce 1s infinite;
|
||||
}
|
||||
@keyframes backgroundBlink {
|
||||
0%, 100% { background-color: #ff6e7a; }
|
||||
50% { background-color: #d9534f; }
|
||||
}
|
||||
.result-box:hover {
|
||||
animation: backgroundBlink 1s infinite;
|
||||
}
|
||||
|
||||
@keyframes typewriter {
|
||||
0% { width: 0; }
|
||||
100% { width: 100%; }
|
||||
}
|
||||
.result-textarea {
|
||||
animation: typewriter 3s steps(30, end) forwards;
|
||||
}
|
||||
|
||||
.result-box {
|
||||
background-image: linear-gradient(135deg, #ff6e7a, #d9534f);
|
||||
}
|
||||
.result-textarea {
|
||||
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.result-box, .result-textarea {
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.result-box:hover {
|
||||
background-image: linear-gradient(135deg, #ff7e8a, #e95a5f);
|
||||
}
|
||||
|
||||
.result-box:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
@keyframes textGlow {
|
||||
0%, 100% { color: #333; }
|
||||
50% { color: #555; }
|
||||
}
|
||||
.result-textarea {
|
||||
animation: textGlow 2s infinite;
|
||||
}
|
||||
.result-box {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.result-box::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
z-index: 1;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
.result-box:hover::before {
|
||||
animation: ripple 1.5s infinite;
|
||||
}
|
||||
@keyframes ripple {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
transform: scale(1.5);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes bounce {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
.result-box {
|
||||
animation: bounce 2s infinite ease-in-out;
|
||||
}
|
||||
@keyframes shadowSpread {
|
||||
0%, 100% { box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); }
|
||||
50% { box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2); }
|
||||
}
|
||||
.result-box:hover {
|
||||
animation: shadowSpread 2s infinite;
|
||||
}
|
@ -0,0 +1,568 @@
|
||||
/* 基本重置 */
|
||||
body, h1, h2, p, a {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
color: rgb(255, 255, 255);
|
||||
}
|
||||
|
||||
/* 基础字体和背景 */
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
background-color: #f8f8f8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
padding: 20px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #fe5b56;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 输入框和按钮样式 */
|
||||
input[type="text"] {
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 10px 20px;
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #c9302c;
|
||||
}
|
||||
|
||||
/* 动画效果 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
header, main, footer {
|
||||
animation: fadeInDown 1s ease-in-out;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
/* 针对小屏幕的样式调整 */
|
||||
}
|
||||
|
||||
/* 动态阴影效果 */
|
||||
@keyframes shadowPulse {
|
||||
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||
}
|
||||
|
||||
button:hover {
|
||||
animation: shadowPulse 1.5s infinite;
|
||||
}
|
||||
|
||||
/* 文字跳动动画*/
|
||||
h1 {
|
||||
animation: jump 1.5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes jump {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
/* 输入框和按钮的悬停效果*/
|
||||
input[type="text"]:hover, button:hover {
|
||||
border: 1px solid #d9534f;
|
||||
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
/*按钮点击动画*/
|
||||
button:active {
|
||||
transform: scale(0.95);
|
||||
background-color: #b52b27;
|
||||
}
|
||||
/*光晕效果*/
|
||||
.glow {
|
||||
animation: glowEffect 1.5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes glowEffect {
|
||||
from {
|
||||
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||
}
|
||||
to {
|
||||
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||
}
|
||||
}
|
||||
/* 3D翻转效果*/
|
||||
.feature {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
.feature:hover .feature-inner {
|
||||
transform: rotateY(360deg);
|
||||
transition: transform 15s;
|
||||
}
|
||||
/*视差滚动效果*/
|
||||
|
||||
.parallax-section {
|
||||
background-attachment: fixed;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
/* 粒子背景*/
|
||||
.particle-background {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.particle {
|
||||
fill: rgba(255, 255, 255, 0.8);
|
||||
animation: moveParticles 10s infinite linear;
|
||||
}
|
||||
|
||||
@keyframes moveParticles {
|
||||
0% { transform: translate(0, 0); }
|
||||
100% { transform: translate(100px, 100px); }
|
||||
}
|
||||
/*线条动画*/
|
||||
.dynamic-line {
|
||||
stroke-dasharray: 300;
|
||||
stroke-dashoffset: 300;
|
||||
animation: dash 3s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
from {
|
||||
stroke-dashoffset: 300;
|
||||
}
|
||||
to {
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
||||
/*光晕效果*/
|
||||
button {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 300%;
|
||||
height: 200%;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
transform: translate(-50%, -50%) rotate(45deg);
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
button:hover::before {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
/*闪烁效果*/
|
||||
@keyframes blinker {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
|
||||
.blink-text {
|
||||
animation: blinker 1s linear infinite;
|
||||
}
|
||||
/* 打字机效果*/
|
||||
.typewriter {
|
||||
font-family: monospace;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
animation: typewriter 4s steps(40) 1s infinite;
|
||||
}
|
||||
|
||||
@keyframes typewriter {
|
||||
0% { width: 0; }
|
||||
100% { width: 100%; }
|
||||
}
|
||||
/* 3D文字效果*/
|
||||
.three-d-text {
|
||||
transform: rotateX(45deg) rotateY(45deg);
|
||||
transform-style: preserve-3d;
|
||||
perspective: 600px;
|
||||
}
|
||||
/*渐变文字效果*/
|
||||
.gradient-text {
|
||||
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
/*动态阴影效果*/
|
||||
.dynamic-shadow {
|
||||
transition: box-shadow 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.dynamic-shadow:hover {
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
/*光点闪烁效果*/
|
||||
.sparkle-point {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
pointer-events: none;
|
||||
animation: sparkle 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes sparkle {
|
||||
0% { opacity: 0; transform: scale(0); }
|
||||
50% { opacity: 1; transform: scale(1); }
|
||||
100% { opacity: 0; transform: scale(0); }
|
||||
}
|
||||
|
||||
/*动态渲染效果*/
|
||||
.render-effect {
|
||||
animation: renderEffect 5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes renderEffect {
|
||||
0%, 100% { filter: grayscale(0); }
|
||||
50% { filter: grayscale(1); }
|
||||
}
|
||||
/* 全屏背景动画*/
|
||||
body {
|
||||
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||
background-size: 400% 1000%;
|
||||
animation: gradientBG 15s ease infinite;
|
||||
}
|
||||
|
||||
@keyframes gradientBG {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
/*线条动画*/
|
||||
.waves {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
|
||||
@keyframes backgroundGradient {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
body {
|
||||
animation: backgroundGradient 15s ease infinite;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fdfdfd;
|
||||
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
background-color: #d9534f;
|
||||
color: white;
|
||||
}
|
||||
.svg-background {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1; /* 确保SVG在内容的后面 */
|
||||
}
|
||||
@keyframes colorShift {
|
||||
0% { background-color: #d9534f; }
|
||||
50% { background-color: #fe5b56; }
|
||||
100% { background-color: #d9534f; }
|
||||
}
|
||||
button {
|
||||
animation: colorShift 3s infinite;
|
||||
}
|
||||
.blink {
|
||||
animation: blink 1s step-start infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
input[type="text"]:hover {
|
||||
background-color: rgba(217, 83, 79, 0.1);
|
||||
}
|
||||
.parallax-section {
|
||||
background-image: url('your-image.jpg');
|
||||
background-attachment: fixed;
|
||||
background-size: cover;
|
||||
height: 100vh;
|
||||
}
|
||||
/*字体动态改变*/
|
||||
h2 {
|
||||
transition: font-size 0.3s;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
font-size: 2em;
|
||||
}
|
||||
/*动态内容加载*/
|
||||
.main-content {
|
||||
animation: fadeIn 1s ease-in;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
/* 旋转效果*/
|
||||
footer {
|
||||
transition: transform 0.5s;
|
||||
}
|
||||
|
||||
footer:hover {
|
||||
transform: rotate(5deg);
|
||||
}
|
||||
|
||||
.dynamic-line {
|
||||
stroke: #d9534f;
|
||||
stroke-width: 2;
|
||||
fill: none;
|
||||
animation: dash 5s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
0% { stroke-dasharray: 0, 100; }
|
||||
100% { stroke-dasharray: 100, 0; }
|
||||
}
|
||||
|
||||
|
||||
button {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: rotateX(10deg) rotateY(10deg);
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
/*文字打字效果*/
|
||||
.typewriter {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
border-right: .15em solid orange;
|
||||
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||
}
|
||||
|
||||
@keyframes typing {
|
||||
from { width: 0; }
|
||||
to { width: 100%; }
|
||||
}
|
||||
|
||||
@keyframes blink-caret {
|
||||
from, to { border-color: transparent; }
|
||||
50% { border-color: orange; }
|
||||
}
|
||||
/*旋转加载*/
|
||||
.loading {
|
||||
border: 8px solid #f3f3f3;
|
||||
border-top: 8px solid #3498db;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
/*字体阴影动态*/
|
||||
h2 {
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
transition: text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||
}
|
||||
/*彩色阴影*/
|
||||
button {
|
||||
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||
}
|
||||
|
||||
button:hover {
|
||||
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||
}
|
||||
|
||||
.particle-background {
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||
animation: particleAnimation 5s infinite;
|
||||
}
|
||||
/*随机粒子背景*/
|
||||
@keyframes particleAnimation {
|
||||
0% { background-size: 0%; }
|
||||
100% { background-size: 100%; }
|
||||
}
|
||||
|
||||
/*光环效果*/
|
||||
header {
|
||||
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||
}
|
||||
/*悬浮按钮效果*/
|
||||
button {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
/*玻璃效果*/
|
||||
main {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* 术语 */
|
||||
/* 术语结果框样式 */
|
||||
.result-box {
|
||||
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||
}
|
||||
|
||||
/* 结果文本框样式 */
|
||||
.result-textarea {
|
||||
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
padding: 10px;
|
||||
width: 100%; /* 宽度与输入框一致 */
|
||||
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||
resize: none; /* 禁止调整大小 */
|
||||
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||
color: #333; /* 文本颜色与页面一致 */
|
||||
line-height: 1.5; /* 行高 */
|
||||
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.result-box {
|
||||
width: auto; /* 小屏幕上宽度自动调整 */
|
||||
margin-left: 10px; /* 较小的外边距 */
|
||||
margin-right: 10px;
|
||||
}
|
||||
input[type="text"] {
|
||||
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||
}
|
||||
}
|
||||
|
||||
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||
.result-box:hover {
|
||||
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||
.result-box:active {
|
||||
transform: translateY(2px);
|
||||
}
|
||||
/* 显示动画 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 隐藏动画 */
|
||||
@keyframes fadeOutUp {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
}
|
||||
|
||||
/* 展开动画 */
|
||||
@keyframes expand {
|
||||
from {
|
||||
height: 0;
|
||||
}
|
||||
to {
|
||||
height: 200px; /* 根据需要调整高度 */
|
||||
}
|
||||
}
|
||||
.result-box {
|
||||
display: none; /* 初始时隐藏 */
|
||||
background-color: #f8d7da;
|
||||
border: 1px solid #d9534f;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||
overflow: hidden; /* 隐藏内容超出部分 */
|
||||
}
|
@ -0,0 +1,568 @@
|
||||
/* 基本重置 */
|
||||
body, h1, h2, p, a {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
color: rgb(255, 255, 255);
|
||||
}
|
||||
|
||||
/* 基础字体和背景 */
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
background-color: #f8f8f8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
padding: 20px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #fe5b56;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 输入框和按钮样式 */
|
||||
input[type="text"] {
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 10px 20px;
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #c9302c;
|
||||
}
|
||||
|
||||
/* 动画效果 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
header, main, footer {
|
||||
animation: fadeInDown 1s ease-in-out;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
/* 针对小屏幕的样式调整 */
|
||||
}
|
||||
|
||||
/* 动态阴影效果 */
|
||||
@keyframes shadowPulse {
|
||||
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||
}
|
||||
|
||||
button:hover {
|
||||
animation: shadowPulse 1.5s infinite;
|
||||
}
|
||||
|
||||
/* 文字跳动动画*/
|
||||
h1 {
|
||||
animation: jump 1.5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes jump {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
/* 输入框和按钮的悬停效果*/
|
||||
input[type="text"]:hover, button:hover {
|
||||
border: 1px solid #d9534f;
|
||||
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
/*按钮点击动画*/
|
||||
button:active {
|
||||
transform: scale(0.95);
|
||||
background-color: #b52b27;
|
||||
}
|
||||
/*光晕效果*/
|
||||
.glow {
|
||||
animation: glowEffect 1.5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes glowEffect {
|
||||
from {
|
||||
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||
}
|
||||
to {
|
||||
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||
}
|
||||
}
|
||||
/* 3D翻转效果*/
|
||||
.feature {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
.feature:hover .feature-inner {
|
||||
transform: rotateY(360deg);
|
||||
transition: transform 15s;
|
||||
}
|
||||
/*视差滚动效果*/
|
||||
|
||||
.parallax-section {
|
||||
background-attachment: fixed;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
/* 粒子背景*/
|
||||
.particle-background {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.particle {
|
||||
fill: rgba(255, 255, 255, 0.8);
|
||||
animation: moveParticles 10s infinite linear;
|
||||
}
|
||||
|
||||
@keyframes moveParticles {
|
||||
0% { transform: translate(0, 0); }
|
||||
100% { transform: translate(100px, 100px); }
|
||||
}
|
||||
/*线条动画*/
|
||||
.dynamic-line {
|
||||
stroke-dasharray: 300;
|
||||
stroke-dashoffset: 300;
|
||||
animation: dash 3s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
from {
|
||||
stroke-dashoffset: 300;
|
||||
}
|
||||
to {
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
||||
/*光晕效果*/
|
||||
button {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 300%;
|
||||
height: 200%;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
transform: translate(-50%, -50%) rotate(45deg);
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
button:hover::before {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
/*闪烁效果*/
|
||||
@keyframes blinker {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
|
||||
.blink-text {
|
||||
animation: blinker 1s linear infinite;
|
||||
}
|
||||
/* 打字机效果*/
|
||||
.typewriter {
|
||||
font-family: monospace;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
animation: typewriter 4s steps(40) 1s infinite;
|
||||
}
|
||||
|
||||
@keyframes typewriter {
|
||||
0% { width: 0; }
|
||||
100% { width: 100%; }
|
||||
}
|
||||
/* 3D文字效果*/
|
||||
.three-d-text {
|
||||
transform: rotateX(45deg) rotateY(45deg);
|
||||
transform-style: preserve-3d;
|
||||
perspective: 600px;
|
||||
}
|
||||
/*渐变文字效果*/
|
||||
.gradient-text {
|
||||
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
/*动态阴影效果*/
|
||||
.dynamic-shadow {
|
||||
transition: box-shadow 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.dynamic-shadow:hover {
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
/*光点闪烁效果*/
|
||||
.sparkle-point {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
pointer-events: none;
|
||||
animation: sparkle 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes sparkle {
|
||||
0% { opacity: 0; transform: scale(0); }
|
||||
50% { opacity: 1; transform: scale(1); }
|
||||
100% { opacity: 0; transform: scale(0); }
|
||||
}
|
||||
|
||||
/*动态渲染效果*/
|
||||
.render-effect {
|
||||
animation: renderEffect 5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes renderEffect {
|
||||
0%, 100% { filter: grayscale(0); }
|
||||
50% { filter: grayscale(1); }
|
||||
}
|
||||
/* 全屏背景动画*/
|
||||
body {
|
||||
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||
background-size: 400% 1000%;
|
||||
animation: gradientBG 15s ease infinite;
|
||||
}
|
||||
|
||||
@keyframes gradientBG {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
/*线条动画*/
|
||||
.waves {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
|
||||
@keyframes backgroundGradient {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
body {
|
||||
animation: backgroundGradient 15s ease infinite;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fdfdfd;
|
||||
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
background-color: #d9534f;
|
||||
color: white;
|
||||
}
|
||||
.svg-background {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1; /* 确保SVG在内容的后面 */
|
||||
}
|
||||
@keyframes colorShift {
|
||||
0% { background-color: #d9534f; }
|
||||
50% { background-color: #fe5b56; }
|
||||
100% { background-color: #d9534f; }
|
||||
}
|
||||
button {
|
||||
animation: colorShift 3s infinite;
|
||||
}
|
||||
.blink {
|
||||
animation: blink 1s step-start infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
input[type="text"]:hover {
|
||||
background-color: rgba(217, 83, 79, 0.1);
|
||||
}
|
||||
.parallax-section {
|
||||
background-image: url('your-image.jpg');
|
||||
background-attachment: fixed;
|
||||
background-size: cover;
|
||||
height: 100vh;
|
||||
}
|
||||
/*字体动态改变*/
|
||||
h2 {
|
||||
transition: font-size 0.3s;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
font-size: 2em;
|
||||
}
|
||||
/*动态内容加载*/
|
||||
.main-content {
|
||||
animation: fadeIn 1s ease-in;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
/* 旋转效果*/
|
||||
footer {
|
||||
transition: transform 0.5s;
|
||||
}
|
||||
|
||||
footer:hover {
|
||||
transform: rotate(5deg);
|
||||
}
|
||||
|
||||
.dynamic-line {
|
||||
stroke: #d9534f;
|
||||
stroke-width: 2;
|
||||
fill: none;
|
||||
animation: dash 5s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
0% { stroke-dasharray: 0, 100; }
|
||||
100% { stroke-dasharray: 100, 0; }
|
||||
}
|
||||
|
||||
|
||||
button {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: rotateX(10deg) rotateY(10deg);
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
/*文字打字效果*/
|
||||
.typewriter {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
border-right: .15em solid orange;
|
||||
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||
}
|
||||
|
||||
@keyframes typing {
|
||||
from { width: 0; }
|
||||
to { width: 100%; }
|
||||
}
|
||||
|
||||
@keyframes blink-caret {
|
||||
from, to { border-color: transparent; }
|
||||
50% { border-color: orange; }
|
||||
}
|
||||
/*旋转加载*/
|
||||
.loading {
|
||||
border: 8px solid #f3f3f3;
|
||||
border-top: 8px solid #3498db;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
/*字体阴影动态*/
|
||||
h2 {
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
transition: text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||
}
|
||||
/*彩色阴影*/
|
||||
button {
|
||||
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||
}
|
||||
|
||||
button:hover {
|
||||
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||
}
|
||||
|
||||
.particle-background {
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||
animation: particleAnimation 5s infinite;
|
||||
}
|
||||
/*随机粒子背景*/
|
||||
@keyframes particleAnimation {
|
||||
0% { background-size: 0%; }
|
||||
100% { background-size: 100%; }
|
||||
}
|
||||
|
||||
/*光环效果*/
|
||||
header {
|
||||
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||
}
|
||||
/*悬浮按钮效果*/
|
||||
button {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
/*玻璃效果*/
|
||||
main {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* 术语 */
|
||||
/* 术语结果框样式 */
|
||||
.result-box {
|
||||
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||
}
|
||||
|
||||
/* 结果文本框样式 */
|
||||
.result-textarea {
|
||||
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
padding: 10px;
|
||||
width: 100%; /* 宽度与输入框一致 */
|
||||
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||
resize: none; /* 禁止调整大小 */
|
||||
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||
color: #333; /* 文本颜色与页面一致 */
|
||||
line-height: 1.5; /* 行高 */
|
||||
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.result-box {
|
||||
width: auto; /* 小屏幕上宽度自动调整 */
|
||||
margin-left: 10px; /* 较小的外边距 */
|
||||
margin-right: 10px;
|
||||
}
|
||||
input[type="text"] {
|
||||
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||
}
|
||||
}
|
||||
|
||||
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||
.result-box:hover {
|
||||
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||
.result-box:active {
|
||||
transform: translateY(2px);
|
||||
}
|
||||
/* 显示动画 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 隐藏动画 */
|
||||
@keyframes fadeOutUp {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
}
|
||||
|
||||
/* 展开动画 */
|
||||
@keyframes expand {
|
||||
from {
|
||||
height: 0;
|
||||
}
|
||||
to {
|
||||
height: 200px; /* 根据需要调整高度 */
|
||||
}
|
||||
}
|
||||
.result-box {
|
||||
display: none; /* 初始时隐藏 */
|
||||
background-color: #f8d7da;
|
||||
border: 1px solid #d9534f;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||
overflow: hidden; /* 隐藏内容超出部分 */
|
||||
}
|
@ -0,0 +1,568 @@
|
||||
/* 基本重置 */
|
||||
body, h1, h2, p, a {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
color: rgb(255, 255, 255);
|
||||
}
|
||||
|
||||
/* 基础字体和背景 */
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
background-color: #f8f8f8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
padding: 20px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #fe5b56;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 输入框和按钮样式 */
|
||||
input[type="text"] {
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 10px 20px;
|
||||
background-color: #d9534f;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #c9302c;
|
||||
}
|
||||
|
||||
/* 动画效果 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
header, main, footer {
|
||||
animation: fadeInDown 1s ease-in-out;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
/* 针对小屏幕的样式调整 */
|
||||
}
|
||||
|
||||
/* 动态阴影效果 */
|
||||
@keyframes shadowPulse {
|
||||
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||
}
|
||||
|
||||
button:hover {
|
||||
animation: shadowPulse 1.5s infinite;
|
||||
}
|
||||
|
||||
/* 文字跳动动画*/
|
||||
h1 {
|
||||
animation: jump 1.5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes jump {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
/* 输入框和按钮的悬停效果*/
|
||||
input[type="text"]:hover, button:hover {
|
||||
border: 1px solid #d9534f;
|
||||
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
/*按钮点击动画*/
|
||||
button:active {
|
||||
transform: scale(0.95);
|
||||
background-color: #b52b27;
|
||||
}
|
||||
/*光晕效果*/
|
||||
.glow {
|
||||
animation: glowEffect 1.5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes glowEffect {
|
||||
from {
|
||||
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||
}
|
||||
to {
|
||||
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||
}
|
||||
}
|
||||
/* 3D翻转效果*/
|
||||
.feature {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
.feature:hover .feature-inner {
|
||||
transform: rotateY(360deg);
|
||||
transition: transform 15s;
|
||||
}
|
||||
/*视差滚动效果*/
|
||||
|
||||
.parallax-section {
|
||||
background-attachment: fixed;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}
|
||||
/* 粒子背景*/
|
||||
.particle-background {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.particle {
|
||||
fill: rgba(255, 255, 255, 0.8);
|
||||
animation: moveParticles 10s infinite linear;
|
||||
}
|
||||
|
||||
@keyframes moveParticles {
|
||||
0% { transform: translate(0, 0); }
|
||||
100% { transform: translate(100px, 100px); }
|
||||
}
|
||||
/*线条动画*/
|
||||
.dynamic-line {
|
||||
stroke-dasharray: 300;
|
||||
stroke-dashoffset: 300;
|
||||
animation: dash 3s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
from {
|
||||
stroke-dashoffset: 300;
|
||||
}
|
||||
to {
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
}
|
||||
/*光晕效果*/
|
||||
button {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
button::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 300%;
|
||||
height: 200%;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
transform: translate(-50%, -50%) rotate(45deg);
|
||||
transition: all 0.5s;
|
||||
}
|
||||
|
||||
button:hover::before {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
/*闪烁效果*/
|
||||
@keyframes blinker {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
|
||||
.blink-text {
|
||||
animation: blinker 1s linear infinite;
|
||||
}
|
||||
/* 打字机效果*/
|
||||
.typewriter {
|
||||
font-family: monospace;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
animation: typewriter 4s steps(40) 1s infinite;
|
||||
}
|
||||
|
||||
@keyframes typewriter {
|
||||
0% { width: 0; }
|
||||
100% { width: 100%; }
|
||||
}
|
||||
/* 3D文字效果*/
|
||||
.three-d-text {
|
||||
transform: rotateX(45deg) rotateY(45deg);
|
||||
transform-style: preserve-3d;
|
||||
perspective: 600px;
|
||||
}
|
||||
/*渐变文字效果*/
|
||||
.gradient-text {
|
||||
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
/*动态阴影效果*/
|
||||
.dynamic-shadow {
|
||||
transition: box-shadow 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.dynamic-shadow:hover {
|
||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
/*光点闪烁效果*/
|
||||
.sparkle-point {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
pointer-events: none;
|
||||
animation: sparkle 2s infinite;
|
||||
}
|
||||
|
||||
@keyframes sparkle {
|
||||
0% { opacity: 0; transform: scale(0); }
|
||||
50% { opacity: 1; transform: scale(1); }
|
||||
100% { opacity: 0; transform: scale(0); }
|
||||
}
|
||||
|
||||
/*动态渲染效果*/
|
||||
.render-effect {
|
||||
animation: renderEffect 5s infinite alternate;
|
||||
}
|
||||
|
||||
@keyframes renderEffect {
|
||||
0%, 100% { filter: grayscale(0); }
|
||||
50% { filter: grayscale(1); }
|
||||
}
|
||||
/* 全屏背景动画*/
|
||||
body {
|
||||
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||
background-size: 400% 1000%;
|
||||
animation: gradientBG 15s ease infinite;
|
||||
}
|
||||
|
||||
@keyframes gradientBG {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
/*线条动画*/
|
||||
.waves {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
|
||||
@keyframes backgroundGradient {
|
||||
0% { background-position: 0% 50%; }
|
||||
50% { background-position: 100% 50%; }
|
||||
100% { background-position: 0% 50%; }
|
||||
}
|
||||
|
||||
body {
|
||||
animation: backgroundGradient 15s ease infinite;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #fdfdfd;
|
||||
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
background-color: #d9534f;
|
||||
color: white;
|
||||
}
|
||||
.svg-background {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: -1; /* 确保SVG在内容的后面 */
|
||||
}
|
||||
@keyframes colorShift {
|
||||
0% { background-color: #d9534f; }
|
||||
50% { background-color: #fe5b56; }
|
||||
100% { background-color: #d9534f; }
|
||||
}
|
||||
button {
|
||||
animation: colorShift 3s infinite;
|
||||
}
|
||||
.blink {
|
||||
animation: blink 1s step-start infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
50% { opacity: 0; }
|
||||
}
|
||||
input[type="text"]:hover {
|
||||
background-color: rgba(217, 83, 79, 0.1);
|
||||
}
|
||||
.parallax-section {
|
||||
background-image: url('your-image.jpg');
|
||||
background-attachment: fixed;
|
||||
background-size: cover;
|
||||
height: 100vh;
|
||||
}
|
||||
/*字体动态改变*/
|
||||
h2 {
|
||||
transition: font-size 0.3s;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
font-size: 2em;
|
||||
}
|
||||
/*动态内容加载*/
|
||||
.main-content {
|
||||
animation: fadeIn 1s ease-in;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
/* 旋转效果*/
|
||||
footer {
|
||||
transition: transform 0.5s;
|
||||
}
|
||||
|
||||
footer:hover {
|
||||
transform: rotate(5deg);
|
||||
}
|
||||
|
||||
.dynamic-line {
|
||||
stroke: #d9534f;
|
||||
stroke-width: 2;
|
||||
fill: none;
|
||||
animation: dash 5s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes dash {
|
||||
0% { stroke-dasharray: 0, 100; }
|
||||
100% { stroke-dasharray: 100, 0; }
|
||||
}
|
||||
|
||||
|
||||
button {
|
||||
perspective: 1000px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: rotateX(10deg) rotateY(10deg);
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
/*文字打字效果*/
|
||||
.typewriter {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
border-right: .15em solid orange;
|
||||
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||
}
|
||||
|
||||
@keyframes typing {
|
||||
from { width: 0; }
|
||||
to { width: 100%; }
|
||||
}
|
||||
|
||||
@keyframes blink-caret {
|
||||
from, to { border-color: transparent; }
|
||||
50% { border-color: orange; }
|
||||
}
|
||||
/*旋转加载*/
|
||||
.loading {
|
||||
border: 8px solid #f3f3f3;
|
||||
border-top: 8px solid #3498db;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); }
|
||||
}
|
||||
/*字体阴影动态*/
|
||||
h2 {
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
transition: text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
h2:hover {
|
||||
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||
}
|
||||
/*彩色阴影*/
|
||||
button {
|
||||
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||
}
|
||||
|
||||
button:hover {
|
||||
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||
}
|
||||
|
||||
.particle-background {
|
||||
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||
animation: particleAnimation 5s infinite;
|
||||
}
|
||||
/*随机粒子背景*/
|
||||
@keyframes particleAnimation {
|
||||
0% { background-size: 0%; }
|
||||
100% { background-size: 100%; }
|
||||
}
|
||||
|
||||
/*光环效果*/
|
||||
header {
|
||||
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||
}
|
||||
/*悬浮按钮效果*/
|
||||
button {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
/*玻璃效果*/
|
||||
main {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
backdrop-filter: blur(10px);
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* 术语 */
|
||||
/* 术语结果框样式 */
|
||||
.result-box {
|
||||
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||
}
|
||||
|
||||
/* 结果文本框样式 */
|
||||
.result-textarea {
|
||||
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||
border-radius: 5px; /* 圆角边框 */
|
||||
padding: 10px;
|
||||
width: 100%; /* 宽度与输入框一致 */
|
||||
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||
resize: none; /* 禁止调整大小 */
|
||||
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||
color: #333; /* 文本颜色与页面一致 */
|
||||
line-height: 1.5; /* 行高 */
|
||||
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 768px) {
|
||||
.result-box {
|
||||
width: auto; /* 小屏幕上宽度自动调整 */
|
||||
margin-left: 10px; /* 较小的外边距 */
|
||||
margin-right: 10px;
|
||||
}
|
||||
input[type="text"] {
|
||||
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||
}
|
||||
}
|
||||
|
||||
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||
.result-box:hover {
|
||||
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||
.result-box:active {
|
||||
transform: translateY(2px);
|
||||
}
|
||||
/* 显示动画 */
|
||||
@keyframes fadeInDown {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
/* 隐藏动画 */
|
||||
@keyframes fadeOutUp {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateY(-20px);
|
||||
}
|
||||
}
|
||||
|
||||
/* 展开动画 */
|
||||
@keyframes expand {
|
||||
from {
|
||||
height: 0;
|
||||
}
|
||||
to {
|
||||
height: 200px; /* 根据需要调整高度 */
|
||||
}
|
||||
}
|
||||
.result-box {
|
||||
display: none; /* 初始时隐藏 */
|
||||
background-color: #f8d7da;
|
||||
border: 1px solid #d9534f;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||
overflow: hidden; /* 隐藏内容超出部分 */
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<transition>
|
||||
<router-view />
|
||||
</transition>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
-webkit-user-select: none;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
#app {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,837 @@
|
||||
<template>
|
||||
<div class="login">
|
||||
<div class="light-spots"></div>
|
||||
<div class="ripples"></div>
|
||||
<div class="flowing-lines"></div>
|
||||
<div class="login-container">
|
||||
<el-tabs
|
||||
v-model="activeName"
|
||||
class="login-tabs"
|
||||
stretch
|
||||
@tab-click="handleClick"
|
||||
>
|
||||
<el-tab-pane label="用户登录" name="login">
|
||||
<el-form
|
||||
ref="loginForm"
|
||||
:model="user"
|
||||
status-icon
|
||||
:rules="rules"
|
||||
class="login-form"
|
||||
>
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input type="text" v-model="user.username" class="form-input">
|
||||
<i slot="prefix" class="el-icon-user"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input type="password" v-model="user.password" class="form-input">
|
||||
<i slot="prefix" class="el-icon-lock"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitForm('loginForm')" class="submit-btn">
|
||||
<span>登 录</span>
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="用户注册" name="register">
|
||||
<el-form
|
||||
ref="registerForm"
|
||||
:model="user"
|
||||
status-icon
|
||||
:rules="rules"
|
||||
class="login-form"
|
||||
>
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input type="text" v-model="user.username" class="form-input">
|
||||
<i slot="prefix" class="el-icon-user"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="密码" prop="password">
|
||||
<el-input type="password" v-model="user.password" class="form-input">
|
||||
<i slot="prefix" class="el-icon-lock"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="确认密码" prop="surePassword">
|
||||
<el-input type="password" v-model="user.surePassword" class="form-input">
|
||||
<i slot="prefix" class="el-icon-key"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input type="email" v-model="user.email" class="form-input">
|
||||
<i slot="prefix" class="el-icon-message"></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitForm('registerForm')" class="submit-btn">
|
||||
<span>注 册</span>
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane>
|
||||
<span slot="label"><i class="el-icon-service"></i> 帮助中心</span>
|
||||
<div class="help-content">
|
||||
<i class="el-icon-question"></i>
|
||||
<p>如需帮助请联系客服</p>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapActions } from "vuex"
|
||||
import { MessageBox } from 'element-ui'
|
||||
export default {
|
||||
name: "Login",
|
||||
data() {
|
||||
var validateUsername = (rule, value, callback) => {
|
||||
if (value === "") {
|
||||
callback(new Error("请输入用户名"));
|
||||
}
|
||||
callback();
|
||||
};
|
||||
|
||||
var validatePassword = (rule, value, callback) => {
|
||||
if (value === "") {
|
||||
callback(new Error("请输入密码"));
|
||||
}
|
||||
callback();
|
||||
};
|
||||
|
||||
var validateSurePassword = (rule, value, callback) => {
|
||||
if (value === "") {
|
||||
callback(new Error("请输入确认密码"));
|
||||
} else if (value !== this.user.password) {
|
||||
callback(new Error("两次输入的密码不一致"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
var validateEmail = (rule, value, callback) => {
|
||||
const emailPattern = /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/;
|
||||
if (value === "") {
|
||||
callback(new Error("请输入邮箱"));
|
||||
} else if (!emailPattern.test(value)) {
|
||||
callback(new Error("请输入有效的邮箱地址"));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
user: {
|
||||
username: "",
|
||||
password: "",
|
||||
surePassword: "",
|
||||
email:""
|
||||
},
|
||||
rules: {
|
||||
username: [{ validator: validateUsername, trigger: "blur" }],
|
||||
password: [{ validator: validatePassword, trigger: "blur" }],
|
||||
email: [{ validator: validateEmail, trigger: "blur" }],
|
||||
surePassword: [
|
||||
{ validator: validateSurePassword, trigger: "blur" },
|
||||
],
|
||||
},
|
||||
activeName: "login",
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
...mapActions("loginModule",["setUserActions"]),
|
||||
submitForm(formName) {
|
||||
this.$refs[formName].validate((valid) => {
|
||||
if (valid) {
|
||||
if (this.activeName === "login") {
|
||||
this.setUserActions(this.user)
|
||||
}
|
||||
if (this.activeName === "register") {
|
||||
this.$api.register({
|
||||
username:this.user.username,
|
||||
password:this.user.password,
|
||||
email:this.user.email
|
||||
}).then(res => {
|
||||
if (res.data.success) {
|
||||
MessageBox.alert(res.data.msg || '注册成功', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
MessageBox.alert(res.data.msg || '注册失败', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}).catch(error => {
|
||||
MessageBox.alert('请勿重复注册', '错误', {
|
||||
confirmButtonText: '确定',
|
||||
type: 'error'
|
||||
});
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log("error submit!!");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
},
|
||||
handleClick(tab, event) {},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.login {
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
// 更丰富的渐变背景
|
||||
background: linear-gradient(135deg,
|
||||
#002FA7 0%, // 克莱因蓝
|
||||
#0047AB 50%, // 钴蓝
|
||||
#1E90FF 100% // 道奇蓝
|
||||
);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
// 动态光斑效果
|
||||
.light-spots {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
pointer-events: none;
|
||||
|
||||
&::before, &::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
border-radius: 50%;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
animation: spotFloat 10s infinite alternate;
|
||||
}
|
||||
|
||||
&::before {
|
||||
top: 20%;
|
||||
left: 20%;
|
||||
animation-delay: -5s;
|
||||
}
|
||||
|
||||
&::after {
|
||||
bottom: 20%;
|
||||
right: 20%;
|
||||
}
|
||||
}
|
||||
|
||||
// 波纹动画效果
|
||||
.ripples {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
&::before, &::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background: radial-gradient(circle, rgba(255,255,255,0.2) 0%, transparent 70%);
|
||||
border-radius: 50%;
|
||||
animation: rippleEffect 8s infinite;
|
||||
}
|
||||
|
||||
&::after {
|
||||
animation-delay: -4s;
|
||||
animation-duration: 10s;
|
||||
}
|
||||
}
|
||||
|
||||
// 流动的线条效果
|
||||
.flowing-lines {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
top: -50%;
|
||||
left: -50%;
|
||||
background: linear-gradient(45deg,
|
||||
transparent 45%,
|
||||
rgba(255,255,255,0.1) 50%,
|
||||
transparent 55%
|
||||
);
|
||||
animation: flowingLines 5s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
.login-container {
|
||||
width: 480px;
|
||||
backdrop-filter: blur(20px);
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
|
||||
padding: 30px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
animation: float 6s ease-in-out infinite;
|
||||
transition: all 0.4s ease;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -2px;
|
||||
left: -2px;
|
||||
right: -2px;
|
||||
bottom: -2px;
|
||||
background: linear-gradient(45deg,
|
||||
#002FA7, // 克莱因蓝
|
||||
);
|
||||
border-radius: 22px;
|
||||
z-index: -1;
|
||||
animation: containerGlow 4s linear infinite;
|
||||
filter: blur(15px);
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
transform: translateY(-5px);
|
||||
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
}
|
||||
|
||||
.login-tabs {
|
||||
:deep(.el-tabs__nav-wrap) {
|
||||
&::after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-tabs__item) {
|
||||
color: #ffffff;
|
||||
font-size: 16px;
|
||||
transition: all 0.3s;
|
||||
padding: 0 20px;
|
||||
|
||||
&.is-active {
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: #fff;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-tabs__active-bar) {
|
||||
background: linear-gradient(90deg, #ffffff, rgba(255, 255, 255, 0.6));
|
||||
height: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.login-form {
|
||||
margin-top: 30px;
|
||||
|
||||
.el-form-item__label {
|
||||
color: #ffffff !important;
|
||||
font-weight: 500;
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
.form-input {
|
||||
:deep(.el-input__inner) {
|
||||
background: rgba(255, 255, 255, 0.08);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
border-radius: 10px;
|
||||
color: #ffffff;
|
||||
height: 45px;
|
||||
padding-left: 45px;
|
||||
transition: all 0.3s;
|
||||
font-size: 15px;
|
||||
|
||||
&::placeholder {
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
border-color: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
&:focus {
|
||||
border-color: #002FA7;
|
||||
box-shadow: 0 0 15px rgba(0, 47, 167, 0.5);
|
||||
animation: borderFlow 2s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-input__prefix) {
|
||||
left: 15px;
|
||||
color: #ffffff;
|
||||
opacity: 0.8;
|
||||
animation: iconGlow 2s ease-in-out infinite;
|
||||
}
|
||||
}
|
||||
|
||||
.submit-btn {
|
||||
width: 100%;
|
||||
height: 45px;
|
||||
background: linear-gradient(45deg, #002FA7, #0047AB);
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
letter-spacing: 2px;
|
||||
color: #fff;
|
||||
transition: all 0.3s;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
left: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(
|
||||
circle,
|
||||
rgba(255, 255, 255, 0.3) 0%,
|
||||
transparent 50%
|
||||
);
|
||||
animation: btnRadialGlow 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(45deg, #0047AB, #1E90FF);
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 7px 20px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
&:active {
|
||||
transform: translateY(1px);
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 30px;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: -30px;
|
||||
background: linear-gradient(
|
||||
to right,
|
||||
transparent,
|
||||
rgba(255, 255, 255, 0.3),
|
||||
transparent
|
||||
);
|
||||
transform: skewX(-45deg);
|
||||
animation: btnShine 3s infinite;
|
||||
}
|
||||
}
|
||||
|
||||
.help-content {
|
||||
text-align: center;
|
||||
color: #ffffff;
|
||||
padding: 30px;
|
||||
|
||||
i {
|
||||
font-size: 40px;
|
||||
margin-bottom: 15px;
|
||||
animation: pulse 2s infinite;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 15px;
|
||||
color: #ffffff;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
// 添加高级光束效果
|
||||
.light-beam {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
opacity: 0.5;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background: linear-gradient(90deg,
|
||||
transparent 0%,
|
||||
rgba(255, 255, 255, 0.2) 50%,
|
||||
transparent 100%
|
||||
);
|
||||
animation: scanLine 4s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
// 增强登录容器的交互效果
|
||||
.login-container {
|
||||
// 添加磁性悬浮效果
|
||||
&:hover {
|
||||
.el-input__inner {
|
||||
transform: translateY(-2px);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 增强输入框焦点效果
|
||||
.form-input {
|
||||
&:focus-within {
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: -2px;
|
||||
border-radius: inherit;
|
||||
padding: 2px;
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
transparent,
|
||||
rgba(255, 255, 255, 0.2),
|
||||
transparent
|
||||
);
|
||||
mask: linear-gradient(#fff 0 0) content-box,
|
||||
linear-gradient(#fff 0 0);
|
||||
mask-composite: exclude;
|
||||
animation: focusGlow 2s linear infinite;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 增强按钮点击效果
|
||||
.submit-btn {
|
||||
|
||||
&:active {
|
||||
transform: scale(0.98);
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
border-radius: inherit;
|
||||
background: radial-gradient(
|
||||
circle at center,
|
||||
rgba(255, 255, 255, 0.3),
|
||||
transparent 70%
|
||||
);
|
||||
animation: buttonPress 0.3s ease-out;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 动画关键帧
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-10px); }
|
||||
}
|
||||
|
||||
@keyframes borderGlow {
|
||||
0%, 100% { opacity: 0.5; }
|
||||
50% { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes shine {
|
||||
0% {
|
||||
transform: translateX(-100%) skewX(-15deg);
|
||||
opacity: 0;
|
||||
}
|
||||
20% { opacity: 0.5; }
|
||||
100% {
|
||||
transform: translateX(100%) skewX(-15deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0% { transform: scale(1); opacity: 1; }
|
||||
50% { transform: scale(1.1); opacity: 0.8; }
|
||||
100% { transform: scale(1); opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes buttonShine {
|
||||
0% { left: -100%; }
|
||||
50% { left: 100%; }
|
||||
100% { left: 100%; }
|
||||
}
|
||||
|
||||
@keyframes particleMove {
|
||||
0% { transform: translateY(0) rotate(0deg); }
|
||||
100% { transform: translateY(-100%) rotate(360deg); }
|
||||
}
|
||||
|
||||
// 添加新的光波动画
|
||||
@keyframes ripple {
|
||||
0% { transform: scale(1); opacity: 0.4; }
|
||||
100% { transform: scale(2); opacity: 0; }
|
||||
}
|
||||
|
||||
// 响应式适配
|
||||
@media screen and (max-width: 576px) {
|
||||
.login {
|
||||
.login-container {
|
||||
width: 90%;
|
||||
padding: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 新增动画关键帧
|
||||
@keyframes spotFloat {
|
||||
0% { transform: translate(0, 0) scale(1); }
|
||||
50% { transform: translate(30px, 20px) scale(1.2); }
|
||||
100% { transform: translate(-20px, -15px) scale(0.8); }
|
||||
}
|
||||
|
||||
@keyframes rippleEffect {
|
||||
0% {
|
||||
transform: scale(0.5);
|
||||
opacity: 0.5;
|
||||
}
|
||||
50% {
|
||||
transform: scale(2);
|
||||
opacity: 0.2;
|
||||
}
|
||||
100% {
|
||||
transform: scale(0.5);
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes flowingLines {
|
||||
0% { transform: translateX(-50%) rotate(0deg); }
|
||||
100% { transform: translateX(50%) rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes borderRotate {
|
||||
0% { filter: hue-rotate(0deg); }
|
||||
100% { filter: hue-rotate(360deg); }
|
||||
}
|
||||
|
||||
@keyframes inputGlow {
|
||||
0% { box-shadow: 0 0 5px rgba(255, 255, 255, 0.2); }
|
||||
100% { box-shadow: 0 0 20px rgba(255, 255, 255, 0.4); }
|
||||
}
|
||||
|
||||
@keyframes btnShine {
|
||||
0% { left: -30px; }
|
||||
100% { left: 130%; }
|
||||
}
|
||||
|
||||
// 添加新的呼吸灯效果
|
||||
@keyframes breathe {
|
||||
0%, 100% { opacity: 0.4; }
|
||||
50% { opacity: 1; }
|
||||
}
|
||||
|
||||
// 添加3D悬浮效果
|
||||
@keyframes float3D {
|
||||
0% {
|
||||
transform: perspective(1000px) rotateX(0deg) rotateY(0deg);
|
||||
}
|
||||
50% {
|
||||
transform: perspective(1000px) rotateX(3deg) rotateY(5deg);
|
||||
}
|
||||
100% {
|
||||
transform: perspective(1000px) rotateX(0deg) rotateY(0deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes borderFlow {
|
||||
0% {
|
||||
border-image: linear-gradient(
|
||||
90deg,
|
||||
#002FA7 0%,
|
||||
#0047AB 25%,
|
||||
#1E90FF 50%,
|
||||
#0047AB 75%,
|
||||
#002FA7 100%
|
||||
) 1;
|
||||
}
|
||||
100% {
|
||||
border-image: linear-gradient(
|
||||
90deg,
|
||||
#002FA7 100%,
|
||||
#0047AB 0%,
|
||||
#1E90FF 25%,
|
||||
#0047AB 50%,
|
||||
#002FA7 75%
|
||||
) 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes iconGlow {
|
||||
0%, 100% {
|
||||
text-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
50% {
|
||||
text-shadow: 0 0 15px rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes containerGlow {
|
||||
0% {
|
||||
filter: blur(15px) hue-rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
filter: blur(15px) hue-rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
// 修改所有文字为白色
|
||||
.el-form-item__label,
|
||||
.el-tabs__item,
|
||||
.help-content,
|
||||
.el-input__inner,
|
||||
.submit-btn {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
// 增强提交按钮效果
|
||||
.submit-btn {
|
||||
background: linear-gradient(45deg, #002FA7, #0047AB);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
left: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(
|
||||
circle,
|
||||
rgba(255, 255, 255, 0.3) 0%,
|
||||
transparent 50%
|
||||
);
|
||||
animation: btnRadialGlow 3s ease-in-out infinite;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(45deg, #0047AB, #1E90FF);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes btnRadialGlow {
|
||||
0% {
|
||||
transform: scale(0.5) rotate(0deg);
|
||||
opacity: 0;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.5;
|
||||
}
|
||||
100% {
|
||||
transform: scale(2) rotate(360deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.form-input {
|
||||
:deep(.el-input__inner) {
|
||||
color: #ffffff !important;
|
||||
-webkit-text-fill-color: #ffffff !important;
|
||||
background-color: rgba(255, 255, 255, 0.08) !important;
|
||||
caret-color: #ffffff !important; // 光标颜色
|
||||
|
||||
// 处理自动填充
|
||||
&:-webkit-autofill,
|
||||
&:-webkit-autofill:hover,
|
||||
&:-webkit-autofill:focus,
|
||||
&:-webkit-autofill:active {
|
||||
-webkit-text-fill-color: #ffffff !important;
|
||||
-webkit-box-shadow: 0 0 0 30px transparent inset !important;
|
||||
transition: background-color 5000s ease-in-out 0s;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
// 占位符样式
|
||||
&::placeholder {
|
||||
color: rgba(255, 255, 255, 0.6) !important;
|
||||
-webkit-text-fill-color: rgba(255, 255, 255, 0.6) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 全局覆盖输入框样式
|
||||
:deep(.el-input__inner),
|
||||
:deep(.el-input input),
|
||||
:deep(.el-input textarea) {
|
||||
color: #ffffff !important;
|
||||
-webkit-text-fill-color: #ffffff !important;
|
||||
}
|
||||
|
||||
// 标签文字颜色
|
||||
:deep(.el-form-item__label) {
|
||||
color: #ffffff !important;
|
||||
-webkit-text-fill-color: #ffffff !important;
|
||||
}
|
||||
|
||||
// 新增动画关键帧
|
||||
@keyframes scanLine {
|
||||
0% {
|
||||
transform: translateY(-100%);
|
||||
}
|
||||
100% {
|
||||
transform: translateY(100%);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes focusGlow {
|
||||
0% {
|
||||
background-position: 200% 0;
|
||||
}
|
||||
100% {
|
||||
background-position: -200% 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes buttonPress {
|
||||
0% {
|
||||
transform: scale(0.8);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
transform: scale(1.5);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="less">
|
||||
.el-input__inner {
|
||||
color: #ffffff !important;
|
||||
-webkit-text-fill-color: #ffffff !important;
|
||||
background-color: rgba(255, 255, 255, 0.08) !important;
|
||||
}
|
||||
</style>
|
After Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1,59 @@
|
||||
<template>
|
||||
<div>
|
||||
<bar title="法律助手" left="bars" right="search" color="font-white" />
|
||||
<carousel />
|
||||
<navigation />
|
||||
<ask-home />
|
||||
<infer-home />
|
||||
<legal-home />
|
||||
<background />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Background from "@/components/background/Background";
|
||||
import Carousel from "@/components/carousel/Carousel";
|
||||
import Bar from "@/components/bar/Bar";
|
||||
import Navigation from "@/components/main/Navigation";
|
||||
import AskHome from "@/components/main/ask/AskHome";
|
||||
import InferHome from "@/components/main/infer/InferHome";
|
||||
import LegalHome from "@/components/main/legal/LegalHome";
|
||||
import {mapState} from 'vuex'
|
||||
|
||||
export default {
|
||||
name: "Home",
|
||||
components: {
|
||||
LegalHome,
|
||||
InferHome,
|
||||
Navigation,
|
||||
Background,
|
||||
Carousel,
|
||||
Bar,
|
||||
AskHome
|
||||
},
|
||||
computed: {
|
||||
...mapState(['currentTab'])
|
||||
},
|
||||
watch: {
|
||||
currentTab() {
|
||||
let metaThemeColor = document.querySelector("meta[name=theme-color]");
|
||||
if(this.currentTab === 'Home') {
|
||||
metaThemeColor.setAttribute("content", "#ffa947");
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
if(this.currentTab === 'Ask') {
|
||||
metaThemeColor.setAttribute("content", "#12D8FA");
|
||||
} else if(this.currentTab === 'Infer') {
|
||||
metaThemeColor.setAttribute("content", "#3ba675");
|
||||
}
|
||||
}, 400);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
* {
|
||||
box-sizing: border-box!important;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,30 @@
|
||||
<template>
|
||||
<div class="background">
|
||||
<background-color :colors="setting.color"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import BackgroundColor from "@/components/background/BackgroundColor";
|
||||
export default {
|
||||
name: "Background",
|
||||
components: {
|
||||
BackgroundColor
|
||||
},
|
||||
computed: {
|
||||
...mapState(['setting'])
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.background {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,33 @@
|
||||
<template>
|
||||
<div class="background-color"
|
||||
:style="{ backgroundImage: gradientColor }"
|
||||
></div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "BackgroundColor",
|
||||
props: {
|
||||
colors: {
|
||||
type: Array
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
gradientColor () {
|
||||
const colorBottom = `color-stop(30%, ${this.colors[0]})`;
|
||||
const colorTop = `to(${this.colors[1]})`;
|
||||
return `-webkit-gradient(linear, left bottom, left top, ${colorBottom}, ${colorTop})`
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.background-color {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transition: opacity 0.5s ease;
|
||||
opacity: 1;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,63 @@
|
||||
<template>
|
||||
<div class="bar text-shadow" :class="[`${color}`]">
|
||||
<span @click="$emit('left')">
|
||||
<i :class="['fas', `fa-${left}`]"></i>
|
||||
</span>
|
||||
<span>{{ title }}</span>
|
||||
<span @click="$emit('right')">
|
||||
<i :class="['fas', `fa-${right}`]"></i>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
title: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
left: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
right: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
default: 'font-white'
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.bar {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-direction: row;
|
||||
height: 54px;
|
||||
font-size: 18px;
|
||||
z-index: 1;
|
||||
padding: 0 15px;
|
||||
transition-duration: 250ms;
|
||||
}
|
||||
|
||||
span {
|
||||
padding: 5px 5px;
|
||||
}
|
||||
|
||||
.font-white {
|
||||
color: #fefefe;
|
||||
text-shadow: 2px 4px 6px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.font-dark {
|
||||
color: #37474f;
|
||||
text-shadow: 2px 4px 6px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
</style>
|
@ -0,0 +1,45 @@
|
||||
<template>
|
||||
<div class="carousel">
|
||||
<p class="heading-1">智能</p>
|
||||
<p class="heading-2">法律助手</p>
|
||||
<p class="heading-3">Smart Legal Assistant</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.carousel {
|
||||
display: flex;
|
||||
padding: 0 40px;
|
||||
height: 220px;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
transition: all 0.5s ease;
|
||||
color: #fefefe;
|
||||
text-shadow: 2px 4px 5px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.heading-1 {
|
||||
font-size: 48px;
|
||||
opacity: 95%;
|
||||
font-weight: 200;
|
||||
margin: 0;
|
||||
}
|
||||
.heading-2 {
|
||||
font-size: 40px;
|
||||
opacity: 95%;
|
||||
font-weight: 300;
|
||||
margin:0;
|
||||
}
|
||||
.heading-3 {
|
||||
opacity: 90%;
|
||||
font-size: 25px;
|
||||
font-weight: 200;
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,28 @@
|
||||
<template>
|
||||
<div class="ask-card">
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "AskCard"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.ask-card {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
background-color: rgba(255, 255, 255, 0.80);
|
||||
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 30px;
|
||||
padding-top: 12px;
|
||||
margin-top: 15px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
transition-duration: 2s;
|
||||
will-change: transform;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "AskList"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -0,0 +1,32 @@
|
||||
<template>
|
||||
<div class="navigation">
|
||||
<!--通过tab控制跳往哪个子组件-->
|
||||
<navigator-button tab="Ask" title="问答咨询" icon="far fa-comment"/>
|
||||
<navigator-button tab="Infer" title="案情推断" icon="far fa-compass"/>
|
||||
<navigator-button tab="Legal" title="文书查询" icon="fas fa-search"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import NavigatorButton from "@/components/main/NavigatorButton";
|
||||
export default {
|
||||
name: "Navigation",
|
||||
components: {
|
||||
NavigatorButton,
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.navigation {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-content: center;
|
||||
padding: 0 40px;
|
||||
margin-top: 25px;
|
||||
justify-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
transition: all 0.5s ease;
|
||||
color: #fefefe;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,79 @@
|
||||
<template>
|
||||
<div class="button" @click="handleClick">
|
||||
<i :class="[`${icon}`]" class="button-icon"></i>
|
||||
<span class="button-title">{{ title }}</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState} from 'vuex'
|
||||
export default {
|
||||
props: {
|
||||
tab: {
|
||||
type: String,
|
||||
default: 'Ask'
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
default: 'comment'
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '问答咨询'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['selected', 'unselect', 'onAsk'])
|
||||
},
|
||||
methods: {
|
||||
handleClick () {
|
||||
const appRect = document.querySelector('#app').getBoundingClientRect();
|
||||
const elRect = this.$el.getBoundingClientRect();
|
||||
const rect = {};
|
||||
const tab = this.tab;
|
||||
rect.top = elRect.top - appRect.top;
|
||||
rect.left = elRect.left - appRect.left;
|
||||
rect.width = elRect.width;
|
||||
rect.height = elRect.height;
|
||||
rect.appWidth = appRect.width;
|
||||
rect.appHeight = appRect.height;
|
||||
this.$store.commit('selectTab', { rect });
|
||||
this.$store.commit('setTab', tab)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.button {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
background-color: #f8f8f8;
|
||||
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 30px;
|
||||
padding-top: 12px;
|
||||
margin-top: 15px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
transition-duration: 2s;
|
||||
will-change: transform;
|
||||
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.button:hover {
|
||||
background-color: rgba(255, 255, 255, 0.87);
|
||||
box-shadow: 5px 10px 10px rgba(0, 0, 0, 0.18);
|
||||
}
|
||||
.button-icon {
|
||||
font-size: 30px;
|
||||
color: #455a64;
|
||||
margin-right: 15px;
|
||||
margin-top: 2px;
|
||||
margin-left: -25px;
|
||||
}
|
||||
.button-title {
|
||||
font-size: 18px;
|
||||
margin-top: 5px;
|
||||
color: #37474f;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "AskDetail"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "InferDetail"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -0,0 +1,224 @@
|
||||
<template>
|
||||
<transition name="show" @enter="handleEnter" @leave="handleLeave">
|
||||
<div class="infer-home" v-if="selected&&(currentTab=='Infer')">
|
||||
<bar id="app-bar" class="app-bar" :color="barColor" @left="unselectTab" left="arrow-left"/>
|
||||
<div class="infer-content">
|
||||
<div class="infer-heading">
|
||||
<i v-if="loading" class="fas fa-5x fa-spin fa-spinner infer-icon"></i>
|
||||
<i v-else class="fas fa-microphone-alt infer-icon"></i>
|
||||
<search-bar class="search-bar" type="area" v-on:result="handleInferResult" mode="infer" v-on:loading="handleLoading" />
|
||||
<h1 class="infer-title">案情推断</h1><br>
|
||||
</div>
|
||||
<div id="infer-list" class="infer-list">
|
||||
<home-card class="home-card" v-for="(infer, index) in data" :theId="index" :key="index" :title="title(index)" :content="infer" />
|
||||
</div>
|
||||
<div class="infer-footer">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState, mapMutations} from 'vuex';
|
||||
import Bar from "@/components/bar/Bar";
|
||||
import SearchBar from "@/components/utils/SearchBar";
|
||||
import HomeCard from "@/components/utils/HomeCard";
|
||||
|
||||
export default {
|
||||
name: "InferHome",
|
||||
components: {
|
||||
HomeCard,
|
||||
Bar,
|
||||
SearchBar
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
barColor: 'font-white',
|
||||
data: null,
|
||||
crime: null,
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['selected', 'unselect', 'currentTab']),
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['unselectTab']),
|
||||
handleEnter(el) {
|
||||
Object.assign(el.style, {
|
||||
top: `${this.selected.rect.top}px`,
|
||||
left: `${this.selected.rect.left}px`,
|
||||
width: `${this.selected.rect.width}px`,
|
||||
height: `${this.selected.rect.height}px`
|
||||
});
|
||||
setTimeout(() => {
|
||||
Object.assign(el.style, {
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: `${this.selected.rect.appWidth}px`,
|
||||
height: `${this.selected.rect.appHeight}px`
|
||||
})
|
||||
}, 0)
|
||||
},
|
||||
handleLeave(el) {
|
||||
Object.assign(el.style, {
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: `${this.unselect.rect.appWidth}px`,
|
||||
height: `${this.unselect.rect.appHeight}px`
|
||||
});
|
||||
setTimeout(() => {
|
||||
Object.assign(el.style, {
|
||||
top: `${this.unselect.rect.top}px`,
|
||||
left: `${this.unselect.rect.left}px`,
|
||||
width: `${this.unselect.rect.width}px`,
|
||||
height: `${this.unselect.rect.height}px`
|
||||
})
|
||||
}, 0)
|
||||
},
|
||||
handleLoading(data) {
|
||||
this.loading = data;
|
||||
},
|
||||
handleInferResult(data) {
|
||||
delete data.id;
|
||||
this.crime = data.crimeName;
|
||||
delete data.crimeName;
|
||||
this.data = data;
|
||||
this.loading = false;
|
||||
},
|
||||
title(index) {
|
||||
if(index==='concept') {
|
||||
return '罪名解释'
|
||||
} else if(index==='feature') {
|
||||
return '罪名特征'
|
||||
} else if(index==='rending') {
|
||||
return '定罪条件'
|
||||
} else if(index==='punish') {
|
||||
return '量刑区间'
|
||||
} else if(index==='laws') {
|
||||
return '有关法条'
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.infer-home {
|
||||
position: fixed;
|
||||
border-radius: 0;
|
||||
color: #444;
|
||||
background-color: #f8f8f8;
|
||||
padding: 0 12px;
|
||||
will-change: top, left, width, height;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.infer-home::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app-bar {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.infer-heading {
|
||||
width: calc(100% + 60px);
|
||||
height: 450px;
|
||||
color: #fff;
|
||||
background: #2c7d59;
|
||||
text-align: center;
|
||||
text-shadow: 0 5px 8px rgba(0, 0, 0, 0.1);
|
||||
background: -webkit-linear-gradient(to top, #2c7d59, #3ba675);
|
||||
background: linear-gradient(to top, #2c7d59, #3ba675);
|
||||
margin-top: -54px;
|
||||
margin-left: -30px;
|
||||
margin-right: -30px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.15);
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
.infer-heading h1 {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 45px;
|
||||
}
|
||||
|
||||
.infer-icon {
|
||||
font-size: 35px;
|
||||
color: #fafafa;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.home-card {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.home-card:first-of-type {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.infer-footer {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 20px;
|
||||
font-size: 15px;
|
||||
color: #37474f;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.show-enter-to,
|
||||
.show-leave {
|
||||
border-radius: 0;
|
||||
|
||||
.infer-home {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.infer-home,
|
||||
.app-bar,
|
||||
.infer-heading,
|
||||
.infer-content {
|
||||
opacity: 1;
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.show-leave-to,
|
||||
.show-enter {
|
||||
border-radius: 30px;
|
||||
|
||||
.infer-home {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.infer-home,
|
||||
.app-bar,
|
||||
.infer-heading,
|
||||
.infer-content{
|
||||
opacity: 0;
|
||||
transform: translate3d(0, -40px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.show-enter-active,
|
||||
.show-leave-active {
|
||||
transition: all 0.5s ease;
|
||||
|
||||
.infer-home,
|
||||
.app-bar,
|
||||
.infer-heading,
|
||||
.infer-content{
|
||||
transition: all 0.5s ease;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "LegalDetail"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -0,0 +1,211 @@
|
||||
<template>
|
||||
<transition name="show" @enter="handleEnter" @leave="handleLeave">
|
||||
<div class="legal-home" v-if="selected&&(currentTab=='Legal')">
|
||||
<bar id="app-bar" class="app-bar" :color="barColor" @left="unselectTab" left="arrow-left"/>
|
||||
<div class="legal-content">
|
||||
<div class="legal-heading">
|
||||
<search-bar class="search-bar" type="area" v-on:result="handleInferResult" mode="legal" v-on:loading="handleLoading"/>
|
||||
<h1 class="legal-title">查询相似文书</h1>
|
||||
</div>
|
||||
<div id="legal-list" class="legal-list">
|
||||
<home-card class="home-card" v-for="(theCase,index) in data" :theId="index" :key="index" :title="theCase.title" :content="theCase"/>
|
||||
</div>
|
||||
<div class="legal-footer"></div>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState, mapMutations} from 'vuex'
|
||||
import Bar from "@/components/bar/Bar";
|
||||
import HomeCard from "@/components/utils/HomeCard";
|
||||
import SearchBar from "@/components/utils/SearchBar";
|
||||
|
||||
export default {
|
||||
name: "LegalHome",
|
||||
components: {
|
||||
HomeCard,
|
||||
Bar,
|
||||
SearchBar
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
barColor: 'font-white',
|
||||
data: {},
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['selected', 'unselect', 'currentTab'])
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['unselectTab']),
|
||||
handleInferResult(data) {
|
||||
this.data=data;
|
||||
},
|
||||
handleLoading(loading) {
|
||||
this.loading=loading;
|
||||
},
|
||||
handleEnter(el) {
|
||||
Object.assign(el.style, {
|
||||
top: `${this.selected.rect.top}px`,
|
||||
left: `${this.selected.rect.left}px`,
|
||||
width: `${this.selected.rect.width}px`,
|
||||
height: `${this.selected.rect.height}px`
|
||||
});
|
||||
setTimeout(() => {
|
||||
Object.assign(el.style, {
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: `${this.selected.rect.appWidth}px`,
|
||||
height: `${this.selected.rect.appHeight}px`
|
||||
})
|
||||
}, 0)
|
||||
},
|
||||
handleLeave(el) {
|
||||
Object.assign(el.style, {
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: `${this.unselect.rect.appWidth}px`,
|
||||
height: `${this.unselect.rect.appHeight}px`
|
||||
});
|
||||
setTimeout(() => {
|
||||
Object.assign(el.style, {
|
||||
top: `${this.unselect.rect.top}px`,
|
||||
left: `${this.unselect.rect.left}px`,
|
||||
width: `${this.unselect.rect.width}px`,
|
||||
height: `${this.unselect.rect.height}px`
|
||||
})
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.legal-home {
|
||||
position: fixed;
|
||||
border-radius: 0;
|
||||
color: #444;
|
||||
background-color: #f8f8f8;
|
||||
padding: 0 12px;
|
||||
will-change: top, left, width, height;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.legal-home::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app-bar {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.upload {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.legal-heading {
|
||||
width: calc(100% + 60px);
|
||||
height: 350px;
|
||||
color: #fff;
|
||||
background: #6e18e1;
|
||||
text-align: center;
|
||||
text-shadow: 0 5px 8px rgba(0, 0, 0, 0.1);
|
||||
background: -webkit-linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||
background: linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||
margin-top: -54px;
|
||||
margin-left: -30px;
|
||||
margin-right: -30px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.15);
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
.upload-form {
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
.legal-heading h1 {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 45px;
|
||||
}
|
||||
|
||||
.legal-icon {
|
||||
font-size: 30px;
|
||||
color: #fafafa;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.home-card {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.home-card:first-of-type {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.legal-footer {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 20px;
|
||||
font-size: 15px;
|
||||
color: #37474f;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.show-enter-to,
|
||||
.show-leave {
|
||||
border-radius: 0;
|
||||
|
||||
.legal-home {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.legal-home,
|
||||
.app-bar,
|
||||
.legal-heading,
|
||||
.legal-content {
|
||||
opacity: 1;
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.show-leave-to,
|
||||
.show-enter {
|
||||
border-radius: 30px;
|
||||
|
||||
.legal-home {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.legal-home,
|
||||
.app-bar,
|
||||
.legal-heading,
|
||||
.legal-content {
|
||||
opacity: 0;
|
||||
transform: translate3d(0, -40px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.show-enter-active,
|
||||
.show-leave-active {
|
||||
transition: all 0.5s ease;
|
||||
|
||||
.legal-home,
|
||||
.app-bar,
|
||||
.legal-heading,
|
||||
.legal-content {
|
||||
transition: all 0.5s ease;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,207 @@
|
||||
<template>
|
||||
<transition name="show" @enter="handleEnter" @leave="handleLeave">
|
||||
<div class="legal-home" v-if="selected&&(currentTab=='Legal')">
|
||||
<bar id="app-bar" class="app-bar" :color="barColor" @left="unselectTab" left="arrow-left"/>
|
||||
<div class="legal-content">
|
||||
<div class="legal-heading">
|
||||
<form class="upload-form">
|
||||
<a href="#"><i class="fas fa-upload legal-icon"></i></a>
|
||||
<Upload class="upload" />
|
||||
</form>
|
||||
<h1 class="legal-title">查询相似文书</h1>
|
||||
</div>
|
||||
<div id="legal-list" class="legal-list">
|
||||
<home-card class="home-card" />
|
||||
</div>
|
||||
<div class="legal-footer">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapState, mapMutations} from 'vuex'
|
||||
import Bar from "@/components/bar/Bar";
|
||||
import HomeCard from "@/components/utils/HomeCard";
|
||||
import Upload from "@/components/utils/Upload";
|
||||
|
||||
export default {
|
||||
name: "LegalHome",
|
||||
components: {
|
||||
HomeCard,
|
||||
Bar,
|
||||
Upload
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
barColor: 'font-white',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(['selected', 'unselect', 'currentTab'])
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['unselectTab']),
|
||||
handleEnter(el) {
|
||||
Object.assign(el.style, {
|
||||
top: `${this.selected.rect.top}px`,
|
||||
left: `${this.selected.rect.left}px`,
|
||||
width: `${this.selected.rect.width}px`,
|
||||
height: `${this.selected.rect.height}px`
|
||||
});
|
||||
setTimeout(() => {
|
||||
Object.assign(el.style, {
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: `${this.selected.rect.appWidth}px`,
|
||||
height: `${this.selected.rect.appHeight}px`
|
||||
})
|
||||
}, 0)
|
||||
},
|
||||
handleLeave(el) {
|
||||
Object.assign(el.style, {
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: `${this.unselect.rect.appWidth}px`,
|
||||
height: `${this.unselect.rect.appHeight}px`
|
||||
});
|
||||
setTimeout(() => {
|
||||
Object.assign(el.style, {
|
||||
top: `${this.unselect.rect.top}px`,
|
||||
left: `${this.unselect.rect.left}px`,
|
||||
width: `${this.unselect.rect.width}px`,
|
||||
height: `${this.unselect.rect.height}px`
|
||||
})
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.legal-home {
|
||||
position: fixed;
|
||||
border-radius: 0;
|
||||
color: #444;
|
||||
background-color: #f8f8f8;
|
||||
padding: 0 12px;
|
||||
will-change: top, left, width, height;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.legal-home::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.app-bar {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.upload {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
.legal-heading {
|
||||
width: calc(100% + 60px);
|
||||
height: 350px;
|
||||
color: #fff;
|
||||
background: #6e18e1;
|
||||
text-align: center;
|
||||
text-shadow: 0 5px 8px rgba(0, 0, 0, 0.1);
|
||||
background: -webkit-linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||
background: linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||
margin-top: -54px;
|
||||
margin-left: -30px;
|
||||
margin-right: -30px;
|
||||
padding: 30px;
|
||||
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.15);
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
.upload-form {
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
.legal-heading h1 {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.search-bar {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 45px;
|
||||
}
|
||||
|
||||
.legal-icon {
|
||||
font-size: 30px;
|
||||
color: #fafafa;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.home-card {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.home-card:first-of-type {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.legal-footer {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 20px;
|
||||
font-size: 15px;
|
||||
color: #37474f;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.show-enter-to,
|
||||
.show-leave {
|
||||
border-radius: 0;
|
||||
|
||||
.legal-home {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.legal-home,
|
||||
.app-bar,
|
||||
.legal-heading,
|
||||
.legal-content {
|
||||
opacity: 1;
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.show-leave-to,
|
||||
.show-enter {
|
||||
border-radius: 30px;
|
||||
|
||||
.legal-home {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.legal-home,
|
||||
.app-bar,
|
||||
.legal-heading,
|
||||
.legal-content{
|
||||
opacity: 0;
|
||||
transform: translate3d(0, -40px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.show-enter-active,
|
||||
.show-leave-active {
|
||||
transition: all 0.5s ease;
|
||||
|
||||
.legal-home,
|
||||
.app-bar,
|
||||
.legal-heading,
|
||||
.legal-content{
|
||||
transition: all 0.5s ease;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,92 @@
|
||||
<template>
|
||||
<div class="upload">
|
||||
<label class="file" id="fileLabel">
|
||||
<input type="file" id="file">
|
||||
<span class="file-custom">123</span>
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name : "upload",
|
||||
methods: {
|
||||
uploadFunc : function (document) {
|
||||
let input = document.getElementById("file");
|
||||
let label = document.getElementById("fileLabel");
|
||||
|
||||
input.addEventListener( 'change', function( e )
|
||||
{
|
||||
let fileName = '';
|
||||
fileName = e.target.value.split( '\\' ).pop();
|
||||
label.querySelector( 'span' ).innerHTML = fileName;
|
||||
});
|
||||
|
||||
// Firefox bug fix
|
||||
input.addEventListener( 'focus', function(){ input.classList.add( 'has-focus' ); });
|
||||
input.addEventListener( 'blur', function(){ input.classList.remove( 'has-focus' ); });
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.uploadFunc(document);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.file {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
height: 40px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.file input {
|
||||
min-width: 14rem;
|
||||
margin: 0;
|
||||
filter: alpha(opacity=0);
|
||||
opacity: 0;
|
||||
}
|
||||
.file-custom {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: 5;
|
||||
height: 40px;
|
||||
padding: .5rem 1rem;
|
||||
line-height: 1.5;
|
||||
color: #555;
|
||||
background-color: #fff;
|
||||
border: .075rem solid #ddd;
|
||||
border-radius: .25rem;
|
||||
box-shadow: inset 0 .2rem .4rem rgba(0,0,0,.05);
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-align: left;
|
||||
}
|
||||
.file-custom:before {
|
||||
position: absolute;
|
||||
top: -.075rem;
|
||||
right: -.075rem;
|
||||
bottom: -.075rem;
|
||||
z-index: 6;
|
||||
display: block;
|
||||
content: "选择文书";
|
||||
height: 20px;
|
||||
padding: .5rem 1rem;
|
||||
line-height: 1.5;
|
||||
color: #555;
|
||||
background-color: #eee;
|
||||
border: .075rem solid #ddd;
|
||||
border-radius: 0 .25rem .25rem 0;
|
||||
}
|
||||
|
||||
/* Focus */
|
||||
.file input:focus ~ .file-custom {
|
||||
box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9;
|
||||
}
|
||||
</style>
|
@ -0,0 +1,17 @@
|
||||
import Vue from 'vue'
|
||||
import App from './App.vue'
|
||||
import router from "@/router";
|
||||
import store from "@/store";
|
||||
import './registerServiceWorker'
|
||||
import Axios from "axios";
|
||||
import VueAxios from "vue-axios";
|
||||
|
||||
Vue.use(VueAxios, Axios);
|
||||
|
||||
Vue.config.productionTip = false;
|
||||
|
||||
new Vue({
|
||||
router,
|
||||
store,
|
||||
render: h => h(App),
|
||||
}).$mount('#app');
|
@ -0,0 +1,32 @@
|
||||
/* eslint-disable no-console */
|
||||
|
||||
import { register } from 'register-service-worker'
|
||||
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
register(`${process.env.BASE_URL}service-worker.js`, {
|
||||
ready () {
|
||||
console.log(
|
||||
'App is being served from cache by a service worker.\n' +
|
||||
'For more details, visit https://goo.gl/AFskqB'
|
||||
)
|
||||
},
|
||||
registered () {
|
||||
console.log('Service worker has been registered.')
|
||||
},
|
||||
cached () {
|
||||
console.log('Content has been cached for offline use.')
|
||||
},
|
||||
updatefound () {
|
||||
console.log('New content is downloading.')
|
||||
},
|
||||
updated () {
|
||||
console.log('New content is available; please refresh.')
|
||||
},
|
||||
offline () {
|
||||
console.log('No internet connection found. App is running in offline mode.')
|
||||
},
|
||||
error (error) {
|
||||
console.error('Error during service worker registration:', error)
|
||||
}
|
||||
})
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
import Vue from 'vue'
|
||||
import Router from 'vue-router'
|
||||
import Home from "@/components/Home";
|
||||
|
||||
Vue.use(Router);
|
||||
|
||||
export default new Router({
|
||||
mode: 'history',
|
||||
base: process.env.BABEL_URL,
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
name: 'home',
|
||||
components: {
|
||||
default: Home,
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
@ -0,0 +1,58 @@
|
||||
import Vue from 'vue'
|
||||
import Vuex from 'vuex'
|
||||
|
||||
Vue.use(Vuex);
|
||||
|
||||
export default new Vuex.Store({
|
||||
state: {
|
||||
setting: {
|
||||
color: ['#ff6262', '#ffa947'],
|
||||
},
|
||||
settingOption: {
|
||||
colors: [{
|
||||
name: '炽焰',
|
||||
color: ['#ff6262', '#ffa947'],
|
||||
},{
|
||||
name: '冰蓝',
|
||||
color: ['#5b9df9', '#47bfff'],
|
||||
},{
|
||||
name: '青草',
|
||||
color: ['#2c7d59', '#3ba776'],
|
||||
},{
|
||||
name: '江户',
|
||||
color: ['#8E2DE2', '#4A00E0'],
|
||||
}]
|
||||
},
|
||||
askList: [],
|
||||
onAsk: false,
|
||||
onInfer: false,
|
||||
onLegal: false,
|
||||
currentTab: 'Home',
|
||||
selected: null,
|
||||
unselect: null,
|
||||
cardSelected: null,
|
||||
cardUnselect: null,
|
||||
},
|
||||
mutations: {
|
||||
selectTab (state, selected) {
|
||||
state.unselect = null;
|
||||
state.selected = selected;
|
||||
},
|
||||
setTab (state, tab) {
|
||||
state.currentTab = tab;
|
||||
},
|
||||
unselectTab (state) {
|
||||
state.unselect = state.selected;
|
||||
state.selected = null;
|
||||
state.currentTab = 'Home';
|
||||
},
|
||||
selectCard (state, selected) {
|
||||
state.cardUnselect = null;
|
||||
state.cardSelected = selected;
|
||||
},
|
||||
unselectCard (state) {
|
||||
state.cardUnselect = state.cardSelected;
|
||||
state.cardSelected = null;
|
||||
}
|
||||
}
|
||||
})
|
Loading…
Reference in new issue