2016-04-01 4 views
0

ウィンドウのサイズを変更したときにキャンバスを常に中央に維持するには(スクロールバーが表示されるときを含む)this demoキャンバス要素は、常にウィンドウを埋める必要があります。ウィンドウを塗りつぶす要素を中央に維持するにはどうすればよいですか?

leftmargin-leftなど(負の値を含む)などの設定で再生しようとしましたが、役に立たなくなりました。

答えて

0

overflow: hidden;を試しましたか?

JSFiddle

body { 
    overflow: hidden; 
} 
+0

私の目的は、スクロールバーを非表示にすることではなく、ウィンドウのサイズを変更したときにキャンバスを中央に配置することです(本質的に常にスクロールバーを中央に配置すること)。 – user76284

+0

あなたは何を意味するか分かりません。フィドルでは、十字の中心がすべての幅で中央にあります。 –

+0

スクロールバーが表示されると、キャンバスの中央が消え、代わりに左上に止まります。 – user76284

0

あなたは キャンバスのような何かを行うことができます{ 位置:固定; トップ:-500px;

window.addEventListener("resize", function() { 
    canvas.width = window.innerWidth; 
    canvas.width = window.innerHeight; 
}); 

キャンバスページ全体を埋めるように、余白を削除したい場合は、あなたに次のCSSを追加してみてください:リスナーのサイズを変更するウィンドウを追加してみてください、キャンバスページにサイズを変更させるために }

0

ページ:

body {  
    margin: 0 !important; 
    padding: 0 !important; 
} 
3

これはあなたが望むものですか?

これは、キャンバスのサイズをウィンドウの最小サイズ(幅または高さ)に変更するコードのリファクタリングバージョンです。また、キャンバスのdisplayblockに設定し、margin: 0 autoを使用して中央に配置します。

ここにはdemoです。

UPDATE 1私は、キャンバスをウィンドウの高さと幅の間の最大寸法にサイズ変更するコードを変更する場所を示すコメントをリファクタリングしました。

UPDATE 2キャンバスに合わせるようにリファクタリングしました。そのため、十字線は、幅と高さを正確なウィンドウに設定することによって常に中央に配置されます。

また、パディングと余白をすべて削除するようにCSSを更新しました。

キャンバスはwindow.onresizeに再描画されます。多くのあいた後

var canvas = document.createElement('canvas'); 
 
document.body.appendChild(canvas); 
 

 
function setSize() { 
 
    var w = window.innerWidth; 
 
    var h = window.innerHeight; 
 
    //var size = (h > w) ? h : w; //<<<< resize to largest between height and width 
 
    //var size = (h < w) ? h : w; //<<<< resize to smallest between height and width 
 
    //canvas.width = size; 
 
    //canvas.height = size; 
 
    canvas.width = w; \t //<<<< exact resizing to width 
 
    canvas.height = h; \t //<<<< exact resizing to height 
 
} 
 

 
function draw() { 
 
    var context = canvas.getContext('2d'); 
 
    context.fillRect(0, 0, canvas.width, canvas.height); 
 
    context.strokeStyle = 'red'; 
 
    context.moveTo(canvas.width/2, 0); 
 
    context.lineTo(canvas.width/2, canvas.height); 
 
    context.moveTo(0, canvas.height/2); 
 
    context.lineTo(canvas.width, canvas.height/2); 
 
    context.stroke(); 
 
} 
 

 
setSize(); 
 
draw(); 
 

 
window.onresize = function(e) { 
 
    setSize(); 
 
    draw(); 
 
};
* { 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
canvas { 
 
    display: block; 
 
    margin: 0 auto; 
 
}

+0

答えに時間を割いていただきありがとうございます!私は実際にそれが常にそれをカバーするように、キャンバスがウィンドウの*最大*次元にサイズ変更するのを探しています。 – user76284

+0

@ user1667423私は最大の次元を選択するために私の答えを更新しました、それはあなたが期待するものですか? – bideowego

+0

ありがとう!窓が大きくなると中心がうまくいきますが、それが小さくなってもまだ機能していないようです。 window.scrollTo関数などを使う必要があるかもしれないと思う。 – user76284

0

、私はそれを考え出したと思います。 working demofullscreen version)です。自動的に(非可視部分を含む)全体のスクロール可能な領域の中央にウィンドウをスクロール

function render() { 
    requestAnimationFrame(render); 
    window.scrollTo(
     document.documentElement.scrollWidth/2 - window.innerWidth/2, 
     document.documentElement.scrollHeight/2 - window.innerHeight/2 
    ); 
} 
requestAnimationFrame(render); 

マイナス表示領域自体の半分の大きさ:私は、次のループを使用して終了しました。

皆様のおかげです。

関連する問題