微信小程序canvas内使用获取view元素宽高位置错

模拟器和手机都不一样。模拟器上,正常,手机上canvas内容都往右偏移了,反复实验发现:我canvas的宽高是获取的父级元素的宽高

  • 1.获取view宽高的方法
<view class="abc"></view>
getCanvasWH(){
    let info = uni.createSelectorQuery().in(this).select(".abc");
    info.boundingClientRect(function(data) { 
          console.log(data.width)
          console.log(data.height)
    }).exec(function(res){
	  // 注意:exec方法必须执行,哪怕什么也不做,否则会获取不到数据
    })
}
  • 2.产生问题的原因为view宽高获取的不对,必须在onReady参数后获取,才能避免不准确或获取不到的情况
onReady (){
    this.getCanvasWH()
},
  • 3.因为我的canvas是放在uniapp的uni-popup所以我在获取的时候加了一个延时函数
getCanvasWH(callback){
   setTimeout(()=>{
        let info = uni.createSelectorQuery().in(this).select(".abc");
        info.boundingClientRect(function(data) { 
            console.log(data.width)
            console.log(data.height)
            callback(data.width,data.height)
        }).exec(function(res){
	    // 注意:exec方法必须执行,哪怕什么也不做,否则会获取不到数据
        })
    })
}

通过getCanvasWH的callback可以拿到宽高给canvas用

this.getCanvasWH((width,height)=>{
    // 在这里写canvas代码,width,height代过来了
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值