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计算请参考前面的方式获取转换比例单位

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

相关推荐
米丘2 分钟前
SSE (server-sent events)
javascript·网络协议
桜吹雪23 分钟前
所有智能体架构(3):Planning(计划任务)
javascript·人工智能·langchain
gCode Teacher 格码致知33 分钟前
Javascript技术:CSS 中rem、vh 和 px各有其最佳适用场景-由Deepseek产生
开发语言·javascript·css
fastjson_1 小时前
Edge浏览器开启IE兼容模式
javascript·edge·html
饼饼饼2 小时前
React19 新手指南:JSX 没那么难,用好这几条规则就够了
前端·javascript·react.js
丷丩2 小时前
MapLibre GL JS第50课:用表达式创建虚线渐变线
javascript·gis·mapbox·maplibre gl js
月光刺眼3 小时前
Bun + TypeScript 后端入门:从类型约束到 LLM API 调用
后端·typescript
石山代码3 小时前
变量与解构
开发语言·前端·javascript
888CC++4 小时前
箭头函数(ES6)
前端·javascript·es6
qq_419854054 小时前
css filter
前端·javascript·css