最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

手把手教你寫一個(gè)uniapp通用頁面組件

 更新時(shí)間:2022年12月15日 16:05:11   作者:我的代碼果然有問題  
uniapp中每個(gè)頁面可以理解為一個(gè)單頁面組件,下面這篇文章主要給大家介紹了關(guān)于如何寫一個(gè)uniapp通用頁面組件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

做移動(dòng)端項(xiàng)目時(shí)為了兼容各種手機(jī)型號(hào)的界面,最好有一個(gè)統(tǒng)一的頁面組件對(duì)樣式做統(tǒng)一處理,例如:判斷是否顯示狀態(tài)欄,是否顯示頭部導(dǎo)航,是否空出底部區(qū)域等等,本篇會(huì)帶大家從零到一開發(fā)一個(gè) uniapp 的通用頁面組件

需求

本次開發(fā)的頁面,組件,需要完成以下功能

  • 可配置控制是否顯示原生導(dǎo)航,顯示狀態(tài)欄,并且也可以控制狀態(tài)欄顏色
  • 可配置控制是否留出底部固定區(qū)域

開發(fā)

初始化頁面數(shù)據(jù)

  • 編寫頁面組件類,獲取系統(tǒng)配置,初始化樣式數(shù)據(jù)
class Page {
  constructor() {
    this.system = uni.getSystemInfoSync()
?
    this.init()
  }
  
  init = () => {
    console.log(this.system);
  }
}
?
export default Page
  • 頁面組件基本結(jié)構(gòu)
<template>
  <view class="sf-page" :class="theme">
    <!-- 頁面頭部 -->
    <template v-if="customHeader">
      <view class="sf-page-header">
        <!-- 頭部核心 -->
        <slot name="header"></slot>
      </view>
    </template>
    <!-- 頁面主體 -->
    <view class="sf-page-body">
      <slot name="body"></slot>
    </view>
    <!-- 頁面底部 -->
    <template v-if="customFooter">
      <view class="sf-page-footer">
        <slot name="footer"></slot>
      </view>
    </template>
  </view>
</template>
?
<script setup>
  import {
    computed, toRefs
  } from "vue"
  import Page from './class/page.js'
?
  const props = defineProps({
    customHeader: {
      type: Boolean,
      default: false
    },
    customFooter: {
      type: Boolean,
      default: false
    },
  })
?
  const page = new Page()
?
  const theme = computed(() => {
    return uni.$theme.get()
  })
</script>
?
<style>
  .sf-page {
    min-height: 100vh;
    width: 100%;
  }
  .sf-page-header {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    background-color: #ffffff;
    z-index: 99;
  }
  .sf-page-body {
?
  }
  .sf-page-footer {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: #ffffff;
    z-index: 99;
  }
</style>

實(shí)現(xiàn)狀態(tài)欄與底部配置

  • 通過系統(tǒng)api,獲取系統(tǒng)狀態(tài)欄高度
import { ref } from 'vue'
?
class Page {
  constructor() {
    this.system = uni.getSystemInfoSync()
    this.statusBarHeight = 0
    this.headerHeight = 45
    this.footerHeight = 45
    
    this.init()
  }
  
  init = () => {
    this.statusBarHeight = this.system.statusBarHeight
  }
}
?
export default Page
  • 頁面組件配置
<template>
  <view class="sf-page" :class="theme">
    <!-- 頁面頭部 -->
    <template v-if="customHeader">
      <view class="sf-page-header">
        <!-- 沉浸式狀態(tài)欄 -->
        <view :style="{ height: statusBarHeight + 'px', background: statusBarBG }"></view>
        <!-- 頭部核心 -->
        <view :style="{ height: headerHeight + 'px' }">
          <slot name="header"></slot>
        </view>
      </view>
      <!-- 占位 -->
      <view :style="{ height: statusBarHeight + headerHeight + 'px' }"></view>
    </template>
    <!-- 頁面主體 -->
    <view class="sf-page-body">
      <slot name="body"></slot>
    </view>
    <!-- 頁面底部 -->
    <template v-if="customFooter">
      <view class="sf-page-footer">
        <slot name="footer"></slot>
      </view>
    </template>
  </view>
</template>
?
<script setup>
  import {
    computed, toRefs
  } from "vue"
  import Page from './class/page.js'
?
  const props = defineProps({
    customHeader: {
      type: Boolean,
      default: false
    },
    customFooter: {
      type: Boolean,
      default: false
    },
    statusBarBG: {
      type: String,
      default: 'none'
    }
  })
?
  const page = new Page()
  const { headerHeight, statusBarHeight, footerHeight } = toRefs(page)
?
  const theme = computed(() => {
    return uni.$theme.get()
  })
  
</script>

頁面組件實(shí)例化Page 對(duì)象,這里注意解構(gòu)高度屬性時(shí),需要使用toRefs 實(shí)現(xiàn)響應(yīng)式, 這樣,即可通過 customHeader,customFooter 控制相應(yīng)區(qū)域是否顯示,并且根據(jù)設(shè)置的 height 來控制對(duì)應(yīng)區(qū)域的高度, 也可通過 statusBarBG 控制狀態(tài)欄的顏色

  <sf-page :customHeader="true" :customFooter="false" statusBarBG="#333333">
  </sf-page>

頁面使用

  <sf-page :customHeader="true" :customFooter="true" statusBarBG="#333333">
    <template v-slot:header>
      <view class="">
        // ... 導(dǎo)航
      </view>
    </template>
    <template v-slot:body>
      <view class="main">
        // ... 內(nèi)容
      </view>
    </template>
    <template v-slot:footer>
      <view class="">
        // ... 底部操作
      </view>
    </template>
  </sf-page>

這樣,就可以根據(jù)設(shè)計(jì)稿的需要,動(dòng)態(tài)的控制是否顯示頭部導(dǎo)航或底部操作區(qū)域啦

總結(jié)

到此這篇寫一個(gè)uniapp通用頁面組件的文章就介紹到這了,更多相關(guān)uniapp通用頁面組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javascript 鍵盤keyCode鍵碼值表

    Javascript 鍵盤keyCode鍵碼值表

    Javascript 鍵盤keyCode鍵碼值表,需要的朋友可以保存一份。
    2009-12-12
  • 詳解Webpack loader 之 file-loader

    詳解Webpack loader 之 file-loader

    這篇文章主要介紹了詳解Webpack loader 之 file-loader,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • javascript:文字不間斷向左移動(dòng)的實(shí)例代碼

    javascript:文字不間斷向左移動(dòng)的實(shí)例代碼

    這篇文章介紹了javascript:文字不間斷向左移動(dòng)的實(shí)例代碼,有需要的朋友可以參考一下
    2013-08-08
  • Dron右鍵菜單 v1.0

    Dron右鍵菜單 v1.0

    Dron右鍵菜單 v1.0...
    2006-10-10
  • TypeScript使用vscode監(jiān)視代碼編譯的過程

    TypeScript使用vscode監(jiān)視代碼編譯的過程

    這篇文章主要介紹了TypeScript使用vscode監(jiān)視代碼編譯,使用tsc 文件名稱可以將ts文件轉(zhuǎn)化為js文件,js文件可以引入在html文件中直接使用,需要的朋友可以參考下
    2021-12-12
  • 詳細(xì)分析JavaScript中的深淺拷貝

    詳細(xì)分析JavaScript中的深淺拷貝

    這篇文章主要介紹了JavaScript中的深淺拷貝,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-09-09
  • 原生JavaScript實(shí)現(xiàn)頁面滾動(dòng)監(jiān)聽的方法步驟

    原生JavaScript實(shí)現(xiàn)頁面滾動(dòng)監(jiān)聽的方法步驟

    滾動(dòng)監(jiān)聽事件一般網(wǎng)頁中的返回頂部按鈕都是通過滾動(dòng)監(jiān)聽事件來實(shí)現(xiàn)的,本文給大家介紹了原生JavaScript實(shí)現(xiàn)頁面滾動(dòng)監(jiān)聽的方法步驟,文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-03-03
  • 基于KO+BootStrap+MVC實(shí)現(xiàn)的分頁控件代碼分享

    基于KO+BootStrap+MVC實(shí)現(xiàn)的分頁控件代碼分享

    本段js和html兩段代碼實(shí)現(xiàn)分頁控件效果,下面通過本文給大家詳細(xì)介紹下基于KO+BootStrap+MVC實(shí)現(xiàn)的分頁控件,非常不錯(cuò),感興趣的朋友一起看看吧
    2016-11-11
  • 原生js封裝的ajax方法示例

    原生js封裝的ajax方法示例

    這篇文章主要介紹了原生js封裝的ajax方法,結(jié)合實(shí)例形式分析了JavaScript封裝ajax操作及調(diào)用方法相關(guān)操作技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2018-08-08
  • momentjs使用詳細(xì)說明

    momentjs使用詳細(xì)說明

    這篇文章主要介紹了momentjs詳細(xì)使用說明,使用 Moment.js 可以輕松地獲取上周、上月和前三個(gè)月的起始和結(jié)束時(shí)間,在示例中,我們傳入了 '2023-07-15',并將返回的日期信息存儲(chǔ)在 dateInfo 變量中,然后將其打印到控制臺(tái)上,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

嘉义县| 东乌珠穆沁旗| 许昌市| 铜陵市| 许昌市| 建昌县| 福海县| 青州市| 保定市| 山丹县| 岑巩县| 新乡县| 垦利县| 夏津县| 台山市| 梅州市| 沧源| 都江堰市| 星子县| 巴彦淖尔市| 牙克石市| 胶州市| 弥勒县| 若尔盖县| 金川县| 台东县| 张家口市| 梨树县| 吉水县| 永春县| 青铜峡市| 嘉定区| 陵水| 自贡市| 峨眉山市| 临海市| 武定县| 靖安县| 麟游县| 霍邱县| 平利县|