随机发病,运势,冷笑话,段子
This commit is contained in:
26
frontend/60sapi/娱乐消遣/随机运势/css/background.css
Normal file
26
frontend/60sapi/娱乐消遣/随机运势/css/background.css
Normal file
@@ -0,0 +1,26 @@
|
||||
body {
|
||||
background: linear-gradient(-45deg, #0a021a, #2a0d3f, #4a1a6c, #7b2f8f);
|
||||
background-size: 400% 400%;
|
||||
animation: gradientBG 20s ease infinite;
|
||||
color: #ffffff;
|
||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
@keyframes gradientBG {
|
||||
0% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
50% {
|
||||
background-position: 100% 50%;
|
||||
}
|
||||
100% {
|
||||
background-position: 0% 50%;
|
||||
}
|
||||
}
|
||||
342
frontend/60sapi/娱乐消遣/随机运势/css/style.css
Normal file
342
frontend/60sapi/娱乐消遣/随机运势/css/style.css
Normal file
@@ -0,0 +1,342 @@
|
||||
.container {
|
||||
text-align: center;
|
||||
padding: 20px;
|
||||
max-width: 600px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 2.8em;
|
||||
color: #f0e6ff;
|
||||
text-shadow: 0 0 10px #d1a9ff, 0 0 20px #d1a9ff;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
header p {
|
||||
font-size: 1.2em;
|
||||
color: #e0c8ff;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.crystal-ball-container {
|
||||
perspective: 1000px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.crystal-ball {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.6), rgba(200, 180, 255, 0.1));
|
||||
border-radius: 50%;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
box-shadow: 0 0 30px #c390ff, 0 0 60px #a060e0, inset 0 0 20px rgba(255, 220, 255, 0.3);
|
||||
animation: float 6s ease-in-out infinite;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
|
||||
.reflection {
|
||||
width: 80px;
|
||||
height: 40px;
|
||||
background: rgba(255, 255, 255, 0.3);
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: 40px;
|
||||
transform: rotate(-30deg);
|
||||
filter: blur(5px);
|
||||
}
|
||||
|
||||
.swirl {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 120%;
|
||||
height: 120%;
|
||||
background: linear-gradient(45deg, rgba(255, 192, 203, 0.1), rgba(128, 0, 128, 0.2));
|
||||
border-radius: 50%;
|
||||
animation: swirl 10s linear infinite;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-20px); }
|
||||
}
|
||||
|
||||
@keyframes swirl {
|
||||
from { transform: translate(-50%, -50%) rotate(0deg); }
|
||||
to { transform: translate(-50%, -50%) rotate(360deg); }
|
||||
}
|
||||
|
||||
.fortune-card {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
border-radius: 15px;
|
||||
padding: 30px;
|
||||
margin-bottom: 30px;
|
||||
min-height: 120px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
backdrop-filter: blur(10px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37);
|
||||
transition: opacity 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
.fortune-content {
|
||||
opacity: 0;
|
||||
transition: opacity 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
.fortune-content.visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#luck-desc {
|
||||
font-size: 2em;
|
||||
color: #ffc0cb;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
|
||||
#luck-tip {
|
||||
font-size: 1.1em;
|
||||
color: #e0e0e0;
|
||||
margin: 0;
|
||||
padding-bottom: 20px; /* Add some space before the new details */
|
||||
}
|
||||
|
||||
.fortune-details {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
margin-top: 20px;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.detail-item {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.detail-item h3 {
|
||||
font-size: 0.9em;
|
||||
color: #ffc0cb;
|
||||
margin: 0 0 5px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.detail-item p {
|
||||
font-size: 1.2em;
|
||||
margin: 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#lucky-color {
|
||||
display: inline-block;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 50%;
|
||||
border: 2px solid white;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
|
||||
/* Remove the text content */
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
/* Tarot Card Styles */
|
||||
.tarot-container {
|
||||
margin-top: 40px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.tarot-container h2 {
|
||||
font-size: 1.5em;
|
||||
color: #f0e6ff;
|
||||
text-shadow: 0 0 8px #d1a9ff;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.tarot-card-container {
|
||||
width: 180px;
|
||||
height: 280px;
|
||||
perspective: 1000px;
|
||||
margin: 0 auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tarot-card-inner {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transition: transform 0.8s;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
|
||||
.tarot-card-container.flipped .tarot-card-inner {
|
||||
transform: rotateY(180deg);
|
||||
}
|
||||
|
||||
.tarot-card-front,
|
||||
.tarot-card-back {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.tarot-card-back {
|
||||
background: linear-gradient(135deg, #4a1a6c, #2a0d3f);
|
||||
border: 2px solid #d1a9ff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 3em;
|
||||
color: #d1a9ff;
|
||||
}
|
||||
|
||||
.tarot-card-back::after {
|
||||
content: '✧'; /* A simple star symbol */
|
||||
text-shadow: 0 0 10px #f0e6ff;
|
||||
}
|
||||
|
||||
.tarot-card-front {
|
||||
background: linear-gradient(135deg, #3e165b, #592883);
|
||||
border: 2px solid #d1a9ff;
|
||||
color: white;
|
||||
transform: rotateY(180deg);
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#tarot-name {
|
||||
font-size: 1.4em;
|
||||
color: #ffc0cb;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
|
||||
#tarot-interpretation {
|
||||
font-size: 0.9em;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Side Decorations */
|
||||
.side-decor {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 15vw;
|
||||
height: 100vh;
|
||||
pointer-events: none;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.left-decor {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.right-decor {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.decor-symbol {
|
||||
position: absolute;
|
||||
color: rgba(209, 169, 255, 0.5);
|
||||
text-shadow: 0 0 10px rgba(240, 230, 255, 0.7);
|
||||
animation: floatSymbol 20s infinite ease-in-out;
|
||||
}
|
||||
|
||||
@keyframes floatSymbol {
|
||||
0%, 100% {
|
||||
transform: translateY(0) rotate(0deg);
|
||||
opacity: 0;
|
||||
}
|
||||
25%, 75% {
|
||||
opacity: 0.8;
|
||||
}
|
||||
50% {
|
||||
transform: translateY(-20vh) rotate(180deg);
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
#get-fortune-btn {
|
||||
background: linear-gradient(45deg, #da70d6, #8a2be2);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 50px;
|
||||
padding: 15px 30px;
|
||||
font-size: 1.1em;
|
||||
cursor: pointer;
|
||||
transition: transform 0.2s, box-shadow 0.2s;
|
||||
box-shadow: 0 0 15px #c390ff;
|
||||
}
|
||||
|
||||
#get-fortune-btn:hover {
|
||||
transform: scale(1.05);
|
||||
box-shadow: 0 0 25px #d1a9ff;
|
||||
}
|
||||
|
||||
#get-fortune-btn:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
.loading-spinner {
|
||||
border: 4px solid rgba(255, 255, 255, 0.2);
|
||||
border-left-color: #ffc0cb;
|
||||
border-radius: 50%;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
animation: spin 1s linear infinite;
|
||||
display: none; /* Hidden by default */
|
||||
}
|
||||
|
||||
.loading-spinner.visible {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 40px;
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
|
||||
/* Responsive Design */
|
||||
@media (max-width: 768px) {
|
||||
header h1 {
|
||||
font-size: 2.2em;
|
||||
}
|
||||
.crystal-ball {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
}
|
||||
.fortune-card {
|
||||
padding: 20px;
|
||||
}
|
||||
.fortune-details {
|
||||
flex-direction: column;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
.tarot-card-container {
|
||||
width: 150px;
|
||||
height: 233px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Hide side decor on smaller screens */
|
||||
@media (max-width: 1200px) {
|
||||
.side-decor {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
71
frontend/60sapi/娱乐消遣/随机运势/index.html
Normal file
71
frontend/60sapi/娱乐消遣/随机运势/index.html
Normal file
@@ -0,0 +1,71 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>水晶球占卜</title>
|
||||
<link rel="stylesheet" href="css/background.css">
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="side-decor left-decor"></div>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>水晶球占卜</h1>
|
||||
<p>洞察你今日的运势</p>
|
||||
</header>
|
||||
<main>
|
||||
<div class="crystal-ball-container">
|
||||
<div class="crystal-ball">
|
||||
<div class="reflection"></div>
|
||||
<div class="swirl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="fortune-card" class="fortune-card">
|
||||
<div class="loading-spinner"></div>
|
||||
<div class="fortune-content">
|
||||
<h2 id="luck-desc"></h2>
|
||||
<p id="luck-tip"></p>
|
||||
<div class="fortune-details">
|
||||
<div class="detail-item">
|
||||
<h3>今日咒语</h3>
|
||||
<p id="fortune-summary"></p>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<h3>幸运色</h3>
|
||||
<p id="lucky-color"></p>
|
||||
</div>
|
||||
<div class="detail-item">
|
||||
<h3>幸运数字</h3>
|
||||
<p id="lucky-number"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- New Tarot Card Section -->
|
||||
<div class="tarot-container">
|
||||
<h2>每日塔罗指引</h2>
|
||||
<div id="tarot-card" class="tarot-card-container">
|
||||
<div class="tarot-card-inner">
|
||||
<div class="tarot-card-back">
|
||||
<!-- Back of the card design -->
|
||||
</div>
|
||||
<div class="tarot-card-front">
|
||||
<h3 id="tarot-name"></h3>
|
||||
<p id="tarot-interpretation"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button id="get-fortune-btn">再次占卜</button>
|
||||
</main>
|
||||
<footer>
|
||||
<p>仅供娱乐,祝您好运</p>
|
||||
</footer>
|
||||
</div>
|
||||
<div class="side-decor right-decor"></div>
|
||||
<script src="js/script.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
175
frontend/60sapi/娱乐消遣/随机运势/js/script.js
Normal file
175
frontend/60sapi/娱乐消遣/随机运势/js/script.js
Normal file
@@ -0,0 +1,175 @@
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const getFortuneBtn = document.getElementById('get-fortune-btn');
|
||||
const fortuneCard = document.getElementById('fortune-card');
|
||||
const fortuneContent = fortuneCard.querySelector('.fortune-content');
|
||||
const luckDescElem = document.getElementById('luck-desc');
|
||||
const luckTipElem = document.getElementById('luck-tip');
|
||||
const fortuneSummaryElem = document.getElementById('fortune-summary');
|
||||
const luckyColorElem = document.getElementById('lucky-color');
|
||||
const luckyNumberElem = document.getElementById('lucky-number');
|
||||
const loadingSpinner = fortuneCard.querySelector('.loading-spinner');
|
||||
const tarotCardContainer = document.getElementById('tarot-card');
|
||||
const tarotNameElem = document.getElementById('tarot-name');
|
||||
const tarotInterpretationElem = document.getElementById('tarot-interpretation');
|
||||
|
||||
const apiBaseUrls = [
|
||||
"https://60s.api.shumengya.top",
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
];
|
||||
const apiPath = "/v2/luck";
|
||||
|
||||
const mantras = [
|
||||
"顺其自然,皆是美好。",
|
||||
"相信直觉,它知道方向。",
|
||||
"每一次呼吸都是新的开始。",
|
||||
"心怀感恩,好运自来。",
|
||||
"拥抱变化,发现惊喜。",
|
||||
"你的能量,超乎想象。",
|
||||
"保持微笑,宇宙会回应你。"
|
||||
];
|
||||
|
||||
const tarotDeck = [
|
||||
{ name: "愚者", interpretation: "新的开始,无限的潜力,天真和自由。勇敢地迈出第一步。" },
|
||||
{ name: "魔术师", interpretation: "创造力,意志力,显化。你拥有实现目标所需的一切资源。" },
|
||||
{ name: "女祭司", interpretation: "直觉,潜意识,神秘。倾听你内心的声音,智慧在你之内。" },
|
||||
{ name: "皇后", interpretation: "丰饶,母性,创造。享受生活的美好,与自然和谐相处。" },
|
||||
{ name: "皇帝", interpretation: "权威,结构,控制。建立秩序和纪律,掌控你的生活。" },
|
||||
{ name: "教皇", interpretation: "传统,信仰,灵性指导。寻求智慧和知识,遵循传统。" },
|
||||
{ name: "恋人", interpretation: "爱,和谐,选择。做出与你内心价值观一致的决定。" },
|
||||
{ name: "战车", interpretation: "胜利,决心,控制。以坚定的意志力克服障碍,勇往直前。" },
|
||||
{ name: "力量", interpretation: "勇气,内在力量,同情。用温柔和耐心驯服内心的野兽。" },
|
||||
{ name: "隐士", interpretation: "内省,孤独,寻求真理。花时间独处,向内寻求答案。" },
|
||||
{ name: "命运之轮", interpretation: "变化,命运,转折点。生活总在变化,顺应潮流。" },
|
||||
{ name: "正义", interpretation: "公平,真理,因果。为你的行为负责,寻求平衡。" },
|
||||
{ name: "倒吊人", interpretation: "新的视角,顺从,牺牲。放手,从不同的角度看问题。" },
|
||||
{ name: "死神", interpretation: "结束,转变,新生。一个周期的结束是另一个周期的开始。" },
|
||||
{ name: "节制", interpretation: "平衡,和谐,耐心。融合对立的力量,找到中间道路。" },
|
||||
{ name: "恶魔", interpretation: "束缚,物质主义,诱惑。认识到你的束缚,并寻求解放。" },
|
||||
{ name: "塔", interpretation: "突变,启示,解放。旧的结构正在崩塌,为新的结构让路。" },
|
||||
{ name: "星星", interpretation: "希望,灵感,平静。在黑暗之后,总有希望的曙光。" },
|
||||
{ name: "月亮", interpretation: "幻觉,恐惧,潜意识。面对你的恐惧,相信你的直觉。" },
|
||||
{ name: "太阳", interpretation: "成功,喜悦,活力。拥抱光明,享受生活的乐趣。" },
|
||||
{ name: "审判", interpretation: "觉醒,重生,评估。一个反思和更新的时刻。" },
|
||||
{ name: "世界", interpretation: "完成,整合,成就。一个旅程的成功结束,庆祝你的成就。" }
|
||||
];
|
||||
|
||||
let currentApiIndex = 0;
|
||||
|
||||
const showLoading = (isLoading) => {
|
||||
if (isLoading) {
|
||||
fortuneContent.classList.remove('visible');
|
||||
loadingSpinner.classList.add('visible');
|
||||
} else {
|
||||
loadingSpinner.classList.remove('visible');
|
||||
setTimeout(() => {
|
||||
fortuneContent.classList.add('visible');
|
||||
}, 100);
|
||||
}
|
||||
};
|
||||
|
||||
const fetchFortune = async () => {
|
||||
showLoading(true);
|
||||
tarotCardContainer.classList.remove('flipped'); // Reset card on new fetch
|
||||
|
||||
try {
|
||||
const url = apiBaseUrls[currentApiIndex] + apiPath;
|
||||
const response = await fetch(url, { timeout: 5000 });
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
const data = await response.json();
|
||||
|
||||
if (data.code === 200 && data.data) {
|
||||
updateFortune(data.data);
|
||||
drawTarotCard(); // Draw a tarot card on success
|
||||
} else {
|
||||
throw new Error('Invalid data format');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`API error with ${apiBaseUrls[currentApiIndex]}:`, error);
|
||||
currentApiIndex = (currentApiIndex + 1) % apiBaseUrls.length;
|
||||
if (currentApiIndex !== 0) {
|
||||
fetchFortune(); // Try next API
|
||||
} else {
|
||||
displayError();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const updateFortune = (data) => {
|
||||
luckDescElem.textContent = data.luck_desc || '运势';
|
||||
luckTipElem.textContent = data.luck_tip || '今日运势平平,保持好心情。';
|
||||
|
||||
// Generate and display additional details
|
||||
fortuneSummaryElem.textContent = mantras[Math.floor(Math.random() * mantras.length)];
|
||||
luckyColorElem.style.backgroundColor = `#${Math.floor(Math.random()*16777215).toString(16).padStart(6, '0')}`;
|
||||
luckyNumberElem.textContent = Math.floor(Math.random() * 100);
|
||||
|
||||
showLoading(false);
|
||||
};
|
||||
|
||||
const displayError = () => {
|
||||
luckDescElem.textContent = '占卜失败';
|
||||
luckTipElem.textContent = '无法连接到星辰之力,请稍后再试。';
|
||||
fortuneSummaryElem.textContent = '---';
|
||||
luckyColorElem.style.backgroundColor = 'transparent';
|
||||
luckyNumberElem.textContent = '-';
|
||||
showLoading(false);
|
||||
tarotNameElem.textContent = '指引中断';
|
||||
tarotInterpretationElem.textContent = '星辰之力暂时无法连接。';
|
||||
tarotCardContainer.classList.add('flipped'); // Show error on card
|
||||
};
|
||||
|
||||
const drawTarotCard = () => {
|
||||
const card = tarotDeck[Math.floor(Math.random() * tarotDeck.length)];
|
||||
tarotNameElem.textContent = card.name;
|
||||
tarotInterpretationElem.textContent = card.interpretation;
|
||||
|
||||
// Flip the card after a short delay to allow the main content to appear
|
||||
setTimeout(() => {
|
||||
tarotCardContainer.classList.add('flipped');
|
||||
}, 500);
|
||||
};
|
||||
|
||||
const createSideDecorations = () => {
|
||||
const leftContainer = document.querySelector('.left-decor');
|
||||
const rightContainer = document.querySelector('.right-decor');
|
||||
if (!leftContainer || !rightContainer) return;
|
||||
|
||||
const symbols = ['✧', '✦', '☾', '✶', '✵', '✩', '✨'];
|
||||
const symbolCount = 15; // Number of symbols per side
|
||||
|
||||
const createSymbols = (container) => {
|
||||
for (let i = 0; i < symbolCount; i++) {
|
||||
const symbol = document.createElement('span');
|
||||
symbol.classList.add('decor-symbol');
|
||||
symbol.textContent = symbols[Math.floor(Math.random() * symbols.length)];
|
||||
|
||||
// Randomize properties for a more natural look
|
||||
symbol.style.top = `${Math.random() * 90}vh`;
|
||||
symbol.style.left = `${Math.random() * 80}%`;
|
||||
symbol.style.fontSize = `${Math.random() * 20 + 10}px`;
|
||||
symbol.style.animationDelay = `${Math.random() * 20}s`;
|
||||
symbol.style.animationDuration = `${Math.random() * 20 + 15}s`; // Duration between 15s and 35s
|
||||
|
||||
container.appendChild(symbol);
|
||||
}
|
||||
};
|
||||
|
||||
createSymbols(leftContainer);
|
||||
createSymbols(rightContainer);
|
||||
};
|
||||
|
||||
getFortuneBtn.addEventListener('click', fetchFortune);
|
||||
tarotCardContainer.addEventListener('click', () => {
|
||||
tarotCardContainer.classList.toggle('flipped');
|
||||
});
|
||||
|
||||
// Initial actions on page load
|
||||
fetchFortune();
|
||||
createSideDecorations();
|
||||
});
|
||||
7
frontend/60sapi/娱乐消遣/随机运势/接口集合.json
Normal file
7
frontend/60sapi/娱乐消遣/随机运势/接口集合.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"https://60s-cf.viki.moe",
|
||||
"https://60s.viki.moe",
|
||||
"https://60s.b23.run",
|
||||
"https://60s.114128.xyz",
|
||||
"https://60s-cf.114128.xyz"
|
||||
]
|
||||
10
frontend/60sapi/娱乐消遣/随机运势/返回接口.json
Normal file
10
frontend/60sapi/娱乐消遣/随机运势/返回接口.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"code": 200,
|
||||
"message": "获取成功。数据来自官方/权威源头,以确保稳定与实时。开源地址 https://github.com/vikiboss/60s,反馈群 595941841",
|
||||
"data": {
|
||||
"luck_desc": "恋愛運",
|
||||
"luck_rank": 21,
|
||||
"luck_tip": "闪亮的邂逅之日!顺其自然吧",
|
||||
"luck_tip_index": 19
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user