【微信小程序】解决canvas组件层级最高问题

1、为什么canvas组件总是会在最上层?
因为canvas组件是由客户端创建的原生组件,原生组件层级是最高的,所以页面中的其他组件无论设置 z-index 为多少都无法盖在原生组件上

2、如何解决canvas层级最高问题?                                                   

wx.canvasToTempFilePath转为图片,转为图片就能定义层级了

<template>  
 <canvas wx:if="{{!canvasSrc}}" class="cancas_wh" canvas-id="canvasArc3"></canvas>
   <image src="{{canvasSrc}}" class="img_canvas" mode="aspectFill"></image>
 </template>

  data = {
    canvasSrc: '',
}
  showScoreAnimation1(copyRightItems) {
//这里是绘制圆
    let that = this
    // 这部分是灰色底层
    let cxt_arc = wx.createCanvasContext('canvasArc1') //创建并返回绘图上下文context对象。
    cxt_arc.setLineWidth(6) //绘线的宽度
    cxt_arc.setStrokeStyle('#F3F3F3') //绘线的颜色
    cxt_arc.setLineCap('round') //线条端点样式
    cxt_arc.beginPath() //开始一个新的路径
    cxt_arc.arc(this.cxt_xx, this.cxt_xx, this.cxt_rr, 0, 2 * Math.PI, false) //设置一个原点(53,53),半径为50的圆的路径到当前路径
    cxt_arc.stroke() //对当前路径进行描边
    //这部分是绿色部分
    cxt_arc.setLineWidth(6)
    if (copyRightItems <= 100) {
      cxt_arc.setStrokeStyle('#509234')
    } else {
      cxt_arc.setStrokeStyle('#f05b26')
    }
    cxt_arc.setLineCap('round')
    cxt_arc.beginPath() //开始一个新的路径
    cxt_arc.arc(
      this.cxt_xx,
      this.cxt_xx,
      this.cxt_rr,
      (-Math.PI * 1) / 2,
      2 * Math.PI * (copyRightItems / 100) - (Math.PI * 1) / 2,
      false
    )
    cxt_arc.stroke() //对当前路径进行描边

//这里是重点!!只要看这里就行  针对层级问题转图片

    cxt_arc.draw(false, () => {
      wx.canvasToTempFilePath({
        canvasId: 'canvasArc1',
        success: function(res) {
console.log(res.tempFilePath, '图片地址')
//uploadImg方法是后台接口,为了上传到阿里云,转为网络图片地址
          uploadImg(res.tempFilePath, (url) => {
            that.canvasSrc = url
            console.log(urlh, '图片线上地址')
            that.$apply()
          })
        },

      })
    })
  }
 

 
// 设置 
.cancas_wh {
  width: 240rpx;
  height: 240rpx;
}

// 设置canvas图片的大小
.img_canvas {
  height: 280rpx;
  width: 280rpx;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值