7

キャンバスの位置を別のキャンバスと相対的に設定するのに問題があるため、次のテスト ハーネスを作成しました。

ハーネスの上部にあるdivの「上」と「左」で指定された位置は、キャンバスの原点を互いに相対的に移動すると予想されます。

私は何を間違っていますか?

<!DOCTYPE html>
<html>
<head>
<form id='form1' style="position:relative">
  <div id='d1' style="position:absolute; top:0; left:0; z-index:1">  
      <canvas id='canvas1' width='200' height='100'>
            Your browser does not support HTML5 Canvas.
      </canvas>
  </div>
  <div id='d2' style="position:absolute; top:50; left:50; z-index:2">
      <canvas id='canvas2' width='100' height='200'>
            Your browser does not support HTML5 Canvas.
      </canvas>
  </div>
  <div id='d3' style="position:absolute; top:75; left:75; z-index:3">
      <canvas id='canvas3' width='50' height='50'>
            Your browser does not support HTML5 Canvas.
      </canvas>
  </div>
</form>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<input id='btn1' type="button" onClick="demoDisplay()" value="Hide canvas with display property">
<input id='btn2' type="button" onClick="demoVisibility()" value="Hide canvas with visibility property">
<input id='btn3' type="button" onClick="demoOrder()" value="Place blue over red">

</head>
<body onLoad="loadMe()">


<script>
function loadMe()
{
    var canvas = document.getElementById("canvas1");
    if (canvas.getContext) { // Canvas Support
       var ctx = canvas.getContext("2d");
       // Work with context
       var grd=ctx.createLinearGradient(0,0,ctx.canvas.height,ctx.canvas.width);
       grd.addColorStop(0,'#8ed6ff');
       grd.addColorStop(1,'#004cb3');
       ctx.fillStyle=grd;
       ctx.rect(0,0,ctx.canvas.width,ctx.canvas.height);
       ctx.fill();
    }   
    var canvas = document.getElementById("canvas2");
    if (canvas.getContext) { // Canvas Support
       var ctx = canvas.getContext("2d");
       // Work with context
       var grd=ctx.createLinearGradient(0,0,ctx.canvas.height,ctx.canvas.width);
       grd.addColorStop(0,'#C00');
       grd.addColorStop(1,'#D00');
       ctx.fillStyle=grd;
       ctx.rect(0,0,ctx.canvas.width,ctx.canvas.height);
       ctx.fill();
    }   
    var canvas = document.getElementById("canvas3");
    if (canvas.getContext) { // Canvas Support
       var ctx = canvas.getContext("2d");
       // Work with context
       var grd=ctx.createLinearGradient(0,0,ctx.canvas.height,ctx.canvas.width);
       grd.addColorStop(0,'#00C');
       grd.addColorStop(1,'#00D');
       ctx.fillStyle=grd;
       ctx.rect(0,0,ctx.canvas.width,ctx.canvas.height);
       ctx.fill();
    }   
}

function demoVisibility()
{
    btn = document.getElementById('btn2')
    if (btn.value==='Hide canvas with visibility property') {
        btn.value = 'Show canvas with visibility property';
        document.getElementById("d2").style.visibility="hidden";
    } else {
        btn.value = 'Hide canvas with visibility property';
        document.getElementById("d2").style.visibility="visible";
    }
}

function demoDisplay()
{
    btn = document.getElementById('btn1')
    if (btn.value==='Hide canvas with display property') {
        btn.value = 'Show canvas with display property';
        document.getElementById("d1").style.display="none";
    } else {
        btn.value = 'Hide canvas with display property';
        document.getElementById("d1").style.display="inline";
    }
}

function demoOrder()
{
    btn = document.getElementById('btn3')
    if (btn.value==='Place blue over red') {
        btn.value = 'Place red over blue';
        document.getElementById("d1").style.zIndex=2;
        document.getElementById("d2").style.zIndex=1;
    } else {
        btn.value = 'Place blue over red';
        document.getElementById("d1").style.zIndex=1;
        document.getElementById("d2").style.zIndex=2;
    }
}
</script>

</body>
</html>
4

3 に答える 3

-3

まず、HTML が無効です。<form>コンテンツ ( などのHTML 要素<canvas>) は、<body>タグ内の <html>タグにある必要があります。は<script>おそらく にあるはず<head>です。

また、解決策は、相対配置を使用して要素内で絶対配置を使用していることに注意してください。

于 2015-07-23T13:47:21.487 に答える