복붙노트

[JQUERY] 뷰포트의 HTML5 캔버스 100 % 너비 높이?

JQUERY

뷰포트의 HTML5 캔버스 100 % 너비 높이?

해결법


  1. 1.브라우저의 크기가 변경되는 경우에도 의미, 항상 캔버스 전체 화면의 폭과 높이를 만들기 위해, 당신은 window.innerHeight 및 window.innerWidth에 캔버스의 크기를 조정하는 기능 내에서 무승부 루프를 실행해야합니다.

    브라우저의 크기가 변경되는 경우에도 의미, 항상 캔버스 전체 화면의 폭과 높이를 만들기 위해, 당신은 window.innerHeight 및 window.innerWidth에 캔버스의 크기를 조정하는 기능 내에서 무승부 루프를 실행해야합니다.

    예 : http://jsfiddle.net/jaredwilli/qFuDr/

    <canvas id="canvas"></canvas>
    
    (function() {
        var canvas = document.getElementById('canvas'),
                context = canvas.getContext('2d');
    
        // resize the canvas to fill browser window dynamically
        window.addEventListener('resize', resizeCanvas, false);
    
        function resizeCanvas() {
                canvas.width = window.innerWidth;
                canvas.height = window.innerHeight;
    
                /**
                 * Your drawings need to be inside this function otherwise they will be reset when 
                 * you resize the browser window and the canvas goes will be cleared.
                 */
                drawStuff(); 
        }
        resizeCanvas();
    
        function drawStuff() {
                // do your drawing stuff here
        }
    })();
    
    * { margin:0; padding:0; } /* to remove the top and left whitespace */
    
    html, body { width:100%; height:100%; } /* just to be sure these are full screen*/
    
    canvas { display:block; } /* To remove the scrollbars */
    

    즉, 제대로 브라우저의 캔버스 전체 폭과 높이를 만드는 방법이다. 당신은 방금 drawStuff () 함수에서 캔버스에 그리기위한 모든 코드를 삽입해야합니다.


  2. 2.당신은 뷰포트 단위 (CSS3)을 시도 할 수 있습니다 :

    당신은 뷰포트 단위 (CSS3)을 시도 할 수 있습니다 :

    canvas { 
      height: 100vh; 
      width: 100vw; 
      display: block;
    }
    

  3. 3.나는 캔버스 동적으로 창 크기 조정에 따라 크기가 적응해야하는 방법의 더 일반적인 질문에 답변 해 드리겠습니다. 허용 대답은 적절 폭과 높이가 모두 요청했지만, 이는 또한 캔버스의 화면 비율을 변경할 무슨 100 %로 가정하는 경우를 처리합니다. 많은 사용자들이 그대로 화면 비율을 유지하지만, 동시에 캔버스 창 크기 조절에 크기를 조정할 것입니다. 그것은 정확한 질문은 아니지만, 단지 약간 더 일반적인 문맥에 질문을 올려 놓거나 "에 맞는".

    나는 캔버스 동적으로 창 크기 조정에 따라 크기가 적응해야하는 방법의 더 일반적인 질문에 답변 해 드리겠습니다. 허용 대답은 적절 폭과 높이가 모두 요청했지만, 이는 또한 캔버스의 화면 비율을 변경할 무슨 100 %로 가정하는 경우를 처리합니다. 많은 사용자들이 그대로 화면 비율을 유지하지만, 동시에 캔버스 창 크기 조절에 크기를 조정할 것입니다. 그것은 정확한 질문은 아니지만, 단지 약간 더 일반적인 문맥에 질문을 올려 놓거나 "에 맞는".

    창은 어떤 종횡비 (폭 / 높이)를 가질 것이며, 따라서 캔버스 객체는 것이다. 서로 관련이 두 종횡비는 분명 약이 될해야 한 가지가 얼마나 당신이 원하는, 아니 그 질문에 대한 대답이 "하나 개의 크기는 모두 맞는 없습니다"입니다 - 나는 당신이 수도의 몇 가지 일반적인 경우를 통해 갈거야 필요.

    당신에 대해 명확하게해야 할 가장 중요한 것은 다음의 HTML 캔버스 객체는 폭 속성과 높이 속성이 있습니다; 다음, 동일한 오브젝트의 CSS는 폭 및 높이의 속성을 갖는다. 이 두 너비와 높이가 모두 다른 것들에 대한 유용 다르다.

    크기 변화의 어느 정도는 달성 할 수 있기 때문에 폭과 높이 속성을 변경하면, 당신은 항상 캔버스의 크기를 변경할 수 있습니다,하지만 당신이 시간을 항상 필요가 없습니다 것이다, 다시 그리기 모든 것을해야하는 하나의 방법이다 CSS의 속성을 통해,이 경우 당신은 캔버스를 다시 그리기하지 않습니다.

    난 당신이 창 크기 조정에서 발생 할 수 있습니다 무엇을 4 예를 참조 (전체 화면 캔버스 모든 시작)

    1 : 당신은 폭이 100 % 유지하려면, 당신은 화면 비율이 그것이 같이 있고 싶어. 이 경우, 당신은 캔버스를 다시 그릴 필요가 없습니다; 당신은 창 크기 조정 핸들러가 필요하지 않습니다. 당신이 필요하다

    $(ctx.canvas).css("width", "100%");
    

    어디 CTX는 캔버스 컨텍스트입니다. 바이올린 : resizeByWidth

    2 : 당신은 체류 100 % 모두 폭과 높이하고자하면 연신 아웃 화상의 효과가 종횡비의 변화 결과를 원한다. 지금, 당신은 여전히 ​​캔버스를 다시 그릴 필요가 없습니다,하지만 당신은 창 크기 조정 핸들러가 필요합니다. 핸들러에서, 당신이 할

    $(ctx.canvas).css("height", window.innerHeight);
    

    바이올린 : messWithAspectratio

    3 : 당신은 모두 숙박이 100 %로 너비와 높이를 원하지만 화면 비율의 변화에 ​​대한 답은 이미지를 스트레칭에서 뭔가 다르다. 그럼 당신은 다시 그릴 필요가 있고, 그것을 허용 대답에 설명되는 방식을한다.

    바이올린 : 다시 그리기

    4 : 당신은 페이지로드에 100 % 수 있지만 (이후 창 크기를 조정하려면 어떤 반응을 일정하게 유지하지하기 위해 폭과 높이를 원한다.

    바이올린 : 고정

    모든 바이올린의 모드가 설정되어있는 선 (63)을 제외하고, 동일 부호를 갖는다. 당신은 또한 당신이로? 모드 = 다시 그리기, 쿼리 문자열 인수를 통해 모드를 선택할 수있는 경우 로컬 컴퓨터에서 실행하는 바이올린 코드를 복사 할 수 있습니다


  4. 4.http://jsfiddle.net/mqFdk/10/

    http://jsfiddle.net/mqFdk/10/

    <!DOCTYPE html>
    <html>
    <head>
        <title>aj</title>
    </head>
    <body>
    
        <canvas id="c"></canvas>
    
    </body>
    </html>
    

    CSS와

    body { 
           margin: 0; 
           padding: 0
         }
    #c { 
         position: absolute; 
         width: 100%; 
         height: 100%; 
         overflow: hidden
       }
    

  5. 5.나도이 질문에 대한 답을 찾아보고했지만, 허용 대답은 나를 위해 파괴되었다. 분명히 window.innerWidth를 사용하여 이식 할 수 없습니다. 그것은 일부 브라우저에서 작동하지 않습니다,하지만 난 파이어 폭스가 그것을 좋아하지 않았다 나타났습니다.

    나도이 질문에 대한 답을 찾아보고했지만, 허용 대답은 나를 위해 파괴되었다. 분명히 window.innerWidth를 사용하여 이식 할 수 없습니다. 그것은 일부 브라우저에서 작동하지 않습니다,하지만 난 파이어 폭스가 그것을 좋아하지 않았다 나타났습니다.

    그레그 타바레스는이 문제를 직접 여기에 주소를 훌륭한 자원을 게시 : http://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html ( '안티 패턴 #을 참조하십시오 3, 4 S).

    대신 window.innerWidth의 canvas.clientWidth를 사용하면 잘 작동하는 것 같다.

    여기 그레그의 루프를 렌더링 제안입니다 :

    function resize() {
      var width = gl.canvas.clientWidth;
      var height = gl.canvas.clientHeight;
      if (gl.canvas.width != width ||
          gl.canvas.height != height) {
         gl.canvas.width = width;
         gl.canvas.height = height;
         return true;
      }
      return false;
    }
    
    var needToRender = true;  // draw at least once
    function checkRender() {
       if (resize() || needToRender) {
         needToRender = false;
         drawStuff();
       }
       requestAnimationFrame(checkRender);
    }
    checkRender();
    

  6. 6.(운동 에너지의 대답에 확장)

    (운동 에너지의 대답에 확장)

    스타일 캔버스는 몸을 채우기 위해. 캔버스에 렌더링 할 때 계정으로 크기를 가지고.

    http://jsfiddle.net/mqFdk/356/

    <!DOCTYPE html>
    <html>
    <head>
        <title>aj</title>
    </head>
    <body>
    
        <canvas id="c"></canvas>
    
    </body>
    </html>
    

    CSS :

    body { 
           margin: 0; 
           padding: 0
         }
    #c { 
         position: absolute; 
         width: 100%; 
         height: 100%; 
         overflow: hidden
       }
    

    자바 스크립트 :

    function redraw() {
        var cc = c.getContext("2d");
        c.width = c.clientWidth;
        c.height = c.clientHeight;
        cc.scale(c.width, c.height);
    
        // Draw a circle filling the canvas.
        cc.beginPath();
        cc.arc(0.5, 0.5, .5, 0, 2*Math.PI);
        cc.fill();
    }
    
    // update on any window size change.
    window.addEventListener("resize", redraw);
    
    // first draw
    redraw();
    

  7. 7.휴대폰의 경우, 그것을 사용하는 것이 좋습니다

    휴대폰의 경우, 그것을 사용하는 것이 좋습니다

    canvas.width = document.documentElement.clientWidth;
    canvas.height = document.documentElement.clientHeight;
    

    그것은 orientation.The "뷰포트"를 변경 한 후 잘못 표시 때문에 portrait.See 전체에 방향을 변경할 때 증가합니다 예

  8. from https://stackoverflow.com/questions/4288253/html5-canvas-100-width-height-of-viewport by cc-by-sa and MIT license