From 9edb55772d7716db3e052c42da7a04f7bb56d3d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=A7=E9=A9=8A?= Date: Fri, 12 Sep 2025 17:39:18 +0800 Subject: [PATCH] feat/create_wamp --- app/components/WinampWindow.vue | 379 ++++++++++++++++++++++++++++---- 1 file changed, 333 insertions(+), 46 deletions(-) diff --git a/app/components/WinampWindow.vue b/app/components/WinampWindow.vue index da6cd5b..f9f4099 100644 --- a/app/components/WinampWindow.vue +++ b/app/components/WinampWindow.vue @@ -1,55 +1,342 @@ - - + + + +.track-title-marquee { + overflow: hidden; + white-space: nowrap; + position: relative; + height: 14px; /* Adjust height for single line of text */ +} + +.track-title-marquee span { + position: absolute; + animation: marquee 10s linear infinite; + padding-left: 100%; /* Start off-screen */ +} + +@keyframes marquee { + 0% { transform: translateX(0%); } + 100% { transform: translateX(-100%); } +} + +.time-display { + font-size: 16px; + text-align: right; + height: 14px; +} + +.middle-panel { + display: flex; + justify-content: space-between; + background-color: #000; + border: 1px inset #808080; + padding: 2px; + color: #c0c0c0; + font-size: 12px; + height: 16px; + margin-bottom: 2px; +} + +.kbps, .khz, .mono-stereo { + display: flex; + align-items: center; +} +.kbps span, .khz span { + font-size: 10px; + margin-left: 2px; +} + +.bottom-panel { + display: flex; + align-items: center; + gap: 5px; + background-color: #3b3b3b; + padding: 2px; + border: 1px solid #7a7a7a; + border-top-color: #000; + border-left-color: #000; +} + +.control-buttons { + display: flex; + gap: 1px; +} + +.control-btn { + width: 20px; + height: 18px; + border: 1px solid #7a7a7a; + border-right-color: #000; + border-bottom-color: #000; + background-color: #3b3b3b; + cursor: pointer; + background-repeat: no-repeat; + background-position: center; + background-size: 80%; + position: relative; + overflow: hidden; +} + +.control-btn:active { + border: 1px solid #000; + border-right-color: #7a7a7a; + border-bottom-color: #7a7a7a; +} + + +/* Data URI for button icons (basic representation, replace with actual pixel art) */ +.control-btn.prev { background-image: url('data:image/svg+xml;utf8,'); } +.control-btn.play { background-image: url('data:image/svg+xml;utf8,'); } +.control-btn.play.pause-active { background-image: url('data:image/svg+xml;utf8,'); } +.control-btn.stop { background-image: url('data:image/svg+xml;utf8,'); } +.control-btn.next { background-image: url('data:image/svg+xml;utf8,'); } + + +/* Sliders */ +.slider { + -webkit-appearance: none; + appearance: none; + background: #000; + outline: none; + cursor: pointer; + border: 1px inset #808080; /* Sunken effect */ +} + +.slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 8px; + height: 16px; + background: #c0c0c0; + border: 1px solid #fff; + border-right-color: #404040; + border-bottom-color: #404040; + cursor: grab; +} + +.slider::-moz-range-thumb { + width: 8px; + height: 16px; + background: #c0c0c0; + border: 1px solid #fff; + border-right-color: #404040; + border-bottom-color: #404040; + cursor: grab; +} + +.volume-slider-container { + width: 60px; +} +.volume-slider { + width: 100%; + height: 8px; +} + +.progress-bar-container { + flex-grow: 1; +} +.progress-slider { + width: 100%; + height: 8px; +} + \ No newline at end of file