|
@@ -0,0 +1,174 @@
|
|
|
+<template>
|
|
|
+ <div
|
|
|
+ class="bottom-bar"
|
|
|
+ :class="{collapsed: isCollapsed}"
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ class="bg-image"
|
|
|
+ src="@/assets/images/bottom-bar-bg.png"
|
|
|
+ alt=""
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ <button
|
|
|
+ class="arrow"
|
|
|
+ @click="isCollapsed = !isCollapsed"
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ src="@/assets/images/arrow-sharp.png"
|
|
|
+ alt="show-hide"
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ </button>
|
|
|
+ <menu>
|
|
|
+ <button @click="$router.push({name: 'HomeView'})">
|
|
|
+ <img
|
|
|
+ src="@/assets/images/home.png"
|
|
|
+ alt="首页"
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ <span>首页</span>
|
|
|
+ </button>
|
|
|
+ <button>
|
|
|
+ <img
|
|
|
+ src="@/assets/images/music.png"
|
|
|
+ alt="声音"
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ <span>声音</span>
|
|
|
+ </button>
|
|
|
+ <button @click="onClickLike">
|
|
|
+ <img
|
|
|
+ src="@/assets/images/like.png"
|
|
|
+ alt="点赞"
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ <span>点赞</span>
|
|
|
+ <transition name="bubble">
|
|
|
+ <div
|
|
|
+ v-if="isShowPlusOne"
|
|
|
+ class="plus-one"
|
|
|
+ >
|
|
|
+ +1
|
|
|
+ </div>
|
|
|
+ </transition>
|
|
|
+ </button>
|
|
|
+ <button @click="onClickShare">
|
|
|
+ <img
|
|
|
+ src="@/assets/images/share.png"
|
|
|
+ alt="分享"
|
|
|
+ draggable="false"
|
|
|
+ >
|
|
|
+ <span>分享</span>
|
|
|
+ </button>
|
|
|
+ </menu>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ isCollapsed: false,
|
|
|
+ isShowPlusOne: false,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ onClickLike() {
|
|
|
+ globalApi.like().then(() => {
|
|
|
+ this.isShowPlusOne = true
|
|
|
+ setTimeout(() => {
|
|
|
+ this.isShowPlusOne = false
|
|
|
+ }, 1000)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ onClickShare() {
|
|
|
+ },
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="less" scoped>
|
|
|
+.bottom-bar {
|
|
|
+ width: 100vw;
|
|
|
+ position: fixed;
|
|
|
+ left: 0;
|
|
|
+ bottom: -2px;
|
|
|
+ .bg-image {
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+ .arrow {
|
|
|
+ position: absolute;
|
|
|
+ left: 50%;
|
|
|
+ top: 0;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ width: 2.21rem;
|
|
|
+ height: 1.96rem;
|
|
|
+ padding: 0.62rem;
|
|
|
+ box-sizing: initial;
|
|
|
+ > img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ > menu {
|
|
|
+ position: absolute;
|
|
|
+ left: 50%;
|
|
|
+ top: 2.96rem;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 2.12rem;
|
|
|
+ > button {
|
|
|
+ padding: 0.4rem;
|
|
|
+ position: relative;
|
|
|
+ > img {
|
|
|
+ width: 3.17rem;
|
|
|
+ height: 3.17rem;
|
|
|
+ object-fit: contain;
|
|
|
+ }
|
|
|
+ > span {
|
|
|
+ display: block;
|
|
|
+ line-height: 1.37rem;
|
|
|
+ color: #F9F2E8;
|
|
|
+ font-size: 1.17rem;
|
|
|
+ }
|
|
|
+ .plus-one {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ right: 0;
|
|
|
+ transform: translate(50%, -50%);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.collapsed {
|
|
|
+ transform: translateY(calc(100% - 3.5rem));
|
|
|
+ .arrow {
|
|
|
+ transform: translateX(-50%) rotate(180deg);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.bubble-enter {
|
|
|
+ opacity: 0;
|
|
|
+ top: 1rem !important;
|
|
|
+}
|
|
|
+.bubble-enter-to {
|
|
|
+ opacity: 1;
|
|
|
+ top: 0 !important;
|
|
|
+}
|
|
|
+.bubble-enter-active {
|
|
|
+ transition: all 0.5s;
|
|
|
+}
|
|
|
+.bubble-leave {
|
|
|
+ opacity: 1;
|
|
|
+ top: 0 !important;
|
|
|
+}
|
|
|
+.bubble-leave-to {
|
|
|
+ opacity: 0;
|
|
|
+ top: -1rem !important;
|
|
|
+}
|
|
|
+.bubble-leave-active {
|
|
|
+ transition: all 0.5s;
|
|
|
+}
|
|
|
+</style>
|