UniApp一句话经验: px -> rpx动态转换和动态元素区域的获取

px->rpx转换

在多终端条件下,什么devicePixelRatio,upx2px都是不靠谱的,最直接的是这样:

TypeScript 复制代码
const { screenWidth } = uni.getSystemInfoSync()

const pixelUnit = screenWidth / 750 // rpx->px比例基数

动态元素区域获取

多终端条件下,这样写兼容性高

TypeScript 复制代码
export const getRect: (
  selector: string,
  selectAll: boolean,
  instance?: any
) => Promise<UniApp.NodeInfo | UniApp.NodeInfo[]> = (selector, selectAll = false, instance) => {
  // 注意非onMount和onReady时需要传入instance,可以通过getCurrentInstance()先获得
  return new Promise<UniApp.NodeInfo | UniApp.NodeInfo[]>((resolve) => {
    const query = instance
      ? uni.createSelectorQuery().in(instance)
      : uni.createSelectorQuery().in(getCurrentInstance())

    const view = selectAll ? query.selectAll(selector) : query.select(selector)
    view
      .fields(
        {
          size: true,
          rect: true,
          scrollOffset: true
        },
        (res) => {
          resolve(res)
        }
      )
      .exec()
  })
}

使用css选择器标记节点:动态节点建议用class,例如:

const rect: UniApp.NodeInfo = await utils.getRect('.square-area')

console.log('rect: ', rect)

注意这里获得的是px,如果要转化为rpx计算请参考前面的方式获取转换比例单位

文章内容太少,被搜索引擎所不齿。简单有用的知识不用繁文缛节

相关推荐
码哥DFS3 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
满栀5853 小时前
vue动态路由效果
前端·javascript·vue.js·前端框架·vue
jjw_zyfx5 小时前
css vue vite实现闪烁的呼吸效果
javascript·css·vue.js
执子念的飞鱼5 小时前
File Viewer 进入 2K 节点后,我更在意这 3 条回归
前端·typescript
mONESY5 小时前
TypeScript 面试高频:type 与 interface 到底怎么选?
typescript
sunly_5 小时前
React useActionState 的用法详解
前端·javascript·react.js
cyadyx6 小时前
【Three.js】Three.js 中加载 3D 模型
前端·javascript·3d
汉堡大王95276 小时前
前端工程师 TypeScript 上手指南:一条清晰的从入门到精通路线
前端·javascript·react.js
wear工程师6 小时前
防抖为什么会失效?React 面试里的闭包和定时器
javascript·react.js
浅水壁虎6 小时前
vue基础(第四章 Pinia)
前端·javascript·vue.js