Inspireoriginal's picture
crisp vvivid 3d more graphict interactive touch
d349029 verified
raw
history blame
48.2 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ReelRush Express - 3D Interactive Slots</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/feather-icons"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.globe.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/neurojs@latest/dist/neuro.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.7/dat.gui.min.js"></script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Poppins:wght@400;600&display=swap');
:root {
--primary: #f59e0b;
--primary-dark: #b45309;
--primary-darker: #78350f;
--bg: #0f172a;
--bg-light: #1e293b;
}
body {
font-family: 'Poppins', sans-serif;
overflow-x: hidden;
background-color: var(--bg);
color: #f8fafc;
}
.hero-gradient {
background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 50%, var(--primary-darker) 100%);
}
.slot-machine {
background: linear-gradient(145deg, var(--bg-light) 0%, var(--bg) 100%);
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
border: 1px solid rgba(245, 158, 11, 0.1);
}
.coin-pulse {
animation: pulse 2s infinite;
}
.neuro-effect {
border-radius: 16px;
background: linear-gradient(145deg, #1e293b, #0f172a);
box-shadow: 8px 8px 16px #0a101f, -8px -8px 16px #1a2235;
}
.neuro-effect-hover:hover {
box-shadow: 12px 12px 24px #0a101f, -12px -12px 24px #1a2235;
transform: translateY(-2px);
}
.reel-item {
transition: transform 0.5s cubic-bezier(0.25, 0.1, 0.25, 1);
filter: drop-shadow(0 0 8px rgba(245, 158, 11, 0.3));
transform-style: preserve-3d;
backface-visibility: hidden;
}
.reel-item img {
transform: translateZ(20px);
filter: drop-shadow(0 5px 15px rgba(0, 0, 0, 0.5));
}
.reel-highlight {
box-shadow: 0 0 30px rgba(245, 158, 11, 0.7),
inset 0 0 20px rgba(245, 158, 11, 0.5);
border: 2px solid rgba(245, 158, 11, 0.8);
}
.win-animation {
animation: winPulse 0.5s ease-in-out infinite alternate;
}
@keyframes winPulse {
from { box-shadow: 0 0 20px rgba(245, 158, 11, 0.5); }
to { box-shadow: 0 0 40px rgba(245, 158, 11, 0.9),
0 0 60px rgba(245, 158, 11, 0.6); }
}
.vignette {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
background: radial-gradient(ellipse at center, rgba(15,23,42,0) 60%, rgba(15,23,42,0.9) 100%);
z-index: 10;
}
@keyframes pulse {
0% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.1); opacity: 0.8; }
100% { transform: scale(1); opacity: 1; }
}
@keyframes float {
0% { transform: translateY(0px) rotate(0deg) translateZ(0); }
50% { transform: translateY(-20px) rotate(5deg) translateZ(10px); }
100% { transform: translateY(0px) rotate(0deg) translateZ(0); }
}
@keyframes particle-float {
0% { transform: translateY(0) translateX(0) translateZ(0); }
50% { transform: translateY(-5px) translateX(5px) translateZ(5px); }
100% { transform: translateY(0) translateX(0) translateZ(0); }
}
.floating {
animation: float 6s ease-in-out infinite;
transform-style: preserve-3d;
perspective: 1000px;
}
.particles div {
animation: particle-float 10s ease-in-out infinite;
animation-delay: calc(var(--i) * 0.2s);
transform-style: preserve-3d;
}
</style>
</head>
<body>
<!-- Enhanced 3D Background -->
<div id="vanta-bg" class="fixed inset-0 -z-10 opacity-30"></div>
<div class="vignette"></div>
<div class="fixed inset-0 -z-20 bg-black/50"></div>
<div class="particles fixed inset-0 -z-10"></div>
<!-- Floating Elements -->
<div class="fixed -top-20 -left-20 w-64 h-64 rounded-full bg-yellow-600/10 blur-xl"></div>
<div class="fixed -bottom-20 -right-20 w-96 h-96 rounded-full bg-yellow-600/5 blur-xl"></div>
<!-- Enhanced 3D Floating Elements -->
<a href="/egyptian-slots.html" class="floating hidden md:block fixed top-1/4 left-10 w-16 h-16 game-portal" style="transform-style: preserve-3d;" data-game="egypt">
<img src="http://static.photos/gold/200x200/1" alt="Egyptian Slots" class="w-full h-full rounded-full neuro-effect portal-image" style="transform: rotateY(15deg) translateZ(30px);">
<div class="portal-overlay absolute inset-0 bg-black/50 rounded-full opacity-0 transition-opacity duration-300 flex items-center justify-center">
<span class="text-xs font-bold text-yellow-300">Egyptian Fortune</span>
</div>
</a>
<a href="/space-slots.html" class="floating hidden md:block fixed top-2/3 right-16 w-20 h-20 game-portal" style="animation-delay: 1.5s; transform-style: preserve-3d;" data-game="space">
<img src="http://static.photos/blue/200x200/2" alt="Space Slots" class="w-full h-full rounded-full neuro-effect portal-image" style="transform: rotateY(-15deg) translateZ(30px);">
<div class="portal-overlay absolute inset-0 bg-black/50 rounded-full opacity-0 transition-opacity duration-300 flex items-center justify-center">
<span class="text-xs font-bold text-blue-300">Cosmic Wins</span>
</div>
</a>
<a href="/pirate-slots.html" class="floating hidden md:block fixed top-1/3 right-1/4 w-14 h-14 game-portal" style="animation-delay: 2.5s; transform-style: preserve-3d;" data-game="pirate">
<img src="http://static.photos/black/200x200/3" alt="Pirate Slots" class="w-full h-full rounded-full neuro-effect portal-image" style="transform: rotateX(10deg) translateZ(30px);">
<div class="portal-overlay absolute inset-0 bg-black/50 rounded-full opacity-0 transition-opacity duration-300 flex items-center justify-center">
<span class="text-xs font-bold text-red-300">Treasure Hunt</span>
</div>
</a>
<!-- Header -->
<header class="hero-gradient py-6 px-4 sm:px-6 lg:px-8 sticky top-0 z-50">
<div class="container mx-auto flex flex-col md:flex-row items-center justify-between">
<div class="flex items-center mb-4 md:mb-0">
<div class="mr-3 p-2 bg-yellow-600 rounded-full neuro-effect">
<i data-feather="zap" class="text-white"></i>
</div>
<h1 class="text-2xl md:text-3xl font-bold font-serif">REELRUSH EXPRESS</h1>
</div>
<nav class="flex space-x-6 items-center">
<a href="#" class="hover:text-yellow-300 transition flex items-center">
<i data-feather="sliders" class="mr-1 w-4 h-4"></i> Slots
</a>
<a href="#" class="hover:text-yellow-300 transition flex items-center">
<i data-feather="gift" class="mr-1 w-4 h-4"></i> Rewards
</a>
<a href="#" class="hover:text-yellow-300 transition flex items-center">
<i data-feather="users" class="mr-1 w-4 h-4"></i> Community
</a>
<button class="px-4 py-2 bg-yellow-600 hover:bg-yellow-700 rounded-full font-medium transition neuro-effect neuro-effect-hover flex items-center">
<i data-feather="user-plus" class="mr-1 w-4 h-4"></i> Join Now
</button>
</nav>
</div>
</header>
<!-- Main Content -->
<main class="container mx-auto px-4 sm:px-6 lg:px-8 py-12 relative z-20">
<!-- Hero Section -->
<section class="text-center mb-20">
<div class="relative inline-block mb-8">
<h2 class="text-4xl md:text-6xl font-bold mb-6 font-serif relative z-10">3D <span class="text-yellow-400">ReelRush</span></h2>
<div class="absolute -bottom-2 left-0 w-full h-3 bg-yellow-600/30 z-0 rounded-full"></div>
</div>
<p class="text-xl md:text-2xl mb-8 max-w-3xl mx-auto">
Ultra-smooth 3D slots with immersive physics and touch-responsive animations.
</p>
<div class="flex justify-center gap-4">
<button class="px-8 py-3 bg-yellow-600 hover:bg-yellow-700 rounded-full font-bold transition neuro-effect neuro-effect-hover flex items-center">
<i data-feather="play" class="mr-2"></i> Play Now
</button>
<button class="px-8 py-3 border-2 border-yellow-600 hover:bg-yellow-600/10 rounded-full font-bold transition neuro-effect neuro-effect-hover">
How It Works
</button>
</div>
</section>
<!-- Interactive 3D Slot Machine -->
<section class="mb-20">
<div class="slot-machine neuro-effect rounded-2xl p-8 max-w-4xl mx-auto relative overflow-hidden" style="perspective: 2000px;">
<div class="absolute -top-20 -right-20 w-64 h-64 rounded-full bg-yellow-600/5 blur-xl"></div>
<div class="absolute -bottom-20 -left-20 w-64 h-64 rounded-full bg-yellow-600/5 blur-xl"></div>
<div class="relative z-10 flex justify-between items-center mb-6">
<div class="flex items-center">
<div class="coin-pulse mr-3 neuro-effect">
<img src="http://static.photos/gold/200x200/1" alt="Inspire Coin" class="w-12 h-12 rounded-full">
</div>
<div>
<div class="text-sm text-yellow-400">REDEMPTION TOKENS</div>
<div class="text-2xl font-bold">1,250</div>
</div>
</div>
<div class="text-right">
<div class="text-sm text-yellow-400">COMMUNITY PROGRESS</div>
<div class="w-full bg-gray-700 rounded-full h-2.5 mb-2 neuro-effect">
<div class="bg-yellow-600 h-2.5 rounded-full" style="width: 45%"></div>
</div>
<div class="text-xs">45% to next tier</div>
</div>
</div>
<div class="slot-reels bg-black/50 rounded-xl p-6 mb-6 neuro-effect relative overflow-hidden" style="transform-style: preserve-3d;">
<div class="absolute inset-0 bg-[url('http://static.photos/abstract/1024x576/3')] opacity-10"></div>
<div class="relative z-10">
<div class="flex justify-center space-x-4 mb-6" style="transform-style: preserve-3d; perspective: 2000px;">
<div class="reel bg-gray-800 neuro-effect rounded-lg w-24 h-32 overflow-hidden relative cursor-pointer hover:bg-gray-700 transition"
id="reel-1" style="transform-style: preserve-3d; box-shadow: 0 10px 25px rgba(0,0,0,0.5); transform: translateZ(20px);">
<div class="reel-items absolute w-full" style="transform-style: preserve-3d;">
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/1" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/2" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/3" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/4" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
</div>
</div>
<div class="reel bg-gray-800 neuro-effect rounded-lg w-24 h-32 overflow-hidden relative cursor-pointer hover:bg-gray-700 transition"
id="reel-2" style="transform-style: preserve-3d; box-shadow: 0 10px 25px rgba(0,0,0,0.5); transform: translateZ(20px);">
<div class="reel-items absolute w-full" style="transform-style: preserve-3d;">
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/5" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/6" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/7" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/8" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
</div>
</div>
<div class="reel bg-gray-800 neuro-effect rounded-lg w-24 h-32 overflow-hidden relative cursor-pointer hover:bg-gray-700 transition"
id="reel-3" style="transform-style: preserve-3d; box-shadow: 0 10px 25px rgba(0,0,0,0.5); transform: translateZ(20px);">
<div class="reel-items absolute w-full" style="transform-style: preserve-3d;">
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/9" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/10" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/11" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
<div class="reel-item w-full h-32 flex items-center justify-center" style="transform: translateZ(30px);">
<img src="http://static.photos/gaming/120x120/12" class="w-20 h-20 object-contain" style="filter: drop-shadow(0 0 8px rgba(245,158,11,0.5)); transform: translateZ(40px);">
</div>
</div>
</div>
</div>
<div class="flex justify-center">
<button id="spin-btn" class="px-12 py-4 bg-yellow-600 hover:bg-yellow-700 rounded-full font-bold text-lg transition neuro-effect neuro-effect-hover flex items-center">
<i data-feather="zap" class="mr-2"></i> SPIN TO REDEEM
</button>
</div>
</div>
</div>
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
<div class="bg-black/30 neuro-effect hover:bg-black/40 rounded-lg p-4 text-center cursor-pointer transition">
<div class="text-yellow-400 mb-1 flex justify-center">
<i data-feather="users" class="w-4 h-4 mr-1"></i> Players
</div>
<div class="text-xl font-bold">3,842</div>
</div>
<div class="bg-black/30 neuro-effect hover:bg-black/40 rounded-lg p-4 text-center cursor-pointer transition">
<div class="text-yellow-400 mb-1 flex justify-center">
<i data-feather="database" class="w-4 h-4 mr-1"></i> Pool
</div>
<div class="text-xl font-bold">1.2M</div>
</div>
<div class="bg-black/30 neuro-effect hover:bg-black/40 rounded-lg p-4 text-center cursor-pointer transition">
<div class="text-yellow-400 mb-1 flex justify-center">
<i data-feather="award" class="w-4 h-4 mr-1"></i> Redemptions
</div>
<div class="text-xl font-bold">428</div>
</div>
<div class="bg-black/30 neuro-effect hover:bg-black/40 rounded-lg p-4 text-center cursor-pointer transition">
<div class="text-yellow-400 mb-1 flex justify-center">
<i data-feather="trending-up" class="w-4 h-4 mr-1"></i> Last Jackpot
</div>
<div class="text-xl font-bold">50K</div>
</div>
</div>
</div>
</section>
<!-- 3D Slot Features -->
<section class="mb-20">
<h2 class="text-3xl font-bold text-center mb-12 font-serif relative">
<span class="relative z-10">Next-Gen <span class="text-yellow-400">Slot Physics</span></span>
<div class="absolute -bottom-2 left-1/4 w-1/2 h-2 bg-yellow-600/20 rounded-full z-0"></div>
</h2>
<div class="grid md:grid-cols-3 gap-8">
<div class="feature-card neuro-effect neuro-effect-hover rounded-xl p-6 transition-all duration-300 transform hover:-translate-y-2 relative">
<div class="w-14 h-14 bg-yellow-600/20 rounded-full flex items-center justify-center mb-4 neuro-effect mx-auto">
<i data-feather="move" class="text-yellow-400"></i>
</div>
<h3 class="text-xl font-bold mb-3 text-center">Real Physics</h3>
<p class="text-gray-300 text-center">Experience true momentum and inertia with our physically-accurate reel mechanics.</p>
</div>
<div class="feature-card neuro-effect neuro-effect-hover rounded-xl p-6 transition-all duration-300 transform hover:-translate-y-2 relative">
<div class="w-14 h-14 bg-yellow-600/20 rounded-full flex items-center justify-center mb-4 neuro-effect mx-auto">
<i data-feather="touch" class="text-yellow-400"></i>
</div>
<h3 class="text-xl font-bold mb-3 text-center">Touch Response</h3>
<p class="text-gray-300 text-center">Every swipe and tap creates realistic reactions throughout the machine.</p>
</div>
<div class="feature-card neuro-effect neuro-effect-hover rounded-xl p-6 transition-all duration-300 transform hover:-translate-y-2 relative">
<div class="w-14 h-14 bg-yellow-600/20 rounded-full flex items-center justify-center mb-4 neuro-effect mx-auto">
<i data-feather="eye" class="text-yellow-400"></i>
</div>
<h3 class="text-xl font-bold mb-3 text-center">4K Visuals</h3>
<p class="text-gray-300 text-center">Crisp, detailed graphics with dynamic lighting and reflections.</p>
</div>
</div>
</section>
<!-- Interactive CTA -->
<section class="text-center relative overflow-hidden">
<div class="absolute -top-20 left-1/4 w-48 h-48 rounded-full bg-yellow-600/10 blur-xl"></div>
<div class="absolute bottom-10 right-1/4 w-64 h-64 rounded-full bg-yellow-600/5 blur-xl"></div>
<div class="relative z-10">
<h2 class="text-3xl font-bold mb-6 font-serif">Feel the Reels Come Alive</h2>
<p class="text-xl mb-8 max-w-2xl mx-auto">
Touch, tilt and interact with our most immersive slots experience yet.
</p>
<button class="px-12 py-4 bg-yellow-600 hover:bg-yellow-700 rounded-full font-bold text-lg transition neuro-effect neuro-effect-hover transform hover:scale-105 flex items-center mx-auto">
<i data-feather="play" class="mr-2"></i> Spin Now
</button>
</div>
</section>
</main>
<!-- Animated Footer -->
<footer class="bg-gray-900/80 py-12 px-4 sm:px-6 lg:px-8 relative overflow-hidden">
<div class="absolute inset-0 bg-[url('http://static.photos/abstract/1200x630/5')] opacity-10"></div>
<div class="container mx-auto relative z-10">
<div class="grid md:grid-cols-4 gap-8 mb-8">
<div>
<h3 class="text-xl font-bold mb-4 flex items-center">
<i data-feather="zap" class="mr-2 text-yellow-400"></i> REELRUSH EXPRESS
</h3>
<p class="text-gray-400">Ultra-responsive 3D slot experience.</p>
</div>
<div>
<h4 class="font-bold mb-4 flex items-center">
<i data-feather="cpu" class="mr-2 w-4 h-4"></i> Network
</h4>
<ul class="space-y-2">
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">3D Slots</a></li>
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">Live Reels</a></li>
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">Premium Games</a></li>
</ul>
</div>
<div>
<h4 class="font-bold mb-4 flex items-center">
<i data-feather="activity" class="mr-2 w-4 h-4"></i> Pathways
</h4>
<ul class="space-y-2">
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">Jackpots</a></li>
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">Tournaments</a></li>
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">VIP Club</a></li>
</ul>
</div>
<div>
<h4 class="font-bold mb-4 flex items-center">
<i data-feather="lock" class="mr-2 w-4 h-4"></i> Protocol
</h4>
<ul class="space-y-2">
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">Terms</a></li>
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">Privacy</a></li>
<li><a href="#" class="text-gray-400 hover:text-yellow-400 transition">Responsible Play</a></li>
</ul>
</div>
</div>
<div class="pt-8 border-t border-gray-800 text-center text-gray-500 text-sm">
© 2023 ReelRush Express. The ultimate 3D slot experience.
</div>
</div>
</footer>
<script>
// Enhanced 3D Background with Depth
VANTA.GLOBE({
el: "#vanta-bg",
mouseControls: true,
touchControls: true,
gyroControls: false,
minHeight: 200.00,
minWidth: 200.00,
scale: 1.20,
scaleMobile: 1.20,
color: 0xf59e0b,
backgroundColor: 0x0f172a,
size: 1.2,
magnification: 1.5
});
// Particle system for depth effect
const particles = [];
const particleCount = 50;
const particleContainer = document.querySelector('.particles');
for (let i = 0; i < particleCount; i++) {
const particle = document.createElement('div');
particle.className = 'absolute rounded-full bg-yellow-400/10';
particle.style.width = Math.random() * 10 + 5 + 'px';
particle.style.height = particle.style.width;
particle.style.left = Math.random() * 100 + '%';
particle.style.top = Math.random() * 100 + '%';
particle.style.transform = `translateZ(${-Math.random() * 1000}px)`;
particleContainer.appendChild(particle);
particles.push(particle);
}
// Animate particles for parallax effect
document.addEventListener('mousemove', (e) => {
const x = e.clientX / window.innerWidth;
const y = e.clientY / window.innerHeight;
particles.forEach((particle, i) => {
const depth = parseFloat(particle.style.transform.match(/translateZ\((.+?)px\)/)[1]);
const moveX = (x - 0.5) * 100 * (1 + depth/1000);
const moveY = (y - 0.5) * 100 * (1 + depth/1000);
particle.style.transform = `translateZ(${depth}px) translate(${moveX}px, ${moveY}px)`;
});
});
// Initialize feather icons
document.addEventListener('DOMContentLoaded', function() {
feather.replace();
// 3D Spin Animation with Physics
document.getElementById('spin-btn').addEventListener('click', function() {
const btn = this;
const reels = document.querySelectorAll('.reel-items');
// Disable button during spin
btn.disabled = true;
btn.innerHTML = '<i data-feather="loader" class="mr-2 animate-spin"></i> PROCESSING...';
feather.replace();
// Add 3D perspective to reels
anime({
targets: '.reel',
rotateX: [-10, 0],
rotateY: [-10, 0],
translateZ: [30, 0],
duration: 500,
easing: 'easeOutQuad'
});
// Start machine vibration
anime({
targets: '.slot-machine',
translateX: [0, anime.random(-5, 5), 0],
translateY: [0, anime.random(-5, 5), 0],
duration: 1500,
loop: true,
easing: 'easeInOutSine'
});
// Enhanced touch effects
document.querySelectorAll('.reel').forEach(reel => {
reel.addEventListener('touchstart', function(e) {
anime({
targets: this,
scale: 0.95,
duration: 100,
easing: 'easeOutQuad'
});
});
reel.addEventListener('touchend', function(e) {
anime({
targets: this,
scale: 1,
duration: 300,
easing: 'easeOutElastic(1, .5)'
});
// Ripple effect
const ripple = document.createElement('div');
ripple.className = 'absolute w-16 h-16 bg-yellow-400/20 rounded-full pointer-events-none';
ripple.style.left = (e.touches[0].clientX - reel.getBoundingClientRect().left - 32) + 'px';
ripple.style.top = (e.touches[0].clientY - reel.getBoundingClientRect().top - 32) + 'px';
reel.appendChild(ripple);
anime({
targets: ripple,
scale: 3,
opacity: 0,
duration: 800,
easing: 'easeOutQuad',
complete: () => ripple.remove()
});
});
});
// 3D Reel spin animation with physics
anime({
targets: '.reel-item',
translateY: function(el, i) {
return anime.random(-600, 600);
},
rotateX: function() {
return anime.random(-45, 45);
},
rotateZ: function() {
return anime.random(-15, 15);
},
translateZ: function() {
return anime.random(-50, 50);
},
scale: function() {
return anime.random(0.8, 1.2);
},
opacity: function() {
return anime.random(0.7, 1);
},
duration: 3000,
easing: 'easeInOutQuad',
complete: function() {
// 3D Reset to winning position
anime({
targets: '.reel-item',
translateY: 0,
translateZ: 0,
rotateX: 0,
rotateZ: 0,
scale: 1,
opacity: 1,
duration: 1500,
delay: anime.stagger(100),
easing: 'spring(1, 80, 10, 0)',
begin: function() {
// Highlight winning reels
document.querySelectorAll('.reel').forEach((reel, index) => {
if (index % 3 === 0) { // Highlight every third reel for demo
reel.classList.add('reel-highlight');
setTimeout(() => {
reel.classList.remove('reel-highlight');
}, 2000);
}
});
},
complete: function() {
// Stop machine vibration
anime({
targets: '.slot-machine',
translateX: 0,
translateY: 0,
duration: 500
});
// Win animation for matching symbols
const winningSymbols = document.querySelectorAll('.reel-item:nth-child(1)');
winningSymbols.forEach(symbol => {
symbol.classList.add('win-animation');
setTimeout(() => {
symbol.classList.remove('win-animation');
}, 2000);
});
}
complete: function() {
// Enhanced 3D win effect
const sparks = [];
for (let i = 0; i < 30; i++) {
const spark = document.createElement('div');
spark.className = 'absolute w-2 h-2 bg-yellow-400 rounded-full';
spark.style.left = Math.random() * 100 + '%';
spark.style.top = Math.random() * 100 + '%';
spark.style.transform = 'translateZ(20px)';
document.querySelector('.slot-reels').appendChild(spark);
sparks.push(spark);
anime({
targets: spark,
translateX: anime.random(-100, 100),
translateY: anime.random(-100, 100),
translateZ: anime.random(0, 100),
scale: [1, anime.random(0.5, 3)],
opacity: [1, 0],
duration: 1500,
easing: 'easeOutExpo'
});
}
// Add 3D confetti burst
const confetti = [];
for (let i = 0; i < 50; i++) {
const piece = document.createElement('div');
piece.className = 'absolute w-4 h-4';
piece.style.background = `hsl(${anime.random(30, 60)}, 100%, 50%)`;
piece.style.borderRadius = '50%';
piece.style.left = '50%';
piece.style.top = '50%';
piece.style.transform = 'translateZ(0)';
document.querySelector('.slot-reels').appendChild(piece);
confetti.push(piece);
anime({
targets: piece,
translateX: anime.random(-200, 200),
translateY: anime.random(-200, 200),
translateZ: anime.random(-100, 100),
rotateX: anime.random(0, 360),
rotateY: anime.random(0, 360),
scale: [0.5, 1.5],
opacity: [1, 0],
duration: 2000,
easing: 'easeOutExpo'
});
}
// Re-enable button
setTimeout(() => {
btn.disabled = false;
btn.innerHTML = '<i data-feather="zap" class="mr-2"></i> SPIN TO REDEEM';
feather.replace();
// Remove sparks
sparks.forEach(spark => {
setTimeout(() => {
if (spark.parentNode) {
spark.parentNode.removeChild(spark);
}
}, 1000);
});
}, 1000);
}
});
}
});
// Coin animation
anime({
targets: '.coin-pulse',
scale: [1, 1.3, 1],
duration: 800,
easing: 'easeInOutQuad'
});
// Enhanced physics on spin
anime({
targets: document.querySelectorAll('.reel'),
translateY: [0, -15, 0],
translateZ: [0, 20, 0],
rotateX: [0, anime.random(-5, 5), 0],
rotateY: [0, anime.random(-3, 3), 0],
duration: 150,
delay: anime.stagger(50),
easing: 'easeOutElastic(1, .8)'
});
});
// Reel hover effects
document.querySelectorAll('.reel').forEach(reel => {
reel.addEventListener('mouseenter', function() {
anime({
targets: this,
scale: 1.1,
translateZ: 25,
rotateX: -5,
rotateY: 5,
duration: 300,
easing: 'easeOutQuad'
});
});
reel.addEventListener('mouseleave', function() {
anime({
targets: this,
scale: 1,
translateZ: 0,
rotateX: 0,
rotateY: 0,
duration: 300,
easing: 'easeOutQuad'
});
});
// Touch effects for mobile
reel.addEventListener('touchstart', function(e) {
anime({
targets: this,
scale: 1.1,
translateZ: 30,
duration: 150,
easing: 'easeOutQuad'
});
// Create ripple effect
const ripple = document.createElement('div');
ripple.className = 'absolute w-8 h-8 bg-yellow-400/30 rounded-full pointer-events-none';
ripple.style.left = (e.touches[0].clientX - this.getBoundingClientRect().left - 16) + 'px';
ripple.style.top = (e.touches[0].clientY - this.getBoundingClientRect().top - 16) + 'px';
this.appendChild(ripple);
anime({
targets: ripple,
scale: 4,
opacity: 0,
duration: 600,
easing: 'easeOutQuad',
complete: function() {
if (ripple.parentNode) {
ripple.parentNode.removeChild(ripple);
}
}
});
});
reel.addEventListener('touchend', function() {
anime({
targets: this,
scale: 1,
translateZ: 0,
duration: 300,
easing: 'easeOutQuad'
});
});
});
});
// Enhanced 3D floating animation with physics for portals
anime({
targets: '.floating',
translateY: [0, -50, 0],
translateX: [0, 30, 0],
rotateY: [0, 360, 0],
rotateX: [0, 45, 0],
translateZ: [0, 100, 0],
scale: [1, 1.2, 1],
duration: 8000,
easing: 'easeInOutSine',
loop: true,
delay: anime.stagger(1000)
});
// Portal hover effects
document.querySelectorAll('.game-portal').forEach(portal => {
portal.addEventListener('mouseenter', function() {
anime({
targets: this.querySelector('.portal-image'),
scale: 1.3,
rotateY: '+=180',
translateZ: 50,
duration: 800,
easing: 'easeOutQuad'
});
this.querySelector('.portal-overlay').style.opacity = '1';
});
portal.addEventListener('mouseleave', function() {
anime({
targets: this.querySelector('.portal-image'),
scale: 1,
translateZ: 0,
duration: 300,
easing: 'easeOutQuad'
});
this.querySelector('.portal-overlay').style.opacity = '0';
});
portal.addEventListener('click', function(e) {
e.preventDefault();
const game = this.getAttribute('data-game');
// Portal transition effect
anime({
targets: this,
scale: [1, 1.5],
opacity: [1, 0],
rotateY: '+=360',
duration: 800,
easing: 'easeInOutQuad',
complete: function() {
window.location.href = portal.href;
}
});
});
});
// 3D hover effects for reels
document.querySelectorAll('.reel').forEach(reel => {
reel.addEventListener('mouseenter', function() {
anime({
targets: this,
scale: 1.15,
translateZ: 40,
rotateX: -8,
rotateY: 8,
duration: 300,
easing: 'easeOutQuad'
});
});
reel.addEventListener('mouseleave', function() {
anime({
targets: this,
scale: 1,
translateZ: 0,
rotateX: 0,
rotateY: 0,
duration: 300,
easing: 'easeOutQuad'
});
});
});
// Interactive 3D tilt effect
document.addEventListener('mousemove', (e) => {
const x = e.clientX / window.innerWidth;
const y = e.clientY / window.innerHeight;
anime({
targets: '.feature-card',
rotateY: (x - 0.5) * 15,
rotateX: -(y - 0.5) * 15,
translateZ: 30,
easing: 'easeOutQuad',
duration: 500
});
anime({
targets: '.slot-machine',
rotateY: (x - 0.5) * 5,
rotateX: -(y - 0.5) * 5,
translateZ: 20,
easing: 'easeOutQuad',
duration: 1000
});
// Parallax effect for background elements
document.querySelectorAll('.particles div').forEach((particle, i) => {
const speed = 0.05;
const xPos = (x - 0.5) * i * speed;
const yPos = (y - 0.5) * i * speed;
particle.style.transform = `translate(${xPos}px, ${yPos}px) translateZ(${-i * 10}px)`;
});
});
// Touch support for mobile devices
document.addEventListener('touchmove', (e) => {
const touch = e.touches[0];
const x = touch.clientX / window.innerWidth;
const y = touch.clientY / window.innerHeight;
anime({
targets: '.feature-card',
rotateY: (x - 0.5) * 10,
rotateX: -(y - 0.5) * 10,
translateZ: 20,
easing: 'easeOutQuad',
duration: 300
});
});
});
</script>
<!-- Touch Feedback Overlay -->
<div id="touch-feedback" class="fixed inset-0 pointer-events-none z-50"></div>
<script>
// Enhanced touch feedback
document.addEventListener('touchstart', (e) => {
for (let i = 0; i < e.touches.length; i++) {
const touch = e.touches[i];
const feedback = document.createElement('div');
feedback.className = 'absolute w-6 h-6 bg-yellow-400/50 rounded-full pointer-events-none';
feedback.style.left = (touch.clientX - 12) + 'px';
feedback.style.top = (touch.clientY - 12) + 'px';
feedback.id = 'touch-' + touch.identifier;
document.getElementById('touch-feedback').appendChild(feedback);
anime({
targets: feedback,
scale: 3,
opacity: 0,
duration: 800,
easing: 'easeOutQuad',
complete: function() {
if (feedback.parentNode) {
feedback.parentNode.removeChild(feedback);
}
}
});
}
});
document.addEventListener('touchend', (e) => {
// Clean up touch points
const feedbacks = document.querySelectorAll('#touch-feedback div');
feedbacks.forEach(fb => {
anime({
targets: fb,
scale: 3,
opacity: 0,
duration: 300,
complete: function() {
if (fb.parentNode) {
fb.parentNode.removeChild(fb);
}
}
});
});
});
</script>
</body>
</html>