HTML холст полный экран
Я играю со следующим приложением, используя HTML-холст:http://driz.co.uk/particles/
на данный момент он установлен на 640x480 пикселей, но я хотел бы сделать его полноэкранным, так как он будет показан проектором. Однако, насколько я могу судить, я не могу установить размер холста на 100% в качестве переменных только за исключением чисел, а не %. Использование CSS просто растягивает его, а не делает его фактическим полноэкранным.
какие идеи?
изменить: Пробовал найти высоту и ширину с помощью jQuery, но он ломает холст любые идеи, почему?
var $j = jQuery.noConflict();
var canvas;
var ctx;
var canvasDiv;
var outerDiv;
var canvasW = $j('body').width();
var canvasH = $j('body').height();
//var canvasW = 640;
//var canvasH = 480;
var numMovers = 550;
var movers = [];
var friction = .96;
var radCirc = Math.PI * 2;
var mouseX, mouseY, mouseVX, mouseVY, prevMouseX = 0, prevMouseY = 0;
var isMouseDown = true;
function init()
{
canvas = document.getElementById("mainCanvas");
if( canvas.getContext )
{
setup();
setInterval( run , 33 );
}
}
function setup()
{
outerDiv = document.getElementById("outer");
canvasDiv = document.getElementById("canvasContainer");
ctx = canvas.getContext("2d");
var i = numMovers;
while( i-- )
{
var m = new Mover();
m.x = canvasW * .5;
m.y = canvasH * .5;
m.vX = Math.cos(i) * Math.random() * 25;
m.vY = Math.sin(i) * Math.random() * 25;
m.size = 2;
movers[i] = m;
}
document.onmousedown = onDocMouseDown;
document.onmouseup = onDocMouseUp;
document.onmousemove = onDocMouseMove;
}
function run()
{
ctx.globalCompositeOperation = "source-over";
ctx.fillStyle = "rgba(8,8,12,.65)";
ctx.fillRect( 0 , 0 , canvasW , canvasH );
ctx.globalCompositeOperation = "lighter";
mouseVX = mouseX - prevMouseX;
mouseVY = mouseY - prevMouseY;
prevMouseX = mouseX;
prevMouseY = mouseY;
var toDist = canvasW / 1.15;
var stirDist = canvasW / 8;
var blowDist = canvasW / 2;
var Mrnd = Math.random;
var Mabs = Math.abs;
var Msqrt = Math.sqrt;
var Mcos = Math.cos;
var Msin = Math.sin;
var Matan2 = Math.atan2;
var Mmax = Math.max;
var Mmin = Math.min;
var i = numMovers;
while( i-- )
{
var m = movers[i];
var x = m.x;
var y = m.y;
var vX = m.vX;
var vY = m.vY;
var dX = x - mouseX;
var dY = y - mouseY;
var d = Msqrt( dX * dX + dY * dY );
var a = Matan2( dY , dX );
var cosA = Mcos( a );
var sinA = Msin( a );
if( isMouseDown )
{
if( d < blowDist )
{
var blowAcc = ( 1 - ( d / blowDist ) ) * 2;
vX += cosA * blowAcc + .5 - Mrnd();
vY += sinA * blowAcc + .5 - Mrnd();
}
}
if( d < toDist )
{
var toAcc = ( 1 - ( d / toDist ) ) * canvasW * .0014;
vX -= cosA * toAcc;
vY -= sinA * toAcc;
}
if( d < stirDist )
{
var mAcc = ( 1 - ( d / stirDist ) ) * canvasW * .00022;
vX += mouseVX * mAcc;
vY += mouseVY * mAcc;
}
vX *= friction;
vY *= friction;
var avgVX = Mabs( vX );
var avgVY = Mabs( vY );
var avgV = ( avgVX + avgVY ) * .5;
if( avgVX < .1 ) vX *= Mrnd() * 3;
if( avgVY < .1 ) vY *= Mrnd() * 3;
var sc = avgV * .45;
sc = Mmax( Mmin( sc , 3.5 ) , .4 );
var nextX = x + vX;
var nextY = y + vY;
if( nextX > canvasW )
{
nextX = canvasW;
vX *= -1;
}
else if( nextX < 0 )
{
nextX = 0;
vX *= -1;
}
if( nextY > canvasH )
{
nextY = canvasH;
vY *= -1;
}
else if( nextY < 0 )
{
nextY = 0;
vY *= -1;
}
m.vX = vX;
m.vY = vY;
m.x = nextX;
m.y = nextY;
ctx.fillStyle = m.color;
ctx.beginPath();
ctx.arc( nextX , nextY , sc , 0 , radCirc , true );
ctx.closePath();
ctx.fill();
}
//rect( ctx , mouseX - 3 , mouseY - 3 , 6 , 6 );
}
function onDocMouseMove( e )
{
var ev = e ? e : window.event;
mouseX = ev.clientX - outerDiv.offsetLeft - canvasDiv.offsetLeft;
mouseY = ev.clientY - outerDiv.offsetTop - canvasDiv.offsetTop;
}
function onDocMouseDown( e )
{
isMouseDown = true;
return false;
}
function onDocMouseUp( e )
{
isMouseDown = true;
return false;
}
// ==========================================================================================
function Mover()
{
this.color = "rgb(" + Math.floor( Math.random()*255 ) + "," + Math.floor( Math.random()*255 ) + "," + Math.floor( Math.random()*255 ) + ")";
this.y = 0;
this.x = 0;
this.vX = 0;
this.vY = 0;
this.size = 0;
}
// ==========================================================================================
function rect( context , x , y , w , h )
{
context.beginPath();
context.rect( x , y , w , h );
context.closePath();
context.fill();
}
// ==========================================================================================
13 ответов:
javascript имеет
var canvasW = 640; var canvasH = 480;
в нем. Попробуйте изменить их, а также css для холста.
или еще лучше, есть функция инициализации определить размер холста из css!
в ответ на ваши изменения, измените функцию инициализации:
function init() { canvas = document.getElementById("mainCanvas"); canvas.width = document.body.clientWidth; //document.width is obsolete canvas.height = document.body.clientHeight; //document.height is obsolete canvasW = canvas.width; canvasH = canvas.height; if( canvas.getContext ) { setup(); setInterval( run , 33 ); } }
также удалить все css из обертки, что просто мусор вещи вверх. Вы должны отредактировать js, чтобы полностью избавиться от них... Я смог получить его в полноэкранном режиме хотя.
html, body { overflow: hidden; }
Edit:
document.width
иdocument.height
устарели. Заменить наdocument.body.clientWidth
иdocument.body.clientHeight
вы можете просто вставить следующее на главную html-страницу или функцию:
canvas.width = window.innerWidth; canvas.height = window.innerHeight;
Это должно сделать работу
новейшие Chrome и Firefox поддерживают полноэкранный API, но установка полноэкранного режима похожа на изменение размера окна. Слушайте onresize-событие объекта window:
$(window).bind("resize", function(){ var w = $(window).width(); var h = $(window).height(); $("#mycanvas").css("width", w + "px"); $("#mycanvas").css("height", h + "px"); }); //using HTML5 for fullscreen (only newest Chrome + FF) $("#mycanvas")[0].webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); //Chrome $("#mycanvas")[0].mozRequestFullScreen(); //Firefox //... //now i want to cancel fullscreen document.webkitCancelFullScreen(); //Chrome document.mozCancelFullScreen(); //Firefox
Это не работает в любом браузере. Вы должны проверить, существуют ли функции, или это вызовет JS-ошибку.
для получения дополнительной информации о html5-полноэкранном режиме проверьте это: http://updates.html5rocks.com/2011/10/Let-Your-Content-Do-the-Talking-Fullscreen-API
все, что вам нужно сделать, это установить атрибуты width и height, чтобы быть размер холста, динамично. Таким образом, вы используете CSS, чтобы растянуть его по всему окну браузера, тогда у вас есть небольшая функция в javascript, которая измеряет ширину и высоту и назначает их. Я не очень хорошо знаком с jQuery, поэтому рассмотрим этот psuedocode:
window.onload = window.onresize = function() { theCanvas.width = theCanvas.offsetWidth; theCanvas.height = theCanvas.offsetHeight; }
атрибуты width и height элемента определяют, сколько пикселей он использует во внутреннем буфере рендеринга. Изменение те к новым номерам причиняют холст повторно инициализировать с по-разному размером, пустым буфером. Браузер будет растягивать графику только в том случае, если атрибуты width и height не совпадают с фактической шириной и высотой пикселя реального мира.
при загрузке документа установлен
canvas.width = window.innerWidth; canvas.height = window.innerHeight;
A - Как Рассчитать Ширину И Высоту Полного Экрана
здесь функции;
canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
проверить это из
B-Как Сделать Полный Экран Стабильным С Помощью Resize
вот метод изменения размера для события изменения размера;
function resizeCanvas() { canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; WIDTH = canvas.width; HEIGHT = canvas.height; clearScreen(); }
C-Как Избавиться От Полос Прокрутки
просто;
<style> html, body { overflow: hidden; } </style>
D-Демо Код
<html> <head> <title>Full Screen Canvas Example</title> <style> html, body { overflow: hidden; } </style> </head> <body onresize="resizeCanvas()"> <canvas id="mainCanvas"> </canvas> <script> (function () { canvas = document.getElementById('mainCanvas'); ctx = canvas.getContext("2d"); canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; WIDTH = canvas.width; HEIGHT = canvas.height; clearScreen(); })(); function resizeCanvas() { canvas.width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; canvas.height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; WIDTH = canvas.width; HEIGHT = canvas.height; clearScreen(); } function clearScreen() { var grd = ctx.createLinearGradient(0,0,0,180); grd.addColorStop(0,"#6666ff"); grd.addColorStop(1,"#aaaacc"); ctx.fillStyle = grd; ctx.fillRect( 0, 0, WIDTH, HEIGHT ); } </script> </body> </html>
потому что он еще не был опубликован и является простым исправлением css:
#canvas { position:fixed; left:0; top:0; width:100%; height:100%; }
отлично работает, если вы хотите применить полноэкранный фон холста (например, с Granim.js).
function resize() { canvas.width = window.innerWidth; canvas.height = window.innerHeight; render(); } window.addEventListener('resize', resize, false); resize(); function render() { // draw to screen here }
Это просто, установите ширину и высоту холста на экран.ширина и экран.высота. потом нажмите F11! думаю, что F11 должен сделать полный экран в большинстве браузеров в FFox и IE.
Я надеюсь, что это будет полезно.
// Get the canvas element var canvas = document.getElementById('canvas'); var isInFullScreen = (document.fullscreenElement && document.fullscreenElement !== null) || (document.webkitFullscreenElement && document.webkitFullscreenElement !== null) || (document.mozFullScreenElement && document.mozFullScreenElement !== null) || (document.msFullscreenElement && document.msFullscreenElement !== null); // Enter fullscreen function fullscreen(){ if(canvas.RequestFullScreen){ canvas.RequestFullScreen(); }else if(canvas.webkitRequestFullScreen){ canvas.webkitRequestFullScreen(); }else if(canvas.mozRequestFullScreen){ canvas.mozRequestFullScreen(); }else if(canvas.msRequestFullscreen){ canvas.msRequestFullscreen(); }else{ alert("This browser doesn't supporter fullscreen"); } } // Exit fullscreen function exitfullscreen(){ if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); }else{ alert("Exit fullscreen doesn't work"); } }
AFAIK, HTML5 не предоставляет API, который поддерживает полный экран.
этот вопрос имеет некоторые точки зрения на создание html5 Видео в полноэкранном режиме, например, с помощью
webkitEnterFullscreen
в webkit.
есть ли способ сделать html5 Видео полноэкранным