hw-gs-player

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 2948a5bcd54f7c4da2158962de71582d670764b1
parent 7d8089dcdba3e70d6342099b7d54c8b4c396e569
Author: Sunny <122193933+Sunny-JP@users.noreply.github.com>
Date:   Sat, 15 Mar 2025 13:55:22 +0900

Merge pull request #6 from Sunny-JP/sub-2

update title-bar style
Diffstat:
Msrc/App.vue | 59++++++++++++++++++++++++++++++++++++++++-------------------
Msrc/components/About.vue | 2+-
Asrc/components/Info.vue | 4++++
Asrc/components/Policy.vue | 4++++
Msrc/router.ts | 24++++++++++++++----------
Msrc/style.css | 142++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
6 files changed, 149 insertions(+), 86 deletions(-)

diff --git a/src/App.vue b/src/App.vue @@ -1,27 +1,49 @@ <script setup lang="ts"> - let MenuButton: Boolean = true; +import { ref, onMounted, onBeforeUnmount } from "vue"; + +const MenuButton = ref(false); + +const closeMenu = (event: Event) => { + const target = event.target as HTMLElement; + if (!target.closest(".menu") && !target.closest(".hamburger_btn")) { + MenuButton.value = false; + } +}; + +onMounted(() => { + window.addEventListener("click", closeMenu); +}); + +onBeforeUnmount(() => { + window.removeEventListener("click", closeMenu); +}); </script> <template> <header> <nav> - <h2>GS Player</h2> - <div class="hamburger_btn" v-on:click="MenuButton=!MenuButton"> - <span class="line line_01" v-bind:class="{'btn_line01':MenuButton}"></span> - <span class="line line_02" v-bind:class="{'btn_line02':MenuButton}"></span> - <span class="line line_03" v-bind:class="{'btn_line03':MenuButton}"></span> + <div class="title_bar"> + <p>GS Player</p> + </div> + <div class="hamburger_btn" @click.stop="MenuButton = !MenuButton"> + <span class="line line_01" :class="{ 'btn_line01': MenuButton }"></span> + <span class="line line_02" :class="{ 'btn_line02': MenuButton }"></span> + <span class="line line_03" :class="{ 'btn_line03': MenuButton }"></span> + </div> + <div class="menu" :class="{ open: MenuButton }"> + <ul> + <!-- 将来的には多言語対応する.中,韓ではそれぞれNoto sans C,Kを用いる --> + <li><router-link to="/" @click="MenuButton = false">Top</router-link></li> + <li><router-link to="/" @click="MenuButton = false">My List</router-link></li> + <hr> + <li><router-link to="/about" @click="MenuButton = false">About</router-link></li> + <li><router-link to="/terms" @click="MenuButton = false">利用規約</router-link></li> + <li><router-link to="/policy" @click="MenuButton = false">プライバシーポリシー</router-link></li> + <li><router-link to="/enquiries" @click="MenuButton = false">お問い合わせ</router-link></li> + <li><router-link to="/info" @click="MenuButton = false">運営者情報</router-link></li> + </ul> </div> - <transition name="menu"> - <div class="menu" v-show="MenuButton"> - <ul> - <li><router-link to="/">Album List</router-link></li> - <li><router-link to="/about">about</router-link></li> - <li><router-link to="/terms">利用規約</router-link></li> - <li><router-link to="/enquiries">お問い合わせ</router-link></li> - </ul> - </div> - </transition> </nav> </header> - <router-view/> -</template>- \ No newline at end of file + <router-view /> +</template> diff --git a/src/components/About.vue b/src/components/About.vue @@ -1,3 +1,3 @@ <template> - <h1>About</h1> + <h1>About</h1> </template> \ No newline at end of file diff --git a/src/components/Info.vue b/src/components/Info.vue @@ -0,0 +1,3 @@ +<template> + <h1>運営者情報</h1> +</template>+ \ No newline at end of file diff --git a/src/components/Policy.vue b/src/components/Policy.vue @@ -0,0 +1,3 @@ +<template> + <h1>プライバシーポリシー</h1> +</template>+ \ No newline at end of file diff --git a/src/router.ts b/src/router.ts @@ -1,21 +1,25 @@ -import {createRouter, createWebHistory} from 'vue-router'; -import TopView from "./components/AlbumList.vue"; +import { createRouter, createWebHistory } from 'vue-router'; +import Top from "./components/AlbumList.vue"; import About from "./components/About.vue"; -import Terms from './components/Terms.vue'; import Enquiries from './components/Enquiries.vue'; +import Info from './components/Info.vue'; import Player from './components/Player.vue'; +import Policy from './components/Policy.vue'; +import Terms from './components/Terms.vue'; const routes = [ - {path: '/', name: 'top', component: TopView}, - {path: '/about', name: 'about', component: About}, - {path: '/terms', name: 'terms', component: Terms}, - {path: '/enquiries', name: 'enquiries', component: Enquiries}, - {path: '/player', name: 'player', component: Player}, + { path: '/', name: 'top', component: Top }, + { path: '/about', name: 'about', component: About }, + { path: '/enquiries', name: 'enquiries', component: Enquiries }, + { path: '/info', name: 'info', component: Info }, + { path: '/player', name: 'player', component: Player }, + { path: '/policy', name: 'policy', component: Policy }, + { path: '/terms', name: 'terms', component: Terms }, ] const router = createRouter({ - history: createWebHistory(), // HTML5 History モード - routes, + history: createWebHistory(), // HTML5 History モード + routes, }) export default router; \ No newline at end of file diff --git a/src/style.css b/src/style.css @@ -1,12 +1,13 @@ @import './reset-style.css'; -@import url('https://fonts.googleapis.com/css2?family=Kosugi&family=Poppins&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100..900&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); body { margin: 0px; padding: 0px; color: #ffffff; - font-family: "Poppins", "Kosugi", "Helvetica Neue", "Helvetica", "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Meiryo", sans-serif; + font-family: "Poppins", "Noto Sans JP", "Helvetica Neue", "Helvetica", "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Meiryo", sans-serif; font-size: 14px; + font-weight: 400; background: #000000; -webkit-text-size-adjust: none; } @@ -15,36 +16,33 @@ body { display: flex; flex-direction: column; align-items: center; - padding-bottom: 60px; + padding: 15px; } -iframe { - margin: 10px; - width: 80%; - height: 60%; - max-width: 500px; - aspect-ratio: 1/1; -} - -.title { - font-size: 30px; +/* title bar */ +.title_bar { + padding: 15px; + width: calc(100vw - 30px); + height: 25px; + background-color: #1f1f1f; + -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) 95%, rgba(0, 0, 0, 0) 100%); + mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1) 95%, rgba(0, 0, 0, 0) 100%); } -.artist { - font-size: 16px; +.title_bar p { + margin-top: 1px; + margin-left: 5px; + font-size: 20px; + line-height: 1; } -.nowtime, -.endtime { - font-size: 13px; -} -/*ボタン*/ +/* hamburger button */ .hamburger_btn { - position: fixed; /*常に最上部に表示したいので固定*/ + position: fixed; top: 0; right: 0; - width: 70px; - height: 72px; + width: 80px; + height: 55px; cursor: pointer; z-index: 50; } @@ -52,49 +50,56 @@ iframe { .hamburger_btn .line { position: absolute; top: 0; - left: 20px; - width: 32px; + right: 25px; + width: 28px; height: 2px; - background: #333333; + background: #999999; text-align: center; + transition: 0.4s ease; } .hamburger_btn .line_01 { top: 16px; - transition: 0.4s ease; } + .hamburger_btn .line_02 { top: 26px; - transition: 0.4s ease; } + .hamburger_btn .line_03 { top: 36px; - transition: 0.4s ease; } - +/* hamburger button transform -> x */ .btn_line01 { - transform: translateY(10px) rotate(-45deg); - transition: 0.4s ease; + transform: translateY(10px) rotate(-45deg) } + .btn_line02 { - transition: 0.4s ease; opacity: 0; } + .btn_line03 { transform: translateY(-10px) rotate(45deg); - transition: 0.4s ease; } -/*サイドバー*/ -.menu-enter-active, .menu-leave-active { - transition: opacity 0.4s; -} -.menu-enter, .menu-leave-to { - opacity: 0; +/* side menu */ +.menu { + background-color: #1f1f1f; + z-index: 30; + padding: 50px 5px 5px 5px; + position: fixed; + width: 10rem; + height: 100vh; + top: 0; + right: 0; + font-weight: 500; + transform: translateX(100%); + transition: transform 0.4s ease; } -.menu-leave, .menu-enter-to{ - opacity: 1; + +.menu.open { + transform: translateX(0); } .menu li { @@ -102,23 +107,48 @@ iframe { line-height: 1; padding: 1rem; } -.menu { - background-color: rgba(197, 197, 197, 0.671); - z-index: 30; - padding: 2rem 1rem; - position: fixed; - width: 20rem; - height: 80rem; - top: 0; - right: 0; -} + .menu a { - color: rgb(66, 66, 66); + color: #999999; text-decoration: none; - font-size: 1.2rem; - padding: 0 2rem; + font-size: 1rem; + transition: 0.4s ease; +} + +.menu a:hover { + color: #dddddd; } -.menu ul{ + +.menu ul { margin: 1rem; padding: 0; +} + +.menu hr { + border-color: #999999; + border-width: 1.5px; + margin-top: 6px; + margin-bottom: 6px; +} + +/* player */ +iframe { + margin: 10px; + width: 80%; + height: 60%; + max-width: 500px; + aspect-ratio: 1/1; +} + +.title { + font-size: 30px; +} + +.artist { + font-size: 16px; +} + +.nowtime, +.endtime { + font-size: 13px; } \ No newline at end of file