Testhtml / index.html
Hamed744's picture
Update index.html
9339551 verified
Raw
History Blame Contribute Delete
8.43 kB
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>آپلود و ارتقاء اشتراک</title>
<link href="https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;600;700&display=swap" rel="stylesheet">
<style>
:root {
--primary: #7b2ff7;
--secondary: #f107a3;
--text-dark: #2c3e50;
--text-light: #6c757d;
--bg-light: #f8f9fa;
--card-bg: #fff;
--border: #e0e0e0;
}
body {
font-family: 'Vazirmatn', sans-serif;
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
color: var(--text-dark);
}
.container {
background: var(--card-bg);
padding: 40px;
border-radius: 20px;
box-shadow: 0 10px 30px rgba(0,0,0,0.08);
max-width: 600px;
width: 90%;
text-align: center;
animation: fadeIn 0.6s ease;
}
.svg-icon {
width: 90px;
height: 90px;
fill: url(#lockGradient);
filter: drop-shadow(0 4px 8px rgba(255,118,136,0.4));
margin-bottom: 20px;
transition: transform 0.3s ease, filter 0.3s ease;
}
.container:hover .svg-icon {
transform: translateY(-5px);
filter: drop-shadow(0 6px 12px rgba(255,118,136,0.6));
}
/* انیمیشن برای تکان خوردن آیکون قفل */
@keyframes shake {
10%, 90% { transform: translateX(-1px) rotate(-2deg); }
20%, 80% { transform: translateX(2px) rotate(2deg); }
30%, 50%, 70% { transform: translateX(-3px) rotate(-3deg); }
40%, 60% { transform: translateX(3px) rotate(3deg); }
}
/* کلاس فعال‌کننده انیمیشن برای قفل */
.shake-lock {
animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
}
h2 {
font-size: 2em;
color: var(--primary);
margin-bottom: 15px;
}
p {
color: var(--text-light);
font-size: 1.1em;
margin-bottom: 30px;
line-height: 1.8;
}
.upload-area {
border: 2px dashed var(--border);
border-radius: 15px;
padding: 35px;
background: var(--bg-light);
cursor: not-allowed;
transition: all 0.3s ease;
user-select: none;
}
.upload-area:hover {
border-color: var(--secondary);
background: #f1f3f5;
}
.upload-area svg {
width: 60px;
height: 60px;
fill: #a0a0a0;
margin-bottom: 15px;
transition: fill 0.3s ease, transform 0.3s ease;
}
.upload-area:hover svg {
fill: var(--secondary);
transform: translateY(-5px);
}
.upload-area p {
margin: 0;
font-size: 1em;
color: #888;
}
.buttons {
display: flex;
justify-content: center;
gap: 15px;
margin-top: 25px;
flex-wrap: wrap;
}
button {
padding: 12px 25px;
border: none;
border-radius: 8px;
font-size: 1em;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
}
.upgrade-button {
background: linear-gradient(45deg, var(--primary), var(--secondary));
color: #fff;
position: relative;
overflow: hidden;
}
.upgrade-button::before {
content: '';
position: absolute;
top: 0; left: -100%;
width: 100%; height: 100%;
background: rgba(255,255,255,0.2);
transform: skewX(-30deg);
transition: left 0.4s ease;
}
.upgrade-button:hover::before {
left: 100%;
}
.upgrade-button:hover {
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(123,47,247,0.3);
}
.later-button {
background: var(--border);
color: var(--text-dark);
}
.later-button:hover {
background: #ccc;
transform: translateY(-2px);
}
/* انیمیشن جدید برای تکان خوردن دکمه ارتقا */
@keyframes shake-button {
10%, 90% { transform: translateY(-3px) translateX(-2px); }
20%, 80% { transform: translateY(-3px) translateX(2px); }
30%, 50%, 70% { transform: translateY(-3px) translateX(-3px); }
40%, 60% { transform: translateY(-3px) translateX(3px); }
}
/* کلاس فعال‌کننده انیمیشن برای دکمه */
.shake-it {
animation: shake-button 0.6s ease-in-out;
}
@keyframes fadeIn {
from {opacity: 0; transform: translateY(20px);}
to {opacity: 1; transform: translateY(0);}
}
@media (max-width: 768px) {
.container {padding: 30px;}
h2 {font-size: 1.6em;}
}
</style>
</head>
<body>
<div class="container">
<!-- آیکن قفل با گرادیان -->
<svg id="lockIcon" class="svg-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
<defs>
<linearGradient id="lockGradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#ff7eb3"/>
<stop offset="50%" stop-color="#ff758c"/>
<stop offset="100%" stop-color="#ffb347"/>
</linearGradient>
</defs>
<path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1
0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1
0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6
9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2
2-.9 2-2 2zm3.1-9H8.9V6c0-1.71
1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v2z"/>
</svg>
<h2>برای آپلود و تحلیل فایل اشتراک تهیه کنید!</h2>
<p>امکان آپلود فایل‌های صوتی، ویدیویی، PDF و... تنها در نسخه نامحدود فعال است. برای دسترسی کامل، اشتراک خود را ارتقا دهید.</p>
<div id="uploadArea" class="upload-area" role="button" tabindex="0" aria-disabled="true" aria-label="آپلود فایل (غیرفعال)">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
<path d="M19.35 10.04C18.67 6.59 15.64 4 12 4
9.11 4 6.6 5.64 5.35 8.04
2.34 8.36 0 10.91 0 14c0 3.31
2.69 6 6 6h13c2.76 0 5-2.24
5-5 0-2.64-2.05-4.78-4.65-4.96zM14
13v4h-4v-4H7l5-5 5 5h-3z"/>
</svg>
<p>اینجا فایل‌های خود را آپلود کنید (فقط در نسخه نامحدود)</p>
</div>
<div class="buttons">
<button class="upgrade-button">🚀 ارتقا به نسخه نامحدود</button>
<button class="later-button">بعداً</button>
</div>
</div>
<script>
const uploadArea = document.getElementById('uploadArea');
const lockIcon = document.getElementById('lockIcon');
// انتخاب دکمه ارتقا
const upgradeButton = document.querySelector('.upgrade-button');
function triggerAnimations() {
// 1. انیمیشن آیکون قفل
// ابتدا کلاس را حذف می‌کنیم تا انیمیشن بتواند دوباره اجرا شود
lockIcon.classList.remove('shake-lock');
// با یک تاخیر کوتاه دوباره کلاس را اضافه می‌کنیم
requestAnimationFrame(() => {
lockIcon.classList.add('shake-lock');
});
// 2. انیمیشن دکمه ارتقا
// همین کار را برای دکمه نیز انجام می‌دهیم
upgradeButton.classList.remove('shake-it');
requestAnimationFrame(() => {
upgradeButton.classList.add('shake-it');
});
}
// اضافه کردن رویداد کلیک به بخش آپلود
uploadArea.addEventListener('click', triggerAnimations);
// اضافه کردن رویداد برای کیبورد (جهت دسترسی‌پذیری)
uploadArea.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
triggerAnimations();
}
});
// پس از پایان انیمیشن، کلاس را حذف می‌کنیم تا برای کلیک بعدی آماده باشد
lockIcon.addEventListener('animationend', () => {
lockIcon.classList.remove('shake-lock');
});
upgradeButton.addEventListener('animationend', () => {
upgradeButton.classList.remove('shake-it');
});
</script>
</body>
</html>