我家空空 2021-12-26 20:28 采纳率: 50%
浏览 139

为什么canvas使用createPattern不生效?

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>菜鸟教程(runoob.com)</title>
</head>
<body>
  <img src="../images/img_lamp.jpg" id="lamp">
  <canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
    您的浏览器不支持 HTML5 canvas 标签。
  </canvas>
  <script>
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    ctx.clearRect(0, 0, c.width, c.height);
    var img = document.getElementById("lamp")
    var pat = ctx.createPattern(img, 'repeat');
    ctx.rect(0, 0, 220, 128);
    ctx.fillStyle = pat;
    ctx.fill();
  </script>
</body>
</html>

为什么上面这段代码执行后,画布里没有效果呢?

  • 写回答

2条回答 默认 最新

  • i_am_a_div_日积月累_ 2021-12-27 10:26
    关注

    需要在window.onload后执行画布操作,因为需要使用到图片资源,window.onload必须等到页面内包括图片的所有元素和资源加载完毕后才能执行。

    有效请采纳,谢谢!

    
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>菜鸟教程(runoob.com)</title>
    </head>
    
    <body>
      <img src="../images/img_lamp.jpg" id="lamp">
      <canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
        您的浏览器不支持 HTML5 canvas 标签。
      </canvas>
      <script>
        window.onload = function () {
          var c = document.getElementById("myCanvas");
          var ctx = c.getContext("2d");
          ctx.clearRect(0, 0, c.width, c.height);
          var img = document.getElementById("lamp")
          var pat = ctx.createPattern(img, 'repeat');
          ctx.rect(0, 0, 220, 128);
          ctx.fillStyle = pat;
          ctx.fill();
        }
      </script>
    </body>
    
    </html>
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月26日

悬赏问题

  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真
  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 YOLOv8obb获取边框坐标时报错AttributeError: 'NoneType' object has no attribute 'xywhr'