qidao123.com技术社区-IT企服评测·应用市场

标题: 屏幕适配方案——详细完备版 [打印本页]

作者: 立聪堂德州十三局店    时间: 2024-9-6 07:28
标题: 屏幕适配方案——详细完备版
实用框架:Vue2/Vue3
实用设备:pc端/移动端
适配计谋:动态rem+动态scale
方案效果:可让页面在不同屏幕下、放大缩小时保持页面不变形
  效果示例:
   当屏幕变化时:

    当放大缩小时

  安装屏幕适配插件
  1. npm i screen-adapter-plugin
复制代码
适配写法(推荐):

typescript注解:
  1. // px函数注解,可转换为rem,或在第二个入参传入true,获得动态number类型的px
  2. type PX = (px: number, real: boolean) => string | number
  3. // Vue.use时传入的options
  4. interface InstallOptions {
  5.         rootValue: number
  6. }
  7. // 插件提供的方法
  8. interface ScreenAdapter {
  9.         rootFontSize: number // 根元素上动态的font-size
  10.         init(): void         // Vue.use时会自动调用,初始化适配策略
  11.         destroy(): void      // 销毁适配策略
  12.         getScale(): number      // 获得v-scale被放大缩小的倍数
  13.         addListener(callback: Function): void    // 添加屏幕变化时的监听函数
  14.         removeListener(callback: Function): void // 移除屏幕变化时的监听函数
  15.         px: PX
  16. }
复制代码
项目设置
  1. // index.html (防止h5端用户手动放大缩小)
  2. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=no;" />
  3. // package.json 安装postcss-plugin-px2rem
  4. "devDependencies": {
  5.   "postcss-plugin-px2rem": "^0.8.1",   
  6. }
  7. // 配置px2rem
  8. // postcss.config.js 写法
  9. module.exports = {
  10.     plugins: {
  11.     'postcss-plugin-px2rem': {
  12.       rootValue: 192, // 设计稿宽度 / 10
  13.       propList: ["*"],
  14.       unitPrecision: 5,
  15.       selectorBlackList: [/.norem-.*/], // 开头为.norem-的class的大括号范围内所有样式不会被转为rem
  16.       ignoreIdentifier: false,
  17.       replace: true,
  18.       mediaQuery: false,
  19.     },
  20.   },
  21. }
  22. // 或者vite.config.js 写法
  23. export default defineConfig({
  24.     css: {
  25.       postcss: {
  26.        plugins: [
  27.         px2rem({
  28.           rootValue: 192, // 设计稿宽度 / 10
  29.           propList: ["*"],
  30.           unitPrecision: 5,
  31.           selectorBlackList: [/.norem-.*/], // 开头为.norem-的class的大括号范围内所有样式不会被转为rem
  32.           ignoreIdentifier: false,
  33.           replace: true,
  34.           mediaQuery: false,
  35.         }),
  36.       ]
  37.     }
  38.   },
  39. })
  40.   
  41.   
  42. // main.js
  43. import screenAdapter from 'screen-adapter-plugin'
  44. Vue.use(screenAdapter, {rootValue: 192}) // 挂载screenAdapter类,传入跟px2rem插件一致的rootValue
  45. // 调用方式
  46. window.screenAdapter
  47. this.screenAdapter
  48. this.px(_,?_)
  49. // 自定义指令使用方式
  50. v-scale
  51. v-scale="handlerAdaptScale"
复制代码
常见问题

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4