uniapp实现全局设置字体大小(字体大小切换)

本文介绍了如何在基于VueCLI的uni-app项目中,通过postcss-px-to-viewport插件将px转换为rem,以及如何存储和动态设置全局字体大小。开发者需在配置文件中设置转换规则,并利用vuex管理全局字体值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图

实现步骤

1.安装配置postcss-px-to-viewpor

 npm install postcss-px-to-viewport --save-dev

2.根目录下创建一个 postcss.config.js文件,文件内容如下:

const path = require('path')
module.exports = {
  parser: 'postcss-comment',
  plugins: {
    'postcss-import': {
      resolve(id, basedir, importOptions) {
        if (id.startsWith('~@/')) {
          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3))
        } else if (id.startsWith('@/')) {
          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2))
        } else if (id.startsWith('/') && !id.startsWith('//')) {
          return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1))
        }
        return id
      }
    },
    'autoprefixer': {
      overrideBrowserslist: ["Android >= 4", "ios >= 8"],
      remove: process.env.UNI_PLATFORM !== 'h5'
    },
    // 借助postcss-px-to-viewport插件,实现px转rem,文档:https://github.com/evrone/postcss-px-to-viewport/blob/master/README_CN.md
    // 以下配置,可以将px转换为rem,如果要调整比例,可以调整 viewportWidth 来实现
    'postcss-px-to-viewport': {
      unitToConvert: 'rpx', // 需要转换的单位。我这里是rpx,如果你的项目都是用的px,就改成px
      viewportWidth: 750,// 密度,一般为750 || 375。这里可以自己修改
      unitPrecision: 2,
      propList: ['font-size'],
      // viewportUnit: "rem", // 指定需要转换成的视窗单位,默认vw
      fontViewportUnit: 'rem', // 字体需要转成的单位,只针对 font-size 属性
      selectorBlackList: [],
      minPixelValue: 1,
      mediaQuery: false,
      replace: true,
      exclude: undefined,
      include: undefined,
      landscape: false
    },
    '@dcloudio/vue-cli-plugin-uni/packages/postcss': {}
  }
}

3,把设置得字体大小数据放到缓存里

uni.setStorageSync("fontSize", this.fontValue)

4利用滑块,设置font-size的值。点击确定后,要把所设置的值写入缓存里

<template>
    <page-meta :page-font-size="fontValue+'px'" :root-font-size="fontValue+'px'"></page-meta>
    <view class="content">
        <view>
            <view class="fontchange">文字大小</view>
        </view>
        <view style="width:100%;padding: 0 10px;">
            <slider
                :min="3"
                :max="5"
                :value="fontValue"
                @change="sliderChange"
                :step="0.5"
            />
            <view class="change-fontsize-box">
                <text style="font-size: 12px;">
                    最小
                </text>
                <text style="font-size: 14px;">
                    标准
                </text>
                <text style="font-size: 16px;">
                    最大
                </text>
            </view>
        </view>
        <view style="padding: 20px 10px;width: 100%;">
            <u-button type="primary" @click="submit">确定</u-button>
        </view>
    </view>
</template>
<script>
export default {
    data() {
        return {
            fontValue: 4,
        };
    },
    onShow() {
        uni.getStorageSync('fontSize')?this.fontValue=uni.getStorageSync('fontSize'):this.fontValue=4
    },
    methods: {
        sliderChange(e) {
            this.fontValue = e.detail.value;
        },
        submit() {
            uni.setStorageSync("fontSize", this.fontValue);
            uni.showToast({
                title: '设置成功',
                icon:'none',
                duration: 1500
            });
            console.log(uni.getStorageSync('fontSize'));
        },
    },
};
</script>
<style>
.fontchange {
    font-size: 26rpx;
    margin: 20px 0;
}
.content {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 100%;
    padding: 5px;
    box-sizing: border-box;
}
.change-fontsize-box{
    margin: 10px 18px;
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
}
</style>

5.在需要用到的页面加上page-meta。如果是全局修改,就需要全部页面都加上这

<template>

    <page-meta :page-font-size="vuex_fontsize+'px'" :root-font-size="vuex_fontsize+'px'"></page-meta>

    <view>

        ...

    </view>

</template>

要在UniApp实现自定义放大缩小功能,你可以按照以下步骤进行操作。 1. 首先,在你的页面中添加一个div元素,并为其设置一个样式类,比如"el-header"。这个div将作为你的放大缩小按钮的容器。 [1] 2. 在该div元素中,添加具体的放大缩小按钮,并为每个按钮设置相应的样式和点击事件。你可以使用图标字体或者自定义图标作为按钮的内容。比如,你可以使用i元素,并为其设置一个样式类,比如"el-icon-minus",并为其添加一个点击事件处理函数,比如"setFrame('window-min')"。同样的,你可以为其他按钮添加相应的样式和点击事件。 [2] 3. 在实现点击事件处理函数时,你可以根据情况调用相应的方法来实现放大缩小功能。具体的方法实现可以根据你的需求进行编写,比如修改页面布局或者调整页面缩放比例等等。你可以自定义方法名,并在方法中实现相应的逻辑。 [3] 通过以上步骤,你就可以在UniApp实现自定义的放大缩小功能了。记得在你的代码中引入相应的样式和图片资源,以及在合适的位置调用相关的方法即可。希望对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Electron # 自定义标题栏(缩小、放大、关闭)](https://blog.csdn.net/qq_33583069/article/details/107217469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [uniapp 扫码原生插件 - 新版(支持连续扫码模式;支持设置格式;可任意自定义界面)Ba-Scanner](https://blog.csdn.net/u013164293/article/details/127122203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矽东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值