+
86
-

回答

在微信小程序中,canvas 确实不直接支持 CSS 的 opacity 透明度设置,但可以通过以下几种方法来实现类似的透明度效果:

1. 设置绘制图形或文本时的透明度

在 canvas 中,可以使用 globalAlpha 属性来设置后续绘制内容的透明度。该属性的值范围是从 0.0(完全透明)到 1.0(完全不透明)。

示例代码
<!-- index.wxml -->
<canvas canvas-id="myCanvas"></canvas>
// index.js
Page({
  onReady() {
    const ctx = wx.createCanvasContext('myCanvas');

    // 设置透明度为 0.5
    ctx.globalAlpha = 0.5;

    // 绘制一个填充矩形
    ctx.setFillStyle('red');
    ctx.fillRect(50, 50, 100, 100);

    // 绘制完成
    ctx.draw();
  }
})
代码解释ctx.globalAlpha = 0.5;:设置后续绘制内容的透明度为 0.5。ctx.fillRect(50, 50, 100, 100);:在 canvas 上绘制一个红色的填充矩形。2. 使用透明度颜色值

在绘制图形或文本时,可以使用包含透明度信息的颜色值,如 rgba() 或 hsla()。

示例代码
<!-- index.wxml -->
<canvas canvas-id="myCanvas"></canvas>
// index.js
Page({
  onReady() {
    const ctx = wx.createCanvasContext('myCanvas');

    // 使用 rgba 颜色值设置透明度
    ctx.setFillStyle('rgba(255, 0, 0, 0.5)');

    // 绘制一个填充矩形
    ctx.fillRect(50, 50, 100, 100);

    // 绘制完成
    ctx.draw();
  }
})
代码解释ctx.setFillStyle('rgba(255, 0, 0, 0.5)');:设置填充颜色为红色,透明度为 0.5。ctx.fillRect(50, 50, 100, 100);:在 canvas 上绘制一个填充矩形。3. 对整个 canvas 进行透明度处理

如果需要对整个 canvas 进行透明度处理,可以将 canvas 绘制到一个新的 canvas 上,并在绘制时设置透明度。

示例代码
<!-- index.wxml -->
<canvas canvas-id="sourceCanvas"></canvas>
<canvas canvas-id="targetCanvas"></canvas>
// index.js
Page({
  onReady() {
    const sourceCtx = wx.createCanvasContext('sourceCanvas');
    const targetCtx = wx.createCanvasContext('targetCanvas');

    // 在源 canvas 上绘制内容
    sourceCtx.setFillStyle('red');
    sourceCtx.fillRect(50, 50, 100, 100);
    sourceCtx.draw(false, () => {
      // 设置目标 canvas 的透明度
      targetCtx.globalAlpha = 0.5;

      // 将源 canvas 的内容绘制到目标 canvas 上
      targetCtx.drawImage('sourceCanvas', 0, 0);

      // 绘制完成
      targetCtx.draw();
    });
  }
})
代码解释在源 canvas 上绘制一个红色的填充矩形。使用 targetCtx.globalAlpha = 0.5; 设置目标 canvas 的透明度。使用 targetCtx.drawImage('sourceCanvas', 0, 0); 将源 canvas 的内容绘制到目标 canvas 上。

网友回复

我知道答案,我要回答