Toile bug de maximisation?
-
02-10-2019 - |
Question
Je tué a dû plus d'une heure sur ce qui me semble comme un comportement étrange qui se passe dans Firefox, Safari et Chrome. Voici un code:
<!doctype html>
<html>
<head>
<title>Watch me grow scrollbars!</title>
</head>
<body onload="resizeCanvas()">
<canvas id="canvas"></canvas>
</body>
</html>
<script type="application/javascript">
function resizeCanvas() {
var canvas = document.getElementById("canvas");
canvas.setAttribute("height", window.innerHeight);
canvas.setAttribute("width", window.innerWidth);
}
</script>
En fait, la toile semble toujours de maximiser « trop », et la fenêtre se développe sur les deux côtés des barres de défilement. Je l'ai essayé d'utiliser différentes façons d'obtenir les dimensions du document, y compris dans une toile de nidification 100% de large et de haut placé de façon absolue div, ainsi que l'extraction des propriétés document.documentElement.clientWidth / hauteur.
Juste pour être sûr que je ne suis pas devenir fou, je l'ai placé une image à la place de la toile, et le tour est joué, le même code a parfaitement fonctionné pour étirer l'image sur les dimensions du document.
Qu'est-ce que je fais mal ici? Je suis trop fatigué pour comprendre. .. .. Doit boire quelque chose.
La solution 2
Je n'ai pas trouvé une solution pour le problème (toujours ouvert aux commentaires) donc pour déborder maintenant je l'ai caché sur l'élément conteneur parent qui a provoqué à peu près ce que je cherchais. Pourtant, il ne peut pas être bon si elle est cette contradiction. À moins que je manque quelque chose ..
Autres conseils
Si vous êtes à la recherche d'un moyen de prolonger la toile pour couvrir la page entière, la meilleure solution que j'ai trouvé est de laisser CSS redimensionne automatiquement à 100%, puis utilisez la taille de l'élément de toile actuelle pour réinitialiser la résolution de la toile. < br> Pour éviter d'avoir des barres de défilement, vous devez également définir la toile position CSS absolue.
(testé avec Chrome 34, Firefox 27, Explorateur 11)
<!DOCTYPE html>
<html>
<body onload="resizeCanvas()" style="margin: 0;">
<canvas id="canvas" style="position: absolute; width: 100%; height: 100%;"></canvas>
</body>
</html>
<script type="application/javascript">
function resizeCanvas() {
var canvas = document.getElementById("canvas");
canvas.setAttribute("width", canvas.offsetWidth);
canvas.setAttribute("height", canvas.offsetHeight);
// We draw a circle, just to test that it works
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.arc(canvas.offsetWidth/2, canvas.offsetHeight/2, canvas.offsetHeight/2, 0, Math.PI*2, true);
ctx.closePath();
ctx.fill();
}
</script>
Eh bien, cela fonctionne dans Firefox 4, mais je n'ai pas essayé dans d'autres navigateurs parce que je ne les ai pas dans cet ordinateur.
<!doctype html>
<html>
<head>
<title>Watch me grow scrollbars!</title>
<style>
body { margin: 0; padding: 0; }
canvas { width: 100%; height: 100%; border: 0; }
</style>
<script type="text/javascript">
function resizeCanvas() {
var canvas = document.getElementById("canvas"),
ctx = canvas.getContext('2d'),
height = document.body.clientHeight,
width = document.body.clientWidth;
canvas.setAttribute("height", height);
canvas.setAttribute("width", width);
ctx.fillStyle = 'rgb(128,128,128)';
ctx.fillRect(10, 10, width-20, height-20);
}
</script>
</head>
<body onload="resizeCanvas()">
<canvas id="canvas"></canvas>
</body>
</html>
En ce qui concerne IE7 (qui ne toile support de toute façon), je devais changer l'attribut de type de votre script de application/javascript
à text/javascript
pour faire fonctionner le code.
Voici pourquoi: (citant keparo sur Quel est le javascript type MIME pour l'attribut type d'une balise de script )
Le type MIME pour javascript n'a pas été normalisé pendant des années. La neige officiellement. "application / javascript"
Le botteur réel est ici que la plupart les navigateurs ne seront pas utiliser cet attribut De toute façon, du moins pas dans le cas de la balise de script. Ils peek fait à l'intérieur du paquet et déterminer la entrez pour eux-mêmes.
Ainsi, la ligne de fond est que la type = "text / javascript" ne fait pas tout autant que le javascript est concerné, mais il fait partie de la spécification pour HTML 4 et XHTML 1.0.
Je ne sais pas si cela signifie encore des versions plus récentes d'IE.