参考:https://uniapp.dcloud.io/component/page-meta?id=page-meta

module.exports = {
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require(‘postcss-px-to-viewport‘)({
                        unitToConvert: ‘px‘,  // 需要转换的单位,默认为"px"
                        viewportWidth: 750, //  设计稿的视口宽度
                        unitPrecision: 5, // 单位转换后保留的精度
                        propList: [*], // 能转化为vw的属性列表
                        viewportUnit: ‘vw‘, //  希望使用的视口单位
                        fontViewportUnit: ‘vw‘, // 字体使用的视口单位
                        selectorBlackList: [], // 需要忽略的CSS选择器
                        minPixelValue: 1, // 最小的转换数值,如果为1的话,只有大于1的值会被转换
                        mediaQuery: false, // 媒体查询里的单位是否需要转换单位
                        replace: true, // 是否直接更换属性值,而不添加备用属性
                        exclude: /node_modules/, // 忽略某些文件夹下的文件或特定文件
                        include: undefined,  // 如果设置了include,那将只有匹配到的文件才会被转换,例如只转换 ‘src/mobile‘ 下的文件 (include: /\/src\/mobile\//)
                        landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
                        landscapeUnit: ‘vw‘, // 横屏时使用的单位
                        landscapeWidth: 568 // 横屏时使用的视口宽度
                    })
                ]
            }
        }
    }
}

1.base.js

export default {
    created() {
        const self = this;
 
    },
    mounted() {
        const self = this;
    },
    methods: {
        //设置字体
        getRootFontSize(){
            const self = this;
            var fontSize = getApp().globalData.rootFontSize;
            if(fontSize){
                return fontSize;
            }else{
                fontSize = uni.getStorageSync('root_font_size');
                if(fontSize){
                    getApp().globalData.rootFontSize=fontSize;
                }else{
                    fontSize='12px';//默认字体大小
                    self.setRootFontSize(fontSize);
                }
                return fontSize;
            }
        },
        setRootFontSize(fontSize){
            uni.setStorageSync('root_font_size',fontSize);
            getApp().globalData.rootFontSize=fontSize;
        },
 
    }
}

2.page-meta

<page-meta :root-font-size="getRootFontSize()"></page-meta>

3.引入

import base from '@/common/base.js';
	export default {
		extends: base,

4.页面事件

<template>
	<page-meta :root-font-size="getRootFontSize()"></page-meta>
	<view>
		<view class="uni-padding-wrap uni-common-mt" style="margin-top: 50upx;">
			<view class="titleBox">
				<view style="font-size:25upx">A</view>
				<view style="font-size:30upx">标准</view>
				<view style="font-size:35upx">A</view>
				<view style="font-size:40upx">A</view>
			</view>
			
			<view>
				<slider min="10" max="16" :value="fontValue" @change="sliderChange" show-value step="2"/>
			</view>
		</view>
	</view>
</template>
<script>
	import base from '@/common/base.js';
	export default {
		extends: base,
		data() {
			return {
				fontValue:12,
				rootFontSize:'12upx',
				fontStart:uni.getStorageSync('root_font_size') + '',
				fontEnd:uni.getStorageSync('root_font_size') + ''
			}
		},
		onLoad() {
			const self = this;
			//当前字体大小
			self.fontValue = parseInt(self.getRootFontSize().split('px')[0]);
			console.log(self.fontValue )
		},
		methods: {
			sliderChange(e) {
				console.log('value 发生变化:' + e.detail.value)
				const self = this;
				let nowFontSize = e.detail.value + 'px';
				console.log(nowFontSize)
				self.fontEnd = nowFontSize;
				console.log(nowFontSize)
				self.setRootFontSize(nowFontSize);
			},
            //这里设置一个事件,使用uni.reLaunch跳转到某个页面,并关闭所有页面
			/*onNavigationBarButtonTap() {
				uni.reLaunch({
					url:"../tabbar-4"
				})
			}*/
		}
	}
</script>
<style>
	.titleBox{
		width: 80%;
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin: 30upx 0;
		margin-left: 5%;
    }
	
</style>

5.统一单位

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插件,实现rpx转px,文档:https://github.com/evrone/postcss-px-to-viewport/blob/master/README_CN.md
    // 以下配置,可以将rpx转换为1/2的px,如20rpx=10px,如果要调整比例,可以调整 viewportWidth 来实现
    'postcss-px-to-viewport': {
      unitToConvert: 'upx',
      viewportWidth: 200,
      unitPrecision: 5,
      propList: ['*'],
      viewportUnit: 'px',
      fontViewportUnit: 'rem',
      selectorBlackList: [],
      minPixelValue: 1,
      mediaQuery: false,
      replace: true,
      exclude: undefined,
      include: undefined,
      landscape: false
    },
    '@dcloudio/vue-cli-plugin-uni/packages/postcss': {}
  }
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐