• john
    2021-08-21
    请老师指导在小程序编写canvas的尺寸在不同大小手机屏幕变形的问题,谢谢

    作者回复: 好问题。 在小程序中的Canvas,可以通过样式控制画布大小: ``` WXML: <canvas style="width:{{canvasWidth}}px; height:{{canvasHeight}}px" disable-scroll="true"> </canvas> JS: let res = wx.getSystemInfoSync() let myCanvasWidth = res.windowWidth - 56 let myCanvasHeight = res.windowHeight - 200 this.setData({ canvasWidth: myCanvasWidth, canvasHeight: myCanvasHeight }) ``` 这样做了以后,画布虽然可以与屏幕适配了,但因为屏幕比例不同,画布内容产生了变形。这也是读者提到的问题。 针对这个变形的问题,有人是这样做的,先算出一个适配比例,再用这个比例值去影响每一次绘制: ``` //获取屏幕宽度,获取自适应单位 let res = wx.getSystemInfoSync() let unit = res.windowWidth/375 const context = wx.createCanvasContext("canvas"); context.drawImage(Url, 0, 0, 265 * unit, 262.5 * unit) ``` 这样做较为麻烦,但效果好,无论什么机型都可以充分利用屏幕。 还有一个更偷懒的办法是,允许有宽边、窄边有间隙,间隙可以用背景填充。将前面的 canvasWidth 与 canvasWidth 先计算好比例,或者将宽设置为 100rpx 或 100%,高度自适应,然后在Canvas后面再放置一个适配所有机型的大背景。 还有一个办法,因为Canvas是可以转绘的,可以先按正常尺寸绘制,然后在需要做适配的机型上,启用第二个Canvas,先绘制一个背景,再将第一个Canvas隐藏,并将其内容转绘到第二个Canvas上面去。 希望对你有帮助。

    共 2 条评论
    1
  • john
    2021-11-21
    老师,你好!上次问题中context.drawImage(Url, 0, 0, 265 * unit, 262.5 * unit)的 Url 是什么,262针对的是谁, 谢谢!

    作者回复: 这里Url看起来是一个网址,实际上应该是一个Image对象。 262等,应该仅是实际需要的待绘目标数值。 原文参见:https://blog.csdn.net/zSY_snake/article/details/81188128,供参考

    
    
  • john
    2021-08-28
    请老师指教在小程序canvas画布中,手指接触屏幕的点有偏差的问题!谢谢。

    作者回复: 触到哪里就是哪里! 拖拽的时候相对于目标对象做好偏量计算,一般不会有什么问题啦~

    
    
  • LIYI
    2021-01-15
    本节对应的源码标签: https://gitee.com/geektime-geekbang/weapp-practice/tree/0618

    作者回复: 源码是分阶段的,仓库主分支是最新源码。使用中有问题欢迎留言。

    
    