2013-06-10 2 views
1

간단한 함수로 처음 등장한 것을 누군가 도와 주시겠습니까? 이제는 내 머리카락을 꺼내 ​​주시겠습니까?창 계산시 시차 배경 위치

저는 윈도우 스크롤 기능에 바인딩되는 매우 간단한 jQuery를 사용하고 있습니다. 나는 내가이 일을하기 위해 필요한 모든 변수들을 가지고 있다고 믿지만, 그렇지 않을 것이다. 내 수학 (들)이 부족한 것 같습니다.

평판이 좋지 않아 이미지를 첨부 할 수 없다는 사과를드립니다. 내가 가지고있는 변수는 브라우저 창 (x), 스크롤 배경 이미지, 배경 이미지 높이 (z) 및 div 맨 위의 스크롤 위치를 가진 div (y)의 높이입니다. 브라우저 창 (o).

div의 백그라운드 위치는 창의 div 위치에 상대적으로 움직여야하므로 브라우저 윈도우의 위에서 아래로 스크롤하는 div에서 전체 이미지를 볼 수 있습니다.

내 계산이있다 : -는 DIV 위치가 -50 모든 방법 (200)에 스크롤로

x+y gives me the whole range of movement the div will require to cover 
from it first being visible to it finally leaving the screen. 

z-y gives me the range of movement the background image will require to 
cover for the whole image to scroll through the div as the div scrolls 
through the browser window. 

(z-y)/(x+y) gives me the number of pixels the background image has to 
move for every 1 pixel the browser window will scroll. 

As an example, 
x = 200 
y = 50 
z = 150 
o starts at -50 and ends at 200 

x+y = 250 (full div movement) 
z-y = 100 (bg image movement) 
(z-y)/(x+y) = 0.4 bg movement per pixel scrolled 

따라서, 상기 BG 이미지는 0 내지 -100으로 스크롤 할 필요가있다.

나는이 마지막 스레드들을 어떻게 묶는 지에 관해서는 손해보고있다. 누구든지이 숫자들을 상관시킬 수 있습니까?

미리 감사드립니다. 바보 같으면 죄송합니다.

마크

여기, 자신의 도움 빈센트 롭 덕분에 내 마지막 코드입니다. 이는 어떤 크기의 영역에 대해 data-type = "background"를 사용해야하는 시차 스크롤과 함께 작동해야합니다. 속도는 브라우저 높이와 배경 이미지 크기에 의해 결정됩니다. 다시 한번 감사드립니다. 이미지가 포함 된 사업부가, 그런 일이 확인을해야 imgWindow와

$(function(){ 
     $(window).bind('scroll', function() { 
      $window = $(window); 
      $('section[data-type="background"]').each(function(){ 
      var $bgobj = $(this); 
      var windowHeight = 0; 
       windowHeight = document.body.clientHeight; 
      var img = new Image; 
       img.src = $(this).css('background-image').replace(/url\(|\)$/ig, ""); 
      var bgImgHeight = parseInt(img.height); 
      var divHeight = parseInt($(this).css('height')); 
      var scrollPos = $(this).position().top - $window.scrollTop(); 
       var bgMovement = bgImgHeight - divHeight; 
       var scrollMovement = windowHeight + divHeight; 
       var intPos = scrollPos + divHeight; 
       var yPos = ((bgMovement)/(scrollMovement)) * intPos; 
       var coords = '50% '+ (-yPos) + 'px'; 
       $bgobj.css({ backgroundPosition: coords }); 
      }); 
     }); 
    }); 
+0

내가이 표시되지 않는 :

// get the maximum window scroll var deseapearPos = $(window).height() - $('#imgWindow').offset().top; var imgWindowHeight=('#imgWindow').height(); var imageHeight = 500; $(window).scroll(function() { var currWinPos = $(window).scrollTop(); if (currWinPos < deseapearPos) { // if imageWindow still on sight var newPos = /* your computation here */ // (smthg like newPos = (imageHeight - imgWindowHeight) * (currWinPos/ deseapearPos)); $('#imgWindow').scrollTop(newPos); } }); 

(스크롤 imgWindow CSS의 스타일은 오버 플로우가 있습니다) 여기 질문해라. 그냥 해 ! 당신은 모든 계산이 완료되었습니다 : 이벤트를 연결하고, 수학을 수행하고, 올바른 항목의 .style.pos를 변경하고, 필요하다면 preventDefault 또는 stopPropagation을하면 작업이 완료된 것입니다. – GameAlchemist

+0

안녕 빈센트, 응답 주셔서 감사합니다. 너는 내가 모든 것을 가지고 있다고 생각할거야. 나는 모든 것을 움직일 수는 있지만 동기화가 약간 떨어져서 수학의 마지막 부분에 이릅니다. div가 -50 (~ 200)에서 시작되고 bg가 0 (~ -100)에서 시작될 때 올바른 거리로 이동하려면 어떻게해야합니까? 내 수학에 뭔가 빠졌어? 이 수치는 모두 동적으로 계산되므로 가상의 btw입니다. 미안하지만 말이 안되면. – BoragThungg

+0

당신이하고 싶은 것을 설명하지 않았습니다. 이미지의 상단을보고 div를 뷰 포트의 맨 아래에 정렬하고 div가 상단으로 스크롤 될 때 div가 뷰 포트의 맨 위에 오도록 (또는 그 반대로) 밑줄을 정렬 시키시겠습니까? 또한 div 위쪽에서 문서까지의 거리를 고려한 전체 계산을 표시해야합니다. – RobG

답변

1

:

+0

감사합니다 빈센트. 내가 직장에서 들어올 때 시험해 볼게. – BoragThungg

+0

감사합니다. Vincent.당신이 내게 준 것은 완전히 필요한 것은 아니지만 div의 오프셋과 윈도우 높이에 대해 더 많이 생각하게 만들었습니다. 내 코드는 매우 효율적이지는 않지만 좋은 출발점입니다. 다시 한번 감사드립니다. – BoragThungg

+0

기꺼이 도와 드리겠습니다! div를 스크롤 바를 숨기려면 래퍼 div 안에 두는 것을 잊지 마십시오! 여기에 설명 된 것처럼 : http://stackoverflow.com/questions/3293650/hide-scrollbar-while-still-able-to-scroll-with-mouse-keyboard – GameAlchemist