开发者

An html5 canvas element in the background of my page?

开发者 https://www.devze.com 2022-12-28 02:20 出处:网络
Is it possible to have a full screen canvas element in the background of a webpage and \"normal\" markup elements like a table in front of it?

Is it possible to have a full screen canvas element in the background of a webpage and "normal" markup elements like a table in front of it?

like the following snippet (if it wouldn't be used as alternative content):

<canvas id="imageView" width="100%" height="100%">
开发者_高级运维    <table>...</table>
</canvas>


You could try setting a CSS style on the canvas where it has a position: fixed (or absolute as appropriate), and then any content that follows it (as opposed to container content as you've given in your example) should sit on top of it.


<html>
  <style>
    body {
      margin:0;
      padding:0;
    }
    canvas{
      position:absolute;
      left:0;
      top:0;
      z-index:-1;
    }
    div{
      position:absolute;
      z-index:0;
      left:12px;
      top:10px;
    }
  </style>
  <body>
    <canvas id="myCanvas" width="600" height="600" style="border:1px solid #c3c3c3;">
      Your browser does not support the canvas element.
    </canvas>
    <div>hello is floating div</div>

    <script type="text/javascript">
      var c = document.getElementById("myCanvas");
      var ctx = c.getContext("2d");
      var grd = ctx.createLinearGradient(0, 0, 600, 600);

      grd.addColorStop(0, "#FF0000");
      grd.addColorStop(1, "#00FF00");

      ctx.fillStyle = grd;
      ctx.fillRect(0, 0, 600, 600);
    </script>
  </body>
</html>


I tried it for you with the following code. The div gets placed on top of the canvas element just as Matthew describes it. So should work for you:

<!DOCTYPE HTML>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Canvas demo</title>
  <style type="text/css">
    #canvasSection{ position:fixed;}
  </style>
  <script type="text/javascript">
    function draw()
    {
      //paint the text
      var canvas = document.getElementById('canvasSection');
      var context = canvas.getContext('2d');
    
      context.fillStyle    = '#00f';
      context.font         = 'italic 30px sans-serif';
      context.textBaseline = 'top';
      context.font         = 'bold 30px sans-serif';
      context.strokeText('Your Text!!', 0, 0);

      //paint the square
      var canvasSquare = document.getElementById('canvasSquare');
      var ctxSquare = canvas.getContext('2d');

      ctxSquare.fillStyle='#FF0000';
      ctxSquare.fillRect(0, 100,50,100);
    }
  </script>
  </head>
  <body onLoad="draw()">
    <canvas id="canvasSection">Error, canvas is not supported</canvas>
    <div>TestText</div>
  </body>
</html>


You can use toDataURL() to have it in pure JS separated from HTML

var c = document.createElement('canvas'),        
    ctx = c.getContext('2d'),
    size = c.width = c.height = 50;

for( var x = 0; x < size; x++ ){
    for( var y = 0; y < size; y++ ){
        ctx.fillStyle = 'hsl(0, 0%, ' + ( 100 - ( Math.random() * 15 ) ) + '%)';
        ctx.fillRect(x, y, 1, 1);
    }
}

document.body.style.background = 'url(' + c.toDataURL() + ')';
HTML on <b>canvas background</b>

Based on this CodePen

0

精彩评论

暂无评论...
验证码 换一张
取 消