An html5 canvas element in the background of my page?

前端 未结 4 1777
忘了有多久
忘了有多久 2020-12-07 14:07

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 sni

相关标签:
4条回答
  • 2020-12-07 14:18

    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.

    0 讨论(0)
  • 2020-12-07 14:30

    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>

    0 讨论(0)
  • 2020-12-07 14:36

    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 讨论(0)
  • 2020-12-07 14:39

    <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>

    0 讨论(0)
提交回复
热议问题