| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <template>
- <!-- #ifdef APP -->
- <scroll-view
- :style="{ flex: 1 }"
- :scroll-top="scrollViewTop"
- :scroll-with-animation="true"
- @scroll="onScroll"
- >
- <cl-back-top v-if="backTop"></cl-back-top>
- <theme></theme>
- <ui></ui>
- <slot></slot>
- </scroll-view>
- <!-- #endif -->
- <!-- #ifndef APP -->
- <cl-back-top v-if="backTop"></cl-back-top>
- <theme></theme>
- <ui></ui>
- <slot></slot>
- <!-- #endif -->
- </template>
- <script setup lang="ts">
- import { computed, onMounted, ref, watch } from "vue";
- import Theme from "./theme.uvue";
- import Ui from "./ui.uvue";
- import { locale, t } from "@/locale";
- import { config } from "@/config";
- import { router, scroller } from "@/cool";
- defineOptions({
- name: "cl-page"
- });
- defineProps({
- // 是否显示回到顶部按钮
- backTop: {
- type: Boolean,
- default: config.backTop
- }
- });
- // 滚动距离
- const scrollTop = ref(0);
- // scroll-view 滚动位置
- const scrollViewTop = ref(0);
- // view 滚动事件
- function onScroll(e: UniScrollEvent) {
- // 触发滚动事件
- scroller.emit(e.detail.scrollTop);
- }
- // 页面滚动事件
- scroller.on((top) => {
- scrollTop.value = top;
- });
- // 滚动到指定位置
- function scrollTo(top: number) {
- // #ifdef H5
- window.scrollTo({ top, behavior: "smooth" });
- // #endif
- // #ifdef MP
- uni.pageScrollTo({
- scrollTop: top,
- duration: 300
- });
- // #endif
- // #ifdef APP
- scrollViewTop.value = top;
- // #endif
- }
- // 回到顶部
- function scrollToTop() {
- scrollTo(0 + Math.random() / 1000);
- }
- onMounted(() => {
- // 标题多语言
- // #ifdef H5 || APP
- watch(
- computed(() => locale.value),
- () => {
- const style = router.route()?.style;
- if (style != null) {
- if (style.navigationBarTitleText != null) {
- uni.setNavigationBarTitle({
- title: t((style.navigationBarTitleText as string).replaceAll("%", ""))
- });
- }
- }
- },
- {
- immediate: true
- }
- );
- // #endif
- });
- defineExpose({
- scrollTop,
- scrollTo,
- scrollToTop
- });
- </script>
|