微信小程序-fix canvas原生组件最顶层

本文介绍了在微信小程序中,由于canvas原生组件层级最高导致的问题及其解决方案。通过使用cover-view组件和wx.canvasToTempFilePath方法,可以实现对canvas的覆盖或将其转化为图片。详细讨论了两种方法的优缺点及实施步骤。
摘要由CSDN通过智能技术生成
写在前面
  • 大家应该都知道过,在微信小程序中,canvas等原生组件的层级是最高的,页面中无论你设置多大的z-index都无法覆盖在其之上,这就可能会产生一些问题
  • 就像这样
    • canvas顶层问题截图
    • 柱状图是用canvas画的,它置于了我的tooltip之上。【这看起来真是一个可怕的问题

解决问题
  • 微信官方提供了cover-view原生组件,覆盖在原生组件之上的文本视图
  • 微信官方提供了将canvas转化为图片的方式–wx.canvasToTempFilePath,这样就可以”降级“
方法一:cover-view
  • 将tooltip用cover-view改写,效果如下
    • cover-view version0.1 截图
    • 看上去,是解决了我们的问题,且tooltip后的灰色背景不能滑动了,【妈耶,好棒!
    • 但是,这产生了一个:当文本超出tooltip宽度时,scroll-y: auto,失效了,溢出部分被直接截取
    • 罪魁祸首就是它
      • cover内置样式
    • 那我们可以:
      • 在tooltip分段内容中加上
        .modal-layer-content-rule {
                 
            white-space: pre-wrap;
        }
        
      • 在内容wrapper中加上
        .modal-layer-content {
                 
            overflow: scroll;
        }
        
    • 完美解决
      • cover-view解决图
方法二:wx.canvasToTempFilePath
  • 首先我们要做的就是将网络图片绘制进canvas,官方关于canvas类型有两种
    两种canvas类型
  • 新canvas 2D接口尝试
    const query = wx.createSelectorQuery().in(this)
    query.select('#myCanvas')
      .fields({
          node: true, size: true })
      .exec((res) => {
         
        const canvas = res[0].node
        const ctx = canvas.getContext('2d')
        const img = canvas.createImage()
        img.onload = () => {
         
          ctx.drawImage(img, 0, 0, 100, 100)
        }
        img.src = 'https://p0.meituan.net/myvideodistribute/0990cc2062e81ab6cc11fd8690f8755042005.jpg'
        // 这种方式获取canvas区域隐含的像素数据
        console.log(ctx.getImageData(0, 0, 150, 100).data)
      })
    
    <canvas type="2d" id
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值