Добавлена подсветка воспроизводимой песни
This commit is contained in:
@@ -113,15 +113,108 @@ code {
|
||||
.horizontal-scroll {
|
||||
overflow-x: auto;
|
||||
scroll-snap-type: x mandatory;
|
||||
overflow-y: hidden; /* отключаем вертикальный скролл */
|
||||
overflow-y: hidden;
|
||||
cursor: grab;
|
||||
}
|
||||
|
||||
.horizontal-scroll:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
/* Для WebKit (Chrome, Edge, Safari) можно включить горизонтальный скролл мышью */
|
||||
|
||||
.horizontal-scroll {
|
||||
scrollbar-width: thin;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
/* ===== Animations ===== */
|
||||
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
@keyframes slideUpFade {
|
||||
from { opacity: 0; transform: translateY(10px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes equalizerPulse {
|
||||
0%, 100% { transform: scaleY(0.5) translateY(3px); }
|
||||
50% { transform: scaleY(1) translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes playerSlideUp {
|
||||
from { opacity: 0; transform: translateY(20px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
/* Fade-in for content that loads */
|
||||
.content-fade-in {
|
||||
animation: fadeIn 0.3s ease-out;
|
||||
}
|
||||
|
||||
/* Track items slide up when list loads */
|
||||
.tracks-slide-in {
|
||||
animation: slideUpFade 0.25s ease-out;
|
||||
}
|
||||
|
||||
/* Equalizer icon bounce */
|
||||
.eq-animate {
|
||||
display: inline-block;
|
||||
transform-origin: bottom center;
|
||||
animation: equalizerPulse 0.55s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
/* Feature cards on home page */
|
||||
.feature-card {
|
||||
transition: transform 0.2s ease, box-shadow 0.2s ease !important;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.feature-card:hover {
|
||||
transform: translateY(-3px) !important;
|
||||
box-shadow: 0 6px 20px rgba(126, 111, 255, 0.18) !important;
|
||||
}
|
||||
|
||||
/* Audio player entrance */
|
||||
.player-enter {
|
||||
animation: playerSlideUp 0.3s ease-out;
|
||||
}
|
||||
|
||||
/* Play overlay — opacity-based show/hide */
|
||||
.play-overlay {
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 4px;
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.play-overlay.play-overlay--visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* Touch devices: play overlay always visible */
|
||||
@media (hover: none) {
|
||||
.play-overlay {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Current track — smooth highlight transition */
|
||||
.current-track {
|
||||
transition: background 0.35s ease;
|
||||
}
|
||||
|
||||
/* Mobile padding tightening */
|
||||
@media (max-width: 599px) {
|
||||
.mud-container {
|
||||
padding-left: 6px !important;
|
||||
padding-right: 6px !important;
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,36 @@
|
||||
}
|
||||
});
|
||||
|
||||
// Возвращаем все методы, которые будут вызываться из C#
|
||||
return { loadAndPlay, play, pause, stop, setVolume, setCurrentTime };
|
||||
const handleKeyDown = (e) => {
|
||||
const tag = e.target.tagName.toLowerCase();
|
||||
if (tag === 'input' || tag === 'textarea' || e.target.isContentEditable) return;
|
||||
|
||||
switch (e.key) {
|
||||
case ' ':
|
||||
e.preventDefault();
|
||||
dotNetHelper.invokeMethodAsync('OnKeyboardTogglePlay');
|
||||
break;
|
||||
case 'ArrowLeft':
|
||||
e.preventDefault();
|
||||
dotNetHelper.invokeMethodAsync('OnKeyboardSeek', -10);
|
||||
break;
|
||||
case 'ArrowRight':
|
||||
e.preventDefault();
|
||||
dotNetHelper.invokeMethodAsync('OnKeyboardSeek', 10);
|
||||
break;
|
||||
case 'ArrowUp':
|
||||
e.preventDefault();
|
||||
dotNetHelper.invokeMethodAsync('OnKeyboardVolumeChange', 5);
|
||||
break;
|
||||
case 'ArrowDown':
|
||||
e.preventDefault();
|
||||
dotNetHelper.invokeMethodAsync('OnKeyboardVolumeChange', -5);
|
||||
break;
|
||||
}
|
||||
};
|
||||
window.addEventListener('keydown', handleKeyDown);
|
||||
|
||||
const destroy = () => window.removeEventListener('keydown', handleKeyDown);
|
||||
|
||||
return { loadAndPlay, play, pause, stop, setVolume, setCurrentTime, destroy };
|
||||
}
|
||||
Reference in New Issue
Block a user