화면 해상도 및 캔버스 크기 조정과 무관하게 이동 경계를 결정하는 캔버스

리 브린 들리

html5 캔버스의 애니메이션에 패닝 기능을 구현했습니다. 아마도 내가 만든 것 중 가장 역겨운 구현 일 수도 있고, 그래서 하하처럼 보이지만 작동하고 지금은 충분합니다.

그래서 이러한 변수를 설정했습니다. 편의를 위해 Y 축 로직과 저장 및 복원을 제외하겠습니다.

var translationX = 0; //This is where to start the clipping region

이것이 제 그리기 논리입니다. Canvas는 그릴 이미지이고 bCanvas는 이미지 위에 놓을 '뷰포트'입니다. 확대하지 않으면 전체 캔버스 이미지 만 표시됩니다. 모두 여기에서 의도 한대로 작동합니다.

function drawBuffer(){

    //If zoomed in I set the clipping region dimensions to half,  
      //having the effect of scaling by 2.

    if(stateManager.getZoomState() == "zoomIn")
        bContext.drawImage(canvas,translationX,translationY,
                           bCanvas.width*0.5,bCanvas.height*0.5,
                           0,0,
                           bCanvas.width,bCanvas.height);


    //Otherwise just draw the image to a scale of 1
    else
        bContext.drawImage(canvas,0,0,bCanvas.width,bCanvas.height);
}

이것은 X 축에서 캔버스를 가로 질러 클리핑 영역을 이동하는 논리이며, 문제가있는 곳은 translationX 증가를 중지해야하는 경우를 나타내는 조건입니다.

 function moveClippingRegion(){

    if(state is set to zoomed in){

        if(Right arrow key is pressed){

         //This condition admittedly is just the result of hacking away, but it works
          // in the sense that I stop incrementing translationX when 
          //at the edge of the canvas

            if(translationX>= (bCanvas.width -canvas.width) - translationX - 64){
               //The -64 literal is definitely a hacking attempt, 
              //but without the clipping region increments two times more than 
              //it should, thus going off the canvas.

            }
            else
                translationX += 16;

        }
 }

좋아, 이것은 창 크기가 조정되지 않았을 때 모두 작동하므로 bCanvas의 크기가 조정되면 어떤 조건을 넣을지에 대한 방향을 찾고 있습니다.

중요한 경우 크기 조정 기능은 다음과 같습니다.

     function onResize(){

    bCanvas.width = window.innerWidth *    0.60952380952380952380952380952381;      

    bCanvas.height = window.innerHeight * 0.83116883116883116883116883116883;
    drawBuffer();
}

그리기 캔버스의 크기는 1024 x 768이므로 이러한 추악한 리터럴은 bCanvas를 캔버스와 동일한 크기로 만듭니다.

이것은 내 화면 해상도와 창 크기가 조정되지 않은 경우에만 작동합니다. 나는 창 크기가 조정 된 후 해상도와 독립적으로 작동하도록 노력하고 있습니다.

마지막으로 다른 해상도에서 발생하는 문제를 설명하는 데 도움이되는 이미지가 있습니다. 창 크기가 조정 된 후 창 크기가 정말 작게 조정 된 경우 클리핑 영역이 움직이지 않습니다. 이는 logc에서 예상 할 수 있습니다. moveClippingRegion 함수의 if 문. :

여기에 이미지 설명 입력

미리 읽어 주셔서 감사합니다. 어떤 도움이라도 대단히 감사하겠습니다!

이안 브린 들리

캔버스를 그리는 것이 도움이 될 수 있습니다.

아래와 같은 솔루션을 제공해야합니다. 줌 비율은 줌 캔버스의 x2 (.5) 반이고 줌 캔버스에서 왼쪽 위치를 뺀 값 / 캔버스 너비에서 2입니다. 또는 그 반대 (머리 스크래 처 : P)

var StepRate; // <- your step increment when moving.
if(translationX >= (canvas.width / 2) - (((zoomCanvas.width - canvas.width) / 2) + StepRate)){}
else
    translationX += StepRate;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

캔버스 크기를 조정하면 이미지가 사라집니다.

분류에서Dev

사이드 바의 크기를 조정하고 제거 할 때 캔버스 크기를 변경하려면 어떻게해야합니까?

분류에서Dev

Android는 여러 캔버스 요소의 크기를 조정하고 이동할 때 상당히 느립니다.

분류에서Dev

캔버스를 전체 화면으로 조정하면 실제로 해상도가 감소합니다.

분류에서Dev

플렉스 컨테이너의 크기를 조정할 때 캔버스가있는 div를 축소하려면 어떻게해야합니까?

분류에서Dev

캔버스 조각의 크기를 조정하는 방법이 있습니까?

분류에서Dev

CodeIgniter Image Library로 이미지 캔버스 크기 조정-투명도를 유지하는 방법

분류에서Dev

캔버스 및 콘텐츠의 동적 크기 조정

분류에서Dev

캔버스 크기 조정 및 처리 JS 그리기 기능이 동기화되지 않음

분류에서Dev

캔버스 크기를 조정하는 방법

분류에서Dev

화면 크기에 따라 캔버스 크기를 올바르게 조정하는 방법은 무엇입니까? 자바 스크립트 (p5.js) [해결됨]

분류에서Dev

fabric.js를 사용하여 URL의 이미지를 HTML 캔버스에 추가하고 크기를 조정하려면 어떻게해야합니까?

분류에서Dev

모바일 및 데스크톱 장치에서 캔버스 크기를 조정하는 방법

분류에서Dev

캔버스에서 ctx.scale () 메서드를 사용하는 동안 크기 조정 및 회전이 fabricjs에서 작동하지 않습니까?

분류에서Dev

캔버스 이미지 크기 조정

분류에서Dev

캔버스를 사용하여 이미지 크기를 동시에 조정하고 회전하는 방법

분류에서Dev

김프 : 캔버스 크기를 이미지 크기로 자동 크기 조정

분류에서Dev

WPF를 사용하여 캔버스에서 사용자 크기 조정 및 사용자 회전이 가능한 도형

분류에서Dev

UIElements를 이동, 크기 조정, 회전하는 캔버스와 그리드의 차이점

분류에서Dev

translate () 및 scale ()을 사용하여 캔버스 이미지 크기를 조정하지만 javascript를 사용하여 원래 캔버스 이미지와 동일한 x 및 y 좌표를 얻습니다.

분류에서Dev

캔버스를 기준으로 레이어 정렬 및 배포

분류에서Dev

Windows 8에서 캔버스 내부의 사각형 이동 및 크기 조정

분류에서Dev

캔버스의 배경 이미지 크기 조정-Fabricjs

분류에서Dev

StaticResource 캔버스에서 경로에 대해 다른 크기 또는 자동 크기 조정 설정

분류에서Dev

jQuery를 사용하여 창 크기 조정 및 바인딩 캔버스의 DOM에서 캔버스를 가져올 수 없습니다.

분류에서Dev

이전 캔버스 세부 정보를 유지하면서 캔버스 업데이트

분류에서Dev

CSS, 캔버스 또는 SVG를 사용하여 유동적 인 (크기 조정) 동심원 호 만들기

분류에서Dev

창 크기 조정시 캔버스 크기를 동적으로 조정

분류에서Dev

키보드 입력을 사용하여 캔버스의 개체를 x 및 y 좌표를 기준으로 이동하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    캔버스 크기를 조정하면 이미지가 사라집니다.

  2. 2

    사이드 바의 크기를 조정하고 제거 할 때 캔버스 크기를 변경하려면 어떻게해야합니까?

  3. 3

    Android는 여러 캔버스 요소의 크기를 조정하고 이동할 때 상당히 느립니다.

  4. 4

    캔버스를 전체 화면으로 조정하면 실제로 해상도가 감소합니다.

  5. 5

    플렉스 컨테이너의 크기를 조정할 때 캔버스가있는 div를 축소하려면 어떻게해야합니까?

  6. 6

    캔버스 조각의 크기를 조정하는 방법이 있습니까?

  7. 7

    CodeIgniter Image Library로 이미지 캔버스 크기 조정-투명도를 유지하는 방법

  8. 8

    캔버스 및 콘텐츠의 동적 크기 조정

  9. 9

    캔버스 크기 조정 및 처리 JS 그리기 기능이 동기화되지 않음

  10. 10

    캔버스 크기를 조정하는 방법

  11. 11

    화면 크기에 따라 캔버스 크기를 올바르게 조정하는 방법은 무엇입니까? 자바 스크립트 (p5.js) [해결됨]

  12. 12

    fabric.js를 사용하여 URL의 이미지를 HTML 캔버스에 추가하고 크기를 조정하려면 어떻게해야합니까?

  13. 13

    모바일 및 데스크톱 장치에서 캔버스 크기를 조정하는 방법

  14. 14

    캔버스에서 ctx.scale () 메서드를 사용하는 동안 크기 조정 및 회전이 fabricjs에서 작동하지 않습니까?

  15. 15

    캔버스 이미지 크기 조정

  16. 16

    캔버스를 사용하여 이미지 크기를 동시에 조정하고 회전하는 방법

  17. 17

    김프 : 캔버스 크기를 이미지 크기로 자동 크기 조정

  18. 18

    WPF를 사용하여 캔버스에서 사용자 크기 조정 및 사용자 회전이 가능한 도형

  19. 19

    UIElements를 이동, 크기 조정, 회전하는 캔버스와 그리드의 차이점

  20. 20

    translate () 및 scale ()을 사용하여 캔버스 이미지 크기를 조정하지만 javascript를 사용하여 원래 캔버스 이미지와 동일한 x 및 y 좌표를 얻습니다.

  21. 21

    캔버스를 기준으로 레이어 정렬 및 배포

  22. 22

    Windows 8에서 캔버스 내부의 사각형 이동 및 크기 조정

  23. 23

    캔버스의 배경 이미지 크기 조정-Fabricjs

  24. 24

    StaticResource 캔버스에서 경로에 대해 다른 크기 또는 자동 크기 조정 설정

  25. 25

    jQuery를 사용하여 창 크기 조정 및 바인딩 캔버스의 DOM에서 캔버스를 가져올 수 없습니다.

  26. 26

    이전 캔버스 세부 정보를 유지하면서 캔버스 업데이트

  27. 27

    CSS, 캔버스 또는 SVG를 사용하여 유동적 인 (크기 조정) 동심원 호 만들기

  28. 28

    창 크기 조정시 캔버스 크기를 동적으로 조정

  29. 29

    키보드 입력을 사용하여 캔버스의 개체를 x 및 y 좌표를 기준으로 이동하려면 어떻게해야합니까?

뜨겁다태그

보관