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

为什么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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀