为每个页面添加动画

This commit is contained in:
Searchstars
2025-02-07 21:07:41 +08:00
parent 1158bf7f65
commit 115e241e86
32 changed files with 626 additions and 428 deletions
+5
View File
@@ -15,6 +15,7 @@ import * as savedcontent from "./savedcontent"
import * as bgimg from "./bgimg"
import * as usertracker from "./usertracker"
import logger from "./logger/logger"
import * as ui from "./ui/ui"
export default {
dayjs: dayjs,
tools: tools,
@@ -29,6 +30,10 @@ export default {
console.log("create global logger")
global.logger = logger
console.log("create custom ui engine")
global.ui = ui
global.ui.Init()
console.log("create global animengine")
global.animengine = animengine
+2
View File
@@ -44,6 +44,8 @@ export default {
})
},
onInit() {
global.ui.InitPage(this._parentVM)
const deviceInfo = global.DEVICE_INFO
if (deviceInfo.screenShape == "rect") {
this.barRowStyle["width"] = `${deviceInfo.screenWidth}px`
+7 -1
View File
@@ -28,9 +28,15 @@ export default {
useRowLayout: false
},
RouterBack() {
router.back()
global.ui.OnBackPressTriggered()
},
onInit() {
global.ui.InitPage(this._parentVM)
this._parentVM.$options.onBackPress = () => {
global.ui.OnBackPressTriggered()
return true
}
const deviceInfo = global.DEVICE_INFO;
if (deviceInfo.screenShape == "rect"){
this.barRowStyle["width"] = `${deviceInfo.screenWidth}px`
+33
View File
@@ -0,0 +1,33 @@
// 以下任何涉及到负移动的动画(例如openpage-scroll
// 都需要使用animation-direction: reverse进行播放
// 这是由于傻逼vela快应用框架不支持keyframes数值自减导致的
// 需要reverse
@keyframes openpage-scroll {
0% {
transform: translateX(0px) scale(1);
}
100% {
transform: translateX(500px) scale(0.75);
}
}
// 需要reverse
@keyframes fromback-scroll {
0% {
transform: translateY(232px) scale(1);
}
100% {
transform: translateY(0px) scale(0.75);
}
}
// 无需reverse
@keyframes backpage-scroll {
0% {
transform: translateX(0px) scale(1);
}
100% {
transform: translateX(500px) scale(0.75);
}
}
+21
View File
@@ -1,3 +1,5 @@
@import './glanims.less';
@screenWidth: 100%;
@screenHeight: 100%;
@@ -15,6 +17,25 @@
align-items: center;
width: @screenWidth;
height: @screenHeight;
animation-name: openpage-scroll;
animation-timing-function: ease;
animation-duration: 500ms;
animation-direction: reverse;
}
.scroll-backanim {
animation-name: backpage-scroll;
animation-timing-function: ease;
animation-duration: 500ms;
animation-direction: normal;
}
.scroll-frombackanim {
animation-name: fromback-scroll;
animation-timing-function: ease;
animation-duration: 500ms;
animation-direction: reverse;
}
text {
+2 -1
View File
@@ -2,7 +2,7 @@
<template>
<div class="page">
<scroll class="scroll" scroll-y="true" @scrollbottom="DoScrollTip" bounces="true">
<scroll class="scroll {{scrclass}}" scroll-y="true" @scrollbottom="DoScrollTip" bounces="true">
<title-bar title="arealist.title"></title-bar>
<div class="btnline" style="margin-top: 15px;">
<div class="btn" onclick="GoPage('app/features/main')">
@@ -54,6 +54,7 @@ export default {
lastpage: ""
},
private: {
scrclass: "",
showChangePageFX: false,
colors: {
main: "#222222",
+47 -44
View File
@@ -4,52 +4,54 @@
<template>
<div class="page">
<title-bar title="dynamic.detail.title"></title-bar>
<div class="user">
<image class="userface" onclick="OpenUser(dyn.modules.module_author.mid)" src="{{dyn.modules.module_author.face}}@75w_75h" alt="/common/fullgray.png"></image>
<div class="userinfo">
<text class="username" style="margin-bottom: 3px">
{{ dyn.modules.module_author.name }}
</text>
<text style="font-size: 18px; color: #5e5e5e" if="{{ dyn.modules.module_author.pub_time }}">
{{ dyn.modules.module_author.pub_time }}
</text>
<text style="font-size: 18px; color: #5e5e5e">
{{ pubAction }}
</text>
</div>
</div>
<div class="ctx">
<!-- 动态文本desc 不为空时渲染 -->
<text class="dyn-content-text" if="{{dyn.modules.module_dynamic.desc.text}}">
{{ dyn.modules.module_dynamic.desc.text }}
</text>
<!-- 纯文本动态 不展示任何内容 -->
<text if="{{dyn.type == 'DYNAMIC_TYPE_WORD'}}"></text>
<!-- 图文动态 直接列表图片渲染 -->
<online-image elif="{{dyn.type == 'DYNAMIC_TYPE_DRAW'}}" for="{{dyn.modules.module_dynamic.major.draw.items}}"
src="{{$item.src}}@350w" loading-anim="true"></online-image>
<!-- 视频投稿动态 展示视频跳转 -->
<videoshow elif="{{dyn.type == 'DYNAMIC_TYPE_AV'}}" bvid="{{dyn.modules.module_dynamic.major.archive.bvid}}">
</videoshow>
<!-- 转发动态 显示原动态简略信息 -->
<div elif="{{dyn.type == 'DYNAMIC_TYPE_FORWARD'}}" class="ctx-forwarded-box" @click="JumpToOrigDetail">
<div style="flex-direction: row">
<text class="ctx-forwarded-txt">转发自</text>
<text class="ctx-forwarded-txt txt-at">@{{ dyn.orig.modules.module_author.name }}</text>
<text class="ctx-forwarded-txt">的动态:</text>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="dynamic.detail.title"></title-bar>
<div class="user">
<image class="userface" onclick="OpenUser(dyn.modules.module_author.mid)" src="{{dyn.modules.module_author.face}}@75w_75h" alt="/common/fullgray.png"></image>
<div class="userinfo">
<text class="username" style="margin-bottom: 3px">
{{ dyn.modules.module_author.name }}
</text>
<text style="font-size: 18px; color: #5e5e5e" if="{{ dyn.modules.module_author.pub_time }}">
{{ dyn.modules.module_author.pub_time }}
</text>
<text style="font-size: 18px; color: #5e5e5e">
{{ pubAction }}
</text>
</div>
<text class="ctx-forwarded-txt" if="{{dyn.orig.modules.module_dynamic.desc.text}}">
{{ dyn.orig.modules.module_dynamic.desc.text }}
</text>
<text class="ctx-forwarded-txt" else>[暂无文本内容]</text>
<text class="ctx-forwarded-txt" style="color: gray">点击可查看详情</text>
</div>
<div class="ctx">
<!-- 动态文本desc 不为空时渲染 -->
<text class="dyn-content-text" if="{{dyn.modules.module_dynamic.desc.text}}">
{{ dyn.modules.module_dynamic.desc.text }}
</text>
<text else>该类型动态暂不支持展示</text>
</div>
<text style="margin-top: 30px"></text>
<!-- 纯文本动态 不展示任何内容 -->
<text if="{{dyn.type == 'DYNAMIC_TYPE_WORD'}}"></text>
<!-- 图文动态 直接列表图片渲染 -->
<online-image elif="{{dyn.type == 'DYNAMIC_TYPE_DRAW'}}" for="{{dyn.modules.module_dynamic.major.draw.items}}"
src="{{$item.src}}@350w" loading-anim="true"></online-image>
<!-- 视频投稿动态 展示视频跳转 -->
<videoshow elif="{{dyn.type == 'DYNAMIC_TYPE_AV'}}" bvid="{{dyn.modules.module_dynamic.major.archive.bvid}}">
</videoshow>
<!-- 转发动态 显示原动态简略信息 -->
<div elif="{{dyn.type == 'DYNAMIC_TYPE_FORWARD'}}" class="ctx-forwarded-box" @click="JumpToOrigDetail">
<div style="flex-direction: row">
<text class="ctx-forwarded-txt">转发自</text>
<text class="ctx-forwarded-txt txt-at">@{{ dyn.orig.modules.module_author.name }}</text>
<text class="ctx-forwarded-txt">的动态:</text>
</div>
<text class="ctx-forwarded-txt" if="{{dyn.orig.modules.module_dynamic.desc.text}}">
{{ dyn.orig.modules.module_dynamic.desc.text }}
</text>
<text class="ctx-forwarded-txt" else>[暂无文本内容]</text>
<text class="ctx-forwarded-txt" style="color: gray">点击可查看详情</text>
</div>
<text else>该类型动态暂不支持展示</text>
</div>
<text style="margin-top: 30px"></text>
</scroll>
</div>
</template>
@@ -59,7 +61,8 @@ import router from "@system.router"
export default {
public: {
dyn: null,
pubAction: "N/A"
pubAction: "N/A",
scrclass: ""
},
JumpToOrigDetail() {
router.push({
+2 -1
View File
@@ -4,7 +4,7 @@
<template>
<div class="page">
<image style="position: absolute; left: 0px" src="{{getBgImg}}"></image>
<scroll class="scroll" scroll-y="true" bounces="true">
<scroll class="scroll {{scrclass}}" scroll-y="true" bounces="true">
<switch-bar title="dynamic.title"></switch-bar>
<div class="waterfall" if="show_content">
<div class="waterfall-column">
@@ -23,6 +23,7 @@
<script>
export default {
private: {
scrclass: "",
show_content: false,
anims: {
show_loading: false
+2 -1
View File
@@ -4,7 +4,7 @@
<template>
<div class="page">
<image style="position: absolute; left: 0px" src="{{getBgImg}}"></image>
<scroll scroll-y="true" class="scroll" bounces="true">
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<switch-bar title="main.title"></switch-bar>
<text class="tip">{{ funnytip }}</text>
<image style="position: absolute; margin-top: 265px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}">
@@ -30,6 +30,7 @@ import prompt from "@system.prompt"
export default {
private: {
scrclass: "",
recommend_vids: [],
show_recommend_div: false,
funnytip: "",
+27 -24
View File
@@ -3,29 +3,31 @@
<template>
<div class="page">
<switch-bar title="mypage.title"></switch-bar>
<user-info account-info="{{accountInfo}}"></user-info>
<div class="btnbase" style="margin-top: 40px" @click="GoMyFavFolders()">
<image class="btnimg" src="/common/mypage_star.png"></image>
<text class="btntext">{{ $t("mypage.favourite") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<div class="btnbase" style="margin-top: 10px" @click="GoHistory()">
<image class="btnimg" src="/common/mypage_history.png"></image>
<text class="btntext">{{ $t("mypage.history") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<div class="btnbase" style="margin-top: 10px" @click="WIPTips()">
<image class="btnimg" src="/common/mypage_watchlater.png"></image>
<text class="btntext">{{ $t("mypage.showLater") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<div class="btnbase" style="margin-top: 10px" @click="GoMessages()">
<image class="btnimg" src="/common/mypage_messager.png"></image>
<text class="btntext">{{ $t("mypage.messages") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<text style="margin-top: 25px"></text>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<switch-bar title="mypage.title"></switch-bar>
<user-info account-info="{{accountInfo}}"></user-info>
<div class="btnbase" style="margin-top: 40px" @click="GoMyFavFolders()">
<image class="btnimg" src="/common/mypage_star.png"></image>
<text class="btntext">{{ $t("mypage.favourite") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<div class="btnbase" style="margin-top: 10px" @click="GoHistory()">
<image class="btnimg" src="/common/mypage_history.png"></image>
<text class="btntext">{{ $t("mypage.history") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<div class="btnbase" style="margin-top: 10px" @click="WIPTips()">
<image class="btnimg" src="/common/mypage_watchlater.png"></image>
<text class="btntext">{{ $t("mypage.showLater") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<div class="btnbase" style="margin-top: 10px" @click="GoMessages()">
<image class="btnimg" src="/common/mypage_messager.png"></image>
<text class="btntext">{{ $t("mypage.messages") }}</text>
<image src="/common/arrow_right.png"></image>
</div>
<text style="margin-top: 25px"></text>
</scroll>
</div>
</template>
@@ -34,7 +36,8 @@ import router from "@system.router"
import prompt from "@system.prompt"
export default {
private: {
accountInfo: {}
accountInfo: {},
scrclass: ""
},
GoHistory(){
router.push({
@@ -4,7 +4,7 @@
<template>
<div class="page">
<image style="position: absolute; left: 0px" src="{{getBgImg}}"></image>
<scroll class="scroll" scroll-y="true" bounces="true">
<scroll class="scroll {{scrclass}}" scroll-y="true" bounces="true">
<switch-bar title="savedcontent.title" static></switch-bar>
<div style="flex-direction: column; align-items: center; width: 100%" for="{{content}}">
<div if="{{$item.type == 'article' ? true : false}}"
@@ -21,6 +21,7 @@
import router from "@system.router"
export default {
private: {
scrclass: "",
content: []
},
computed: {
+70 -61
View File
@@ -2,69 +2,77 @@
<template>
<div class="page">
<title-bar title="about.title"></title-bar>
<div class="appbar">
<image class="logo" src="/common/logo.png"></image>
<text class="text" style="margin-left: 20px">HyperBili</text>
<text class="text ver">{{ version }}</text>
</div>
<text class="text" style="margin-top: 22px">{{ $t("about.projectOwnerShip") }}</text>
<div class="appbar" style="margin-top: 22px">
<image class="logo" src="/common/about_projectownership.png"></image>
<div style="margin-left: 20px; flex-direction: column">
<text class="text">AstralSight </text>
<text class="text">Studios</text>
<scroll class="scroll {{scrclass}}" scroll-y="true" bounces="true">
<title-bar title="about.title"></title-bar>
<div class="appbar">
<image class="logo" src="/common/logo.png"></image>
<text class="text" style="margin-left: 20px">HyperBili</text>
<text class="text ver">{{ version }}</text>
</div>
</div>
<text class="text" style="margin-top: 22px">{{ $t("about.buildInfo") }}</text>
<div class="buildinfobar" style="margin-top: 22px">
<div class="buildinfo">
<text class="text" style="font-size: 24px">{{ $t("about.commitHash") }}</text>
<text class="text" style="font-size: 20px; max-width: 160px">{{ buildinfo.GIT_COMMIT_HASH }}</text>
<text class="text" style="margin-top: 22px">{{ $t("about.projectOwnerShip") }}</text>
<div class="appbar" style="margin-top: 22px">
<image class="logo" src="/common/about_projectownership.png"></image>
<div style="margin-left: 20px; flex-direction: column">
<text class="text">AstralSight</text>
<text class="text">Studios</text>
</div>
</div>
<div class="buildinfo">
<text class="text" style="font-size: 24px">{{ $t("about.buildTime") }}</text>
<text class="text" style="font-size: 20px; max-width: 160px">{{ buildinfo.BUILD_TIME }}</text>
<text class="text" style="margin-top: 22px">{{ $t("about.buildInfo") }}</text>
<div class="buildinfobar" style="margin-top: 22px">
<div class="buildinfo">
<text class="text" style="font-size: 24px">{{ $t("about.commitHash") }}</text>
<text class="text" style="font-size: 20px; max-width: 160px">
{{ buildinfo.GIT_COMMIT_HASH }}
</text>
</div>
<div class="buildinfo">
<text class="text" style="font-size: 24px">{{ $t("about.buildTime") }}</text>
<text class="text" style="font-size: 20px; max-width: 160px">
{{ buildinfo.BUILD_TIME }}
</text>
</div>
<div class="buildinfo">
<text class="text" style="font-size: 24px">{{ $t("about.builder") }}</text>
<text class="text" style="font-size: 20px; max-width: 160px">
{{ buildinfo.BUILD_USER }}
</text>
</div>
</div>
<div class="buildinfo">
<text class="text" style="font-size: 24px">{{ $t("about.builder") }}</text>
<text class="text" style="font-size: 20px; max-width: 160px">{{ buildinfo.BUILD_USER }}</text>
<text class="text" style="margin-top: 30px">{{ $t("about.developers") }}</text>
<div class="developers" style="margin-top: 15px">
<div class="developer">
<image src="/common/aboutpage_code.png" class="img"></image>
<text class="text devname">@Searchstars</text>
</div>
<div class="developer">
<image src="/common/aboutpage_code.png" class="img"></image>
<text class="text devname">@xinghengCN</text>
</div>
<div class="developer">
<image src="/common/aboutpage_brush.png" class="img"></image>
<text class="text devname">@RX79XT</text>
</div>
<div class="developer">
<image src="/common/aboutpage_brush.png" class="img"></image>
<text class="text devname">@wuhaiqi</text>
</div>
<div class="developer">
<image src="/common/aboutpage_brush.png" class="img"></image>
<text class="text devname">@一個小果冻</text>
</div>
</div>
</div>
<text class="text" style="margin-top: 30px">{{ $t("about.developers") }}</text>
<div class="developers" style="margin-top: 15px">
<div class="developer">
<image src="/common/aboutpage_code.png" class="img"></image>
<text class="text devname">@Searchstars</text>
<text class="text" style="color: #9e9e9e; margin-top: 12px">
{{ $t("about.moreResources") }}
</text>
<text class="text" style="margin-top: 5px">bandbbs.cn</text>
<div @click="OpenOpenSoftwareWarning" class="disclaimer-btn" style="margin-top: 20px">
<text style="font-size: 28px; font-weight: 600">{{ $t("about.osw") }}</text>
</div>
<div class="developer">
<image src="/common/aboutpage_code.png" class="img"></image>
<text class="text devname">@xinghengCN</text>
<div @click="OpenDisclaimer" class="disclaimer-btn" style="margin-top: 20px">
<text style="font-size: 28px; font-weight: 600">{{ $t("about.disclaimer") }}</text>
</div>
<div class="developer">
<image src="/common/aboutpage_brush.png" class="img"></image>
<text class="text devname">@RX79XT</text>
</div>
<div class="developer">
<image src="/common/aboutpage_brush.png" class="img"></image>
<text class="text devname">@wuhaiqi</text>
</div>
<div class="developer">
<image src="/common/aboutpage_brush.png" class="img"></image>
<text class="text devname">@一個小果冻</text>
</div>
</div>
<text class="text" style="color: #9e9e9e; margin-top: 12px">
{{ $t("about.moreResources") }}
</text>
<text class="text" style="margin-top: 5px">bandbbs.cn</text>
<div @click="OpenOpenSoftwareWarning" class="disclaimer-btn" style="margin-top: 20px;">
<text style="font-size: 28px; font-weight: 600">{{ $t("about.osw") }}</text>
</div>
<div @click="OpenDisclaimer" class="disclaimer-btn" style="margin-top: 20px;">
<text style="font-size: 28px; font-weight: 600">{{ $t("about.disclaimer") }}</text>
</div>
<text style="margin-top: 25px"></text>
<text style="margin-top: 25px"></text>
</scroll>
</div>
</template>
@@ -74,7 +82,8 @@ import router from "@system.router"
export default {
private: {
version: "NA",
buildinfo: buildinfo
buildinfo: buildinfo,
scrclass: ""
},
onInit() {
this.version = "v" + global.biliclient.version
@@ -89,7 +98,7 @@ export default {
}
})
},
OpenOpenSoftwareWarning(){
OpenOpenSoftwareWarning() {
router.push({
uri: "pages/app/features/settings/opensoftware"
})
@@ -98,6 +107,6 @@ export default {
</script>
<style lang="less">
@import '@less/global.less';
@import './about.less';
@import "@less/global.less";
@import "./about.less";
</style>
@@ -3,26 +3,31 @@
<template>
<div class="page">
<title-bar title="cleartmp.title"></title-bar>
<text class="cleartip" style="margin-top: 10px">请先选择类别</text>
<text class="cleartip">随后点击按钮以进行清理</text>
<div class="typebox" style="margin-top: 25px">
<text if="{{tmps.length < 1}}" style="font-weight: 600; font-size: 24px; color: #9E9E9E">缓存文件扫描中...</text>
<div style="padding: 5px; width: 77%" for="{{tmps}}">
<div class="tmptype" onclick="SelectHandler($item.alias)" style="background-color: {{typeColors[$item.alias]}}">
<text class="typetxt">{{ $item.name }}</text>
<text class="typesize">{{ $item.size }}</text>
<scroll class="scroll {{scrclass}}" scroll-y="true" bounces="true">
<title-bar title="cleartmp.title"></title-bar>
<text class="cleartip" style="margin-top: 10px">请先选择类别</text>
<text class="cleartip">随后点击按钮以进行清理</text>
<div class="typebox" style="margin-top: 25px">
<text if="{{tmps.length < 1}}" style="font-weight: 600; font-size: 24px; color: #9e9e9e">
缓存文件扫描中...
</text>
<div style="padding: 5px; width: 77%" for="{{tmps}}">
<div class="tmptype" onclick="SelectHandler($item.alias)" style="background-color: {{typeColors[$item.alias]}}">
<text class="typetxt">{{ $item.name }}</text>
<text class="typesize">{{ $item.size }}</text>
</div>
</div>
</div>
</div>
<default-button @click="ClearClick" primary="true" margin-top="25px" text="cleartmp.clear" disabled="{{cantClear}}"></default-button>
<text style="margin-top: 30px"></text>
<default-button @click="ClearClick" primary="true" margin-top="25px" text="cleartmp.clear"
disabled="{{cantClear}}"></default-button>
<text style="margin-top: 30px"></text>
</scroll>
</div>
</template>
<script>
import prompt from "@system.prompt"
import { asyncFile } from "../../../../../asyncapi/file"
import {asyncFile} from "../../../../../asyncapi/file"
export default {
private: {
@@ -31,21 +36,22 @@ export default {
clearControl: {
imgs: false,
logs: false,
sc: false,
sc: false
},
typeColors: {
imgs: "#434343",
logs: "#434343",
sc: "#434343",
others: "#222222"
}
},
scrclass: ""
},
RefreshPage(){
RefreshPage() {
this.cantClear = true
this.clearControl = {
imgs: false,
logs: false,
sc: false,
sc: false
}
this.typeColors = {
imgs: "#434343",
@@ -58,26 +64,26 @@ export default {
const tasks = []
if (this.clearControl.imgs) {
const imgTemp = this.tmps.find(t => t.alias === "imgs")
const imgTemp = this.tmps.find((t) => t.alias === "imgs")
if (imgTemp) {
imgTemp.list.forEach(uri => {
tasks.push(asyncFile.delete({ uri }))
imgTemp.list.forEach((uri) => {
tasks.push(asyncFile.delete({uri}))
})
}
}
if (this.clearControl.logs) {
const logTemp = this.tmps.find(t => t.alias === "logs")
const logTemp = this.tmps.find((t) => t.alias === "logs")
if (logTemp) {
logTemp.list.forEach(uri => {
tasks.push(asyncFile.delete({ uri }))
logTemp.list.forEach((uri) => {
tasks.push(asyncFile.delete({uri}))
})
}
}
if (this.clearControl.sc) {
const contents = await global.savedcontent.SavedContentManager.listAllContent()
contents.forEach(ct => {
contents.forEach((ct) => {
tasks.push(global.savedcontent.SavedContentManager.deleteContent(ct.id))
})
}
@@ -102,20 +108,24 @@ export default {
this.typeColors.logs = this.clearControl.logs ? "#FF7DA8" : "#434343"
break
case "sc":
if(!this.clearControl.sc){
if (!this.clearControl.sc) {
prompt.showDialog({
message: "清除缓存内容即意味着清除您之前缓存的专栏、音频等内容,且该操作不可逆。确定要继续吗?",
message:
"清除缓存内容即意味着清除您之前缓存的专栏、音频等内容,且该操作不可逆。确定要继续吗?",
success: (data) => {
this.clearControl.sc = true
this.typeColors.sc = this.clearControl.sc ? "#FF7DA8" : "#434343";
this.typeColors.sc = this.clearControl.sc ? "#FF7DA8" : "#434343"
// 由于这是异步函数,因此需要重新做cantClear检测
this.cantClear = !(this.clearControl.imgs || this.clearControl.logs || this.clearControl.sc)
this.cantClear = !(
this.clearControl.imgs ||
this.clearControl.logs ||
this.clearControl.sc
)
}
})
}
else{
} else {
this.clearControl.sc = false
this.typeColors.sc = this.clearControl.sc ? "#FF7DA8" : "#434343";
this.typeColors.sc = this.clearControl.sc ? "#FF7DA8" : "#434343"
}
break
}
@@ -130,12 +140,12 @@ export default {
try {
const contents = await global.savedcontent.SavedContentManager.listAllContent()
const ret = await Promise.all(
contents.map(async content => {
const data = await asyncFile.get({ uri: content.fileUri })
contents.map(async (content) => {
const data = await asyncFile.get({uri: content.fileUri})
return {
uri: content.fileUri,
length: data.length,
_labelIsSavedContent: true,
_labelIsSavedContent: true
}
})
)
@@ -148,23 +158,23 @@ export default {
try {
// 准备统计对象
const totalStats = {
images: { count: 0, size: 0, list: [] },
logs: { count: 0, size: 0, list: [] },
savedContent: { count: 0, size: 0 },
others: { count: 0, size: 0 },
images: {count: 0, size: 0, list: []},
logs: {count: 0, size: 0, list: []},
savedContent: {count: 0, size: 0},
others: {count: 0, size: 0}
}
// 并行获取文件列表
const [rootFiles, logFiles, savedContentFiles] = await Promise.all([
asyncFile.list({ uri: "internal://files/" }),
asyncFile.list({ uri: "internal://files/logs" }),
this.getSavedContentList(),
asyncFile.list({uri: "internal://files/"}),
asyncFile.list({uri: "internal://files/logs"}),
this.getSavedContentList()
])
const fileList = [...rootFiles.fileList, ...logFiles.fileList, ...savedContentFiles]
for (const file of fileList) {
const { uri, length, _labelIsSavedContent } = file
const {uri, length, _labelIsSavedContent} = file
if (/\.(jpg|png|avif|gif)/i.test(uri)) {
totalStats.images.count++
@@ -188,18 +198,18 @@ export default {
name: "临时图片",
alias: "imgs",
size: `${this.BytesToMB(totalStats.images.size)} MB`,
list: totalStats.images.list,
list: totalStats.images.list
},
{
name: "日志文件",
alias: "logs",
size: `${this.BytesToMB(totalStats.logs.size)} MB`,
list: totalStats.logs.list,
list: totalStats.logs.list
},
{
name: "缓存内容",
alias: "sc",
size: `${this.BytesToMB(totalStats.savedContent.size)} MB`,
size: `${this.BytesToMB(totalStats.savedContent.size)} MB`
},
{
name: "其它",
@@ -213,7 +223,7 @@ export default {
},
onInit() {
this.ScanTemps()
},
}
}
</script>
@@ -1,28 +1,35 @@
<import name="title-bar" src="@components/TitleBar/TitleBar.ux"></import>
<template>
<div class="page">
<image src="/common/settings_about.png" style="margin-top: 22px"></image>
<text style="font-size: 35px; font-weight: 600" style="margin-top: 10px">捐赠</text>
<text class="text" style="margin-top: 20px">
自2024年3月以来,Hyperbili的首个版本正式发布。在这段时间中,Hyperbili一直保持开源免费,不向用户收取一分钱。我们投入了大量心血,使其功能丰富且易于使用。
</text>
<text class="text">
Hyperbili由22个以上的页面和超过5214行代码精心打造。虽然付费表盘和付费小程序已成为趋势,但我们仍然坚持完全免费,因为我们希望每个人都能使用它的完整版本。
</text>
<text class="text">
如果您觉得我们的工作值得支持,并且有余力的话,我们欢迎您的捐赠。您的支持将帮助我们继续改进和维护这款产品。同时,我们承诺确保每一位核心开发者都能分享这些捐赠,以激励他们的持续贡献。谢谢!
</text>
<div class="code-container" style="margin-top: 20px">
<qrcode class="code" value="wxp://f2f0xXPY--BFxTceLr-Lfxbx62XHZ6gKtVPm0SHYtpjn8AM"></qrcode>
</div>
<text style="margin-top: 25px"></text>
<scroll class="scroll {{scrclass}}" scroll-y="true" bounces="true">
<title-bar title="捐赠"></title-bar>
<text class="text" style="margin-top: 20px">
自2024年3月以来,Hyperbili的首个版本正式发布。在这段时间中,Hyperbili一直保持开源免费,不向用户收取一分钱。我们投入了大量心血,使其功能丰富且易于使用。
</text>
<text class="text">
Hyperbili由33个以上的页面和超过7860行代码精心打造。虽然付费表盘和付费小程序已成为趋势,但我们仍然坚持完全免费,因为我们希望每个人都能使用它的完整版本。
</text>
<text class="text">
如果您觉得我们的工作值得支持,并且有余力的话,我们欢迎您的捐赠。您的支持将帮助我们继续改进和维护这款产品。同时,我们承诺确保每一位核心开发者都能分享这些捐赠,以激励他们的持续贡献。谢谢!
</text>
<div class="code-container" style="margin-top: 20px">
<qrcode class="code" value="wxp://f2f0xXPY--BFxTceLr-Lfxbx62XHZ6gKtVPm0SHYtpjn8AM"></qrcode>
</div>
<text style="margin-top: 25px"></text>
</scroll>
</div>
</template>
<script>
export default {}
export default {
private: {
scrclass: ""
}
}
</script>
<style lang="less">
@import '@less/global.less';
@import './donation.less';
@import "@less/global.less";
@import "./donation.less";
</style>
File diff suppressed because one or more lines are too long
+48 -45
View File
@@ -2,50 +2,52 @@
<template>
<div class="page">
<switch-bar title="settings.title"></switch-bar>
<img src="/common/settings_version.png" @click="GoAbout"></img>
<div class="setbase" onclick="ClickCountSet(countset_name[0])">
<image class="seticon" src="/common/settings_freshtype.png"></image>
<text class="setext_small">{{ $t("settings.videoPushRelevance") }}</text>
<text class="countset_num">{{ fresh_type }}</text>
</div>
<div class="setbase" onclick="ClickCountSet(countset_name[1])">
<image class="seticon" src="/common/settings_homevidcount.png"></image>
<text class="setext_small">{{ $t("settings.videoPushCount") }}</text>
<text class="countset_num">{{ home_vid_count }}</text>
</div>
<div class="setbase" onclick="SwitchSet(switchset_name[0])">
<image class="seticon" src="/common/settings_enablefullanim.png"></image>
<text class="setext_small">{{ $t("settings.enableFullAnimation") }}</text>
<text class="countset_num">{{ enableFullAnimation ? "开" : "关" }}</text>
</div>
<div class="setbase" @click="ClearTmp()">
<image class="seticon" src="/common/settings_removetmp.png"></image>
<text class="setext_small">{{ $t("settings.clearTemp") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="logout()">
<image class="seticon" src="/common/settings_logout.png"></image>
<text class="setext_small">{{ $t("settings.logOut") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="GoDonation()">
<image class="seticon" src="/common/donation.png"></image>
<text class="setext_small">{{ $t("settings.donation") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="GoAbout()">
<image class="seticon" src="/common/settings_about.png"></image>
<text class="setext_small">{{ $t("settings.about") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="GoDebug()">
<div class="seticon"></div>
<text class="setext_small">{{ $t("settings.debug") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<image style="margin-top: 30px" src="/common/opensource_warning.png"></image>
<text style="margin-top: 25px"></text>
<scroll class="scroll {{scrclass}}" scroll-y="true" bounces="true">
<switch-bar title="settings.title"></switch-bar>
<img src="/common/settings_version.png" @click="GoAbout"></img>
<div class="setbase" onclick="ClickCountSet(countset_name[0])">
<image class="seticon" src="/common/settings_freshtype.png"></image>
<text class="setext_small">{{ $t("settings.videoPushRelevance") }}</text>
<text class="countset_num">{{ fresh_type }}</text>
</div>
<div class="setbase" onclick="ClickCountSet(countset_name[1])">
<image class="seticon" src="/common/settings_homevidcount.png"></image>
<text class="setext_small">{{ $t("settings.videoPushCount") }}</text>
<text class="countset_num">{{ home_vid_count }}</text>
</div>
<div class="setbase" onclick="SwitchSet(switchset_name[0])">
<image class="seticon" src="/common/settings_enablefullanim.png"></image>
<text class="setext_small">{{ $t("settings.enableFullAnimation") }}</text>
<text class="countset_num">{{ enableFullAnimation ? "开" : "关" }}</text>
</div>
<div class="setbase" @click="ClearTmp()">
<image class="seticon" src="/common/settings_removetmp.png"></image>
<text class="setext_small">{{ $t("settings.clearTemp") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="logout()">
<image class="seticon" src="/common/settings_logout.png"></image>
<text class="setext_small">{{ $t("settings.logOut") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="GoDonation()">
<image class="seticon" src="/common/donation.png"></image>
<text class="setext_small">{{ $t("settings.donation") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="GoAbout()">
<image class="seticon" src="/common/settings_about.png"></image>
<text class="setext_small">{{ $t("settings.about") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<div class="setbase" @click="GoDebug()">
<div class="seticon"></div>
<text class="setext_small">{{ $t("settings.debug") }}</text>
<image class="arrow" src="/common/arrow_right.png"></image>
</div>
<image style="margin-top: 30px" src="/common/opensource_warning.png"></image>
<text style="margin-top: 25px"></text>
</scroll>
</div>
</template>
@@ -64,7 +66,8 @@ export default {
fresh_type_min: 1,
home_vid_count_max: 14,
home_vid_count_min: 1
}
},
scrclass: ""
},
GoDonation(){
router.push({
+4 -1
View File
@@ -2,6 +2,7 @@
<template>
<div class="page">
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="favfolders.title"></title-bar>
<image style="position: absolute; margin-top: 245px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}">
</image>
@@ -18,6 +19,7 @@
<image src="/common/arrow_right.png" style="margin-left: 30px"></image>
</list-item>
</list>
</scroll>
</div>
</template>
@@ -29,7 +31,8 @@ export default {
folders: [],
anims: {
show_loading: false
}
},
scrclass: ""
},
public: {
user_mid: null
@@ -3,28 +3,30 @@
<template>
<div class="page">
<title-bar title="foldervideos.title"></title-bar>
<div style="flex-direction: row; align-items: center">
<div @click="BackPN()" style="width: 40px; height: 40px; align-items: center; justify-content: center">
<image src="/common/changepage_left.png"></image>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="foldervideos.title"></title-bar>
<div style="flex-direction: row; align-items: center">
<div @click="BackPN()" style="width: 40px; height: 40px; align-items: center; justify-content: center">
<image src="/common/changepage_left.png"></image>
</div>
<text style="margin-left: 17px; font-size: 25px; font-weight: 600; color: #9e9e9e">
{{ $t("foldervideos.no") }} {{ current_pn }} {{ $t("foldervideos.page") }}
</text>
<div style="
margin-left: 17px;
width: 40px;
height: 40px;
align-items: center;
justify-content: center;
" @click="NextPN()">
<image src="/common/changepage_right.png"></image>
</div>
</div>
<text style="margin-left: 17px; font-size: 25px; font-weight: 600; color: #9e9e9e">
{{ $t("foldervideos.no") }} {{ current_pn }} {{ $t("foldervideos.page") }}
</text>
<div style="
margin-left: 17px;
width: 40px;
height: 40px;
align-items: center;
justify-content: center;
" @click="NextPN()">
<image src="/common/changepage_right.png"></image>
<div class="foldervid_div">
<videoshow video="{{$item}}" for="{{foldervid_vids}}"></videoshow>
</div>
</div>
<div class="foldervid_div">
<videoshow video="{{$item}}" for="{{foldervid_vids}}"></videoshow>
</div>
<text style="margin-top: 25px"></text>
<text style="margin-top: 25px"></text>
</scroll>
<image style="position: absolute; margin-top: 265px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}"></image>
</div>
</template>
@@ -39,7 +41,8 @@ export default {
maxpn: 0,
anims: {
show_loading: false
}
},
scrclass: ""
},
public: {
mlid: "",
+4 -1
View File
@@ -3,6 +3,7 @@
<template>
<div class="page">
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="history.title"></title-bar>
<image style="position: absolute; margin-top: 245px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}">
</image>
@@ -10,6 +11,7 @@
<videoshow for="{{history}}" video="{{$item}}"></videoshow>
</div>
<text style="margin-top: 25px"></text>
</scroll>
</div>
</template>
@@ -20,7 +22,8 @@ export default {
history: null,
anims: {
show_loading: false
}
},
scrclass: ""
},
async LoadHistory(){
this.anims.show_loading = true
+27 -25
View File
@@ -2,31 +2,33 @@
<template>
<div class="page">
<title-bar title="dmlist.title"></title-bar>
<image style="position: absolute; margin-top: 245px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}">
</image>
<div class="dmlist" for="{{sessions}}" if="{{show_dmlist}}">
<div class="user" onclick="GoDMPage($item.talker_id)" onlongpress="LongPressHandle($item.talker_id)">
<image class="userface" src="{{session_cards[$item.talker_id].face}}@75w_75h" alt="/common/fullgray.png"></image>
<div class="infoarea">
<text class="username">{{ session_cards[$item.talker_id].name }}</text>
<text class="lastmsg">
{{
JSON.parse($item.last_msg.content).content ||
JSON.parse($item.last_msg.content).reply_content ||
JSON.parse($item.last_msg.content).text ||
$t("dmlist.currentNoMessage")
}}
</text>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="dmlist.title"></title-bar>
<image style="position: absolute; margin-top: 245px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}">
</image>
<div class="dmlist" for="{{sessions}}" if="{{show_dmlist}}">
<div class="user" onclick="GoDMPage($item.talker_id)" onlongpress="LongPressHandle($item.talker_id)">
<image class="userface" src="{{session_cards[$item.talker_id].face}}@75w_75h" alt="/common/fullgray.png"></image>
<div class="infoarea">
<text class="username">{{ session_cards[$item.talker_id].name }}</text>
<text class="lastmsg">
{{
JSON.parse($item.last_msg.content).content ||
JSON.parse($item.last_msg.content).reply_content ||
JSON.parse($item.last_msg.content).text ||
$t("dmlist.currentNoMessage")
}}
</text>
</div>
<image if="{{$item.pinned}}" src="/common/dmlist_pinned_mask.png"
style="position: absolute; top: 0px; right: 0px"></image>
</div>
<image if="{{$item.pinned}}" src="/common/dmlist_pinned_mask.png"
style="position: absolute; top: 0px; right: 0px"></image>
</div>
</div>
<text style="font-size: 18px; margin-top: 15px; font-weight: 600" show="{{Show20UserLimit}}">
{{ $t("dmlist.userCountLimit") }}
</text>
<text style="margin-top: 25px"></text>
<text style="font-size: 18px; margin-top: 15px; font-weight: 600" show="{{Show20UserLimit}}">
{{ $t("dmlist.userCountLimit") }}
</text>
<text style="margin-top: 25px"></text>
</scroll>
</div>
</template>
@@ -37,12 +39,12 @@ export default {
private: {
sessions: [],
session_cards: {},
show_dmlist: false,
Show20UserLimit: false,
anims: {
show_loading: false
}
},
scrclass: ""
},
LongPressHandle(id) {
if (global.settings.SETTINGS.pinnedDMUsers.includes(id)) {
+3 -2
View File
@@ -5,7 +5,7 @@
<div class="page">
<image style="position: absolute; margin-top: 233px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}">
</image>
<scroll class="scroll" scroll-y="true" id="mainscroll" bounces="true">
<scroll class="scroll {{scrclass}}" scroll-y="true" id="mainscroll" bounces="true">
<div for="{{messages}}">
<div class="targetmsg-container" if="{{$item.receiver_id == myId}}">
<div class="targetmsg"
@@ -86,7 +86,8 @@ export default {
anims: {
show_loading: false
},
input_text: ""
input_text: "",
scrclass: ""
},
async SendMsg() {
// 发送消息
+35 -32
View File
@@ -2,42 +2,44 @@
<template>
<div class="page">
<title-bar title="messages.title"></title-bar>
<div class="featurebox" @click="ShowOnPhoneTips()">
<div class="boxline" style="margin-top: 20px">
<div class="feature" style="margin-left: 17px">
<image class="featureimg" src="/common/messages_replyme.png"></image>
<text class="featuretext">{{ $t("messages.replyMe") }}</text>
<div class="bubble" if="{{data.recv_reply}}">
<text class="bubble_text">{{data.recv_reply}}</text>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="messages.title"></title-bar>
<div class="featurebox" @click="ShowOnPhoneTips()">
<div class="boxline" style="margin-top: 20px">
<div class="feature" style="margin-left: 17px">
<image class="featureimg" src="/common/messages_replyme.png"></image>
<text class="featuretext">{{ $t("messages.replyMe") }}</text>
<div class="bubble" if="{{data.recv_reply}}">
<text class="bubble_text">{{data.recv_reply}}</text>
</div>
</div>
<div class="feature" style="margin-left: 73px">
<image class="featureimg" src="/common/messages_like.png"></image>
<text class="featuretext">{{ $t("messages.recvLike") }}</text>
<div class="bubble" if="{{data.recv_like}}">
<text class="bubble_text">{{data.recv_like}}</text>
</div>
</div>
</div>
<div class="feature" style="margin-left: 73px">
<image class="featureimg" src="/common/messages_like.png"></image>
<text class="featuretext">{{ $t("messages.recvLike") }}</text>
<div class="bubble" if="{{data.recv_like}}">
<text class="bubble_text">{{data.recv_like}}</text>
<div class="boxline" style="margin-top: 15px">
<div class="feature" style="margin-left: 30px">
<image class="featureimg" src="/common/messages_atme.png"></image>
<text class="featuretext">{{ $t("messages.atMe") }}</text>
<div class="bubble" if="{{data.at}}">
<text class="bubble_text">{{data.at}}</text>
</div>
</div>
<div class="feature" style="margin-left: 88px">
<image class="featureimg" src="/common/messages_sound.png"></image>
<text class="featuretext">{{ $t("messages.systemNotification") }}</text>
<div class="bubble" if="{{data.sys_msg}}">
<text class="bubble_text">{{data.sys_msg}}</text>
</div>
</div>
</div>
</div>
<div class="boxline" style="margin-top: 15px">
<div class="feature" style="margin-left: 30px">
<image class="featureimg" src="/common/messages_atme.png"></image>
<text class="featuretext">{{ $t("messages.atMe") }}</text>
<div class="bubble" if="{{data.at}}">
<text class="bubble_text">{{data.at}}</text>
</div>
</div>
<div class="feature" style="margin-left: 88px">
<image class="featureimg" src="/common/messages_sound.png"></image>
<text class="featuretext">{{ $t("messages.systemNotification") }}</text>
<div class="bubble" if="{{data.sys_msg}}">
<text class="bubble_text">{{data.sys_msg}}</text>
</div>
</div>
</div>
</div>
<image src="/common/dm_icon.png" style="position: absolute; bottom: 0px" @click="GoDM()"></image>
<image src="/common/dm_icon.png" style="position: absolute; bottom: 0px" @click="GoDM()"></image>
</scroll>
</div>
</template>
@@ -46,7 +48,8 @@ import prompt from "@system.prompt"
import router from "@system.router"
export default {
private: {
data: {}
data: {},
scrclass: ""
},
async LoadNotify(){
this.data = await global.biliclient.getMessageNotifyFeed()
+12 -9
View File
@@ -8,15 +8,17 @@
<template>
<div class="page">
<title-bar title="{{titletext}}"></title-bar>
<image style="position: absolute; margin-top: 245px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}"></image>
<list class="replylist">
<list-item type="replies"
style="width: 100%; justify-content: center; margin-top: 10px; height: {{PlaceHolderShowCheck($item.rpid)}}"
for="{{replies}}">
<reply secmode={{secmode}} reply="{{$item}}" @show-tools="ShowTools" @reply="Reply"></reply>
</list-item>
</list>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="{{titletext}}"></title-bar>
<image style="position: absolute; margin-top: 245px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}"></image>
<list class="replylist">
<list-item type="replies"
style="width: 100%; justify-content: center; margin-top: 10px; height: {{PlaceHolderShowCheck($item.rpid)}}"
for="{{replies}}">
<reply secmode={{secmode}} reply="{{$item}}" @show-tools="ShowTools" @reply="Reply"></reply>
</list-item>
</list>
</scroll>
<floating-page-changer current_pn="{{current_pn}}" @backpn="BackPN" @nextpn="NextPN"></floating-page-changer>
<full-screen-input if="{{replymode}}" @send="SendReply" @exit="ExitInput"></full-screen-input>
</div>
@@ -46,6 +48,7 @@ export default {
},
replymode: false,
reply_target: null,
scrclass: ""
},
async SendReply(evt) {
this.replymode = false
+20 -17
View File
@@ -2,25 +2,27 @@
<template>
<div class="page">
<title-bar title="replytools.title"></title-bar>
<div class="toolbtn" style="margin-top: 30px" @click="LikeReply()">
<div class="dataicon" style="margin-left: 25px">
<image class="toolicon" src="/common/replytools_like.png"></image>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="replytools.title"></title-bar>
<div class="toolbtn" style="margin-top: 30px" @click="LikeReply()">
<div class="dataicon" style="margin-left: 25px">
<image class="toolicon" src="/common/replytools_like.png"></image>
</div>
<text class="toolname" style="margin-left: 92px; position: absolute">{{ $t("replytools.like") }}</text>
</div>
<text class="toolname" style="margin-left: 92px; position: absolute">{{ $t("replytools.like") }}</text>
</div>
<div class="toolbtn" style="margin-top: 10px" @click="ShowSecReplies()">
<div class="dataicon" style="margin-left: 25px">
<image class="toolicon" src="/common/replytools_showreplies.png"></image>
<div class="toolbtn" style="margin-top: 10px" @click="ShowSecReplies()">
<div class="dataicon" style="margin-left: 25px">
<image class="toolicon" src="/common/replytools_showreplies.png"></image>
</div>
<text class="toolname" style="margin-left: 92px; position: absolute">{{ $t("replytools.showReply") }}</text>
</div>
<text class="toolname" style="margin-left: 92px; position: absolute">{{ $t("replytools.showReply") }}</text>
</div>
<div class="toolbtn" style="margin-top: 10px" @click="ShowDetail()">
<div class="dataicon" style="margin-left: 25px">
<image class="toolicon" src="/common/replytools_showdetail.png"></image>
<div class="toolbtn" style="margin-top: 10px" @click="ShowDetail()">
<div class="dataicon" style="margin-left: 25px">
<image class="toolicon" src="/common/replytools_showdetail.png"></image>
</div>
<text class="toolname" style="margin-left: 92px; position: absolute">{{ $t("replytools.showDetail") }}</text>
</div>
<text class="toolname" style="margin-left: 92px; position: absolute">{{ $t("replytools.showDetail") }}</text>
</div>
</scroll>
</div>
</template>
@@ -35,7 +37,8 @@ export default {
},
private: {
replymessage: "",
reply_clone: null
reply_clone: null,
scrclass: ""
},
async LikeReply() {
var result = await global.biliclient.LikeReply(
+2 -1
View File
@@ -4,7 +4,7 @@
<template>
<div class="page">
<image style="position: absolute; left: 0px" src="{{getBgImg}}"></image>
<scroll class="scroll" scroll-y="true">
<scroll class="scroll {{scrclass}}" scroll-y="true">
<switch-bar title="search.title" static></switch-bar>
<div class="searchbtn" @click="OpenInput">
<image src="/common/searchpage_search.png" style="margin-left: 25px" static></image>
@@ -35,6 +35,7 @@ export default {
anims: {
show_loading: false
},
scrclass: ""
},
computed: {
getBgImg(){
@@ -6,7 +6,7 @@
<template>
<div class="page">
<image style="position: absolute; left: 0px" src="{{getBgImg}}"></image>
<scroll scroll-y="true" class="scroll" bounces="true">
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<switch-bar title="searchresult.title" if="{{!overview_mode}}"></switch-bar>
<div class="searchbar" if="{{!overview_mode}}" @click="SearchBarClick">
<image src="/common/searchpage_search.png" style="margin-left: 16px"></image>
@@ -98,7 +98,8 @@ export default {
},
anims: {
show_loading: false
}
},
scrclass: ""
},
public: {
keyword: ""
@@ -3,7 +3,7 @@
<template>
<div class="page">
<text style="margin-top: 233px" if="ShowBigPictureTips">{{ $t("picturedetail.bigImageTip") }}</text>
<scroll class="scroll" scroll-x="true" scroll-y="true" @scroll="onScroll" bounces="true" id="scroll">
<scroll class="scroll {{scrclass}}" scroll-x="true" scroll-y="true" @scroll="onScroll" bounces="true" id="scroll">
<div style="{{container_style}}">
<image style="{{img_style}}" src="{{img_uri}}" id="img"></image>
</div>
@@ -38,7 +38,8 @@ export default {
},
show_toolbar: false,
initialSliderValue: 100,
deviceInfo: null
deviceInfo: null,
scrclass: ""
},
calculateImagePosition(imageWidth, imageHeight) {
const x = (this.deviceInfo.screenWidth - imageWidth) / 2;
+10 -5
View File
@@ -2,11 +2,13 @@
<template>
<div class="page">
<title-bar title={{titletext}}></title-bar>
<div class="textbg">
<text class="text">{{text}}</text>
</div>
<text style="margin-top: 25px"></text>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title={{titletext}}></title-bar>
<div class="textbg">
<text class="text">{{text}}</text>
</div>
<text style="margin-top: 25px"></text>
</scroll>
</div>
</template>
@@ -15,6 +17,9 @@ export default {
public: {
text: "你说的对,确实是这样的。但是《原神》是由米哈游自主研发的一款全新开放世界冒险游戏。游戏发生在一个被称作「提瓦特」的幻想世界,在这里,被神选中的人将被授予「神之眼」,导引元素之力。你将扮演一位名为「旅行者」的神秘角色,在自由的旅行中邂逅性格各异、能力独特的同伴们,和他们一起击败强敌,找回失散的亲人——同时,逐步发掘「原神」的真相。",
titletext: "详情"
},
private: {
scrclass: ""
}
}
</script>
+27 -24
View File
@@ -5,33 +5,35 @@
<template>
<div class="page">
<title-bar title="user.title"></title-bar>
<user-info account-info="{{user}}" if="{{loaded}}"></user-info>
<div class="ctxcard" style="margin-top: 25px" if="{{loaded}}" @click="GoUserVideos">
<div class="ctxdesc">
<div style="width: 290px;">
<text class="desctxt">{{ $t("user.videos") }}</text>
<text class="desctxt gs" style="margin-left: 15px">{{navnum.video}}</text>
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="user.title"></title-bar>
<user-info account-info="{{user}}" if="{{loaded}}"></user-info>
<div class="ctxcard" style="margin-top: 25px" if="{{loaded}}" @click="GoUserVideos">
<div class="ctxdesc">
<div style="width: 290px;">
<text class="desctxt">{{ $t("user.videos") }}</text>
<text class="desctxt gs" style="margin-left: 15px">{{navnum.video}}</text>
</div>
<text class="desctxt gs">></text>
</div>
<text class="desctxt gs">></text>
<scroll class="mp-scroll" scroll-x="true">
<div if="{{masterpiece.length > 0}}" class="mp">
<online-image for="{{masterpiece}}" src="{{$item.pic}}@90h" style="padding-right: 10px"></online-image>
</div>
</scroll>
</div>
<scroll class="mp-scroll" scroll-x="true">
<div if="{{masterpiece.length > 0}}" class="mp">
<online-image for="{{masterpiece}}" src="{{$item.pic}}@90h" style="padding-right: 10px"></online-image>
<div class="ctxcard" style="margin-top: 10px" if="{{loaded}}" @click="WIPTips">
<div class="ctxdesc">
<div style="width: 290px;">
<text class="desctxt">{{ $t("user.dynamices") }}</text>
<text class="desctxt gs" style="margin-left: 15px">{{dynamiclist.items.length}}+</text>
</div>
<text class="desctxt gs">></text>
</div>
</scroll>
</div>
<div class="ctxcard" style="margin-top: 10px" if="{{loaded}}" @click="WIPTips">
<div class="ctxdesc">
<div style="width: 290px;">
<text class="desctxt">{{ $t("user.dynamices") }}</text>
<text class="desctxt gs" style="margin-left: 15px">{{dynamiclist.items.length}}+</text>
</div>
<text class="desctxt gs">></text>
</div>
</div>
<default-button @click="GoDMPage" if="{{loaded}}" margin-top="25px" primary="true" text="user.senddm"></default-button>
<text style="margin-top: 30px"></text>
<default-button @click="GoDMPage" if="{{loaded}}" margin-top="25px" primary="true" text="user.senddm"></default-button>
<text style="margin-top: 30px"></text>
</scroll>
<image style="position: absolute; margin-top: 245px" if="{{anims.show_loading}}" src="{{anims.loading_src.value}}"></image>
</div>
</template>
@@ -53,7 +55,8 @@ export default {
anims: {
show_loading: false
},
loaded: false
loaded: false,
scrclass: ""
},
async LoadUserInfo(){
this.anims.loading.start()
+3 -2
View File
@@ -7,7 +7,7 @@
<template>
<div class="page">
<scroll class="scroll" scroll-y="true">
<scroll class="scroll {{scrclass}}" scroll-y="true">
<title-bar title="user.uservideos.title"></title-bar>
<div style="flex-direction: column; width: 77%">
<videoshow if="{{!anims.show_loading}}" for="{{vids.list.vlist}}" bvid="{{$item.bvid}}"></videoshow>
@@ -32,7 +32,8 @@ export default {
maxpn: 1,
anims: {
show_loading: false
}
},
scrclass: ""
},
BackPN() {
if (this.current_pn > 1) {
+3 -2
View File
@@ -5,7 +5,7 @@
<template>
<div class="page">
<scroll scroll-y="true" class="scroll" bounces="true">
<scroll scroll-y="true" class="scroll {{scrclass}}" bounces="true">
<title-bar title="video.title"></title-bar>
<online-image if="{{renderingCover}}" src="{{vid.pic}}@319w_150h" margin-top="30px" lock-size="true" width="320px"
height="150px" loading-anim="true" @loaded="GenBlur"></online-image>
@@ -72,7 +72,8 @@ export default {
coinsrc: "/common/vidtool_coin.png",
starsrc: "/common/vidtool_star.png",
replymode: false,
renderingCover: false
renderingCover: false,
scrclass: ""
},
computed: {
stat_view() {
+55
View File
@@ -0,0 +1,55 @@
import { router } from "../tsimports"
class GlobalActions {
static AddToVmPool(vm){
global.vmPool[vm._name] = vm
}
static ClearCurrentVmSrcClass() {
global.vmPool[global.currentPageName].scrclass = ""
}
}
function runVmPoolGC(){
for(var name in global.vmPool){
if(global.vmPool[name]){
if(global.vmPool[name].$valid){
return
}
}
global.logger.log("[ui.VmPoolGC] page named", name, " has been already destroyed.")
delete global.vmPool[name]
}
}
export function Init(){
global.vmPool = {}
global.currentPageName = ""
global.logger.log("[ui.InitPage] inited.")
setInterval(() => {
runVmPoolGC()
}, 10000)
}
export function InitPage(vm){
global.currentPageName = vm._name
GlobalActions.AddToVmPool(vm)
GlobalActions.ClearCurrentVmSrcClass()
global.logger.log("[ui.InitPage] vm set successed. name=", global.currentPageName)
}
export function OnBackPressTriggered(){
global.vmPool[global.currentPageName].scrclass = "scroll-backanim"
setTimeout(() => {
GlobalActions.ClearCurrentVmSrcClass()
router.back()
var pageStack = router.getPages()
var lastPageName = pageStack[pageStack.length - 2].name
global.logger.log("lastpage=", lastPageName, "currentPage=", global.currentPageName)
global.vmPool[lastPageName].scrclass = ""
global.vmPool[lastPageName].scrclass = "scroll-frombackanim"
}, 300)
}