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

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

相关推荐
excel2 分钟前
Nuxt + Twin CSS 中宽度超过屏幕时底部出现空白的原因与解决方案
前端·javascript
一个游离的指针3 小时前
函数管道:消除深度嵌套调用
前端·javascript
PBitW3 小时前
为什么vite中TS报错,可以继续运行?Webpack不行?
前端·webpack·typescript·vite
柚yuzumi3 小时前
前端优化,从少触发一次开始:防抖与节流
前端·javascript
默_笙4 小时前
🚤 CSS 布局的"圈地运动":BFC 就是浏览器的独立领地
前端·javascript
我爱写代码i4 小时前
AI对话绘画数字人源码 - uniapp前端
前端·人工智能·uni-app
用户938515635074 小时前
大模型记忆指南:从短时缓存到永久记忆,手把手带你吃透 LangChain Memory 管理
javascript·人工智能
ModyQyW4 小时前
vite-plugin-uni-pages 更新了什么
前端·uni-app
xqchen4 小时前
Web Components 普及困境深度解析:技术标准与工程实践的落差
javascript
爱丶不疚5 小时前
写给前端工程师的现代 Python 工程化最佳实践:从 pnpm 到 uv,从 CommonJS 到 src-layout
javascript·python·typescript