根目录创建store文件夹,文件夹中创建index.js,内容为
import { createStore } from 'vuex'
const store = createStore({
state:{//存放状态
"scaleFontSize":16
},
mutations:{
setFontScale(state,n){
state.scaleFontSize=n
}
}
})
export default store
创建一个页面设置文字大小
<view class="font">
<view class="title">{{$t('index.font')}}</view>
<view class="font-list">
<view class="font-item" v-for="(item, index) in fontSize" :key="index" @click="onFontSizeChange(item)">
<text class="text">{{item.text}}</text>
<text class="check" v-if="item.code==fontScale">{{$t('font.check')}}</text>
</view>
</view>
</view>
js为
export default {
data() {
return {
fontScale: 16
}
},
computed:{
fontSize(){
return[
{
text: this.$t('font.small'),
code:12
},
{
text: this.$t('font.standard'),
code:16
},
{
text: this.$t('font.big'),
code:20
},
{
text: this.$t('font.biggest'),
code:24
}
]
}
},
onLoad() {
this.fontScale=this.$store.state.scaleFontSize
if(!this.fontScale) {
this.fontScale = 16;
}
console.log(this.$store.state.scaleFontSize)
},
methods: {
onFontSizeChange(e){
this.fontScale = e.code;
this.$store.commit('setFontScale', this.fontScale);
uni.setStorage({
key:'rootFontSize',
data:this.fontScale
})
}
}
}
通过该页面动态更新scaleFontSize的大小,在文件所有页面中,均添加
<page-meta :page-font-size="`${$store.state.scaleFontSize}px`" :root-font-size="`${$store.state.scaleFontSize}px`"></page-meta>
并将页面中文字大小单位设置为rem
1 个回复
3***@qq.com - Benjen
在 setup 中 setTimeout 一下可以解决这个问题,一般设置 200 ms 即可