2014-07-16 3 views
1

전달 된 요소의 배경 이미지를 시차로 스크롤하도록이 함수를 만들었습니다.시차 배경 스크롤 수식 - 예제 포함

  • 보기 포트의 높이가 배경 이미지의 높이보다 크거나 같으면이 기능이 훌륭하게 작동합니다.
  • 그러나보기 포트의 높이가 배경 이미지의 높이보다 작 으면 이미지가 너무 빠르게 스크롤됩니다.

아래 예제에서보기 포트가 600px (600px는 무지개 이미지의 높이)보다 작 으면 무지개 배경이 회색 요소를 제대로 덮지 않습니다 (완전히 덮어야 함). 항상 그렇지만 스크롤 속도가 너무 빠름)

나는 yB에서 필요한 추가 용어를 알아낼 수 없습니다. 배경을 동적으로 상쇄시키기위한 방정식을 올바른 방향으로 가르쳐 주시겠습니까?

jsfiddle가 다시 : http://jsfiddle.net/3htbj/

/** 
    Get the height of the passed element's background image. 
    @param {element} element - An element. 
    @returns {int} The height of the background. 
***************************************************************************/ 
function getBackgroundHeight(element){ 
    return 600; 
} 

/** 
    Parallax scroll the passed element's background relative to the element. 
    @param {element} element - An element. 
***************************************************************************/ 
function parallaxScrollElement(element){ 
    var hV=window.innerHeight; 
    var hE=element.clientHeight; 
    var hB=getBackgroundHeight(element); 
    var yV=window.pageYOffset; //Relative to document. 
    var yE=element.getBoundingClientRect().top; //Relative to view-port. 
    var yB=((hB-hE)*yE)/(hE-hV); //Relative to element. 
    element.style.backgroundPositionY=yB+"px"; 
} 

/** 
    Parallax scroll all elements with CSS class 'parallax'. This function 
    should be called onScroll. 
***************************************************************************/ 
function parallaxScroll(){ 
    var parallaxScrollElements=document.getElementsByClassName("parallax"); 
    for(var i=0;i<parallaxScrollElements.length;i++) 
     parallaxScrollElement(parallaxScrollElements[i]); 
}; 

window.onscroll=function(){ 
    parallaxScroll(); 
} 

window.onresize=function(){ 
    parallaxScroll(); 
} 

답변

2

당신은 페이지의 콘텐츠와 함께 스크롤 시차 찾고 있다면, 시도 :

var yB=((yE)/(hV))*(hE-hB); 
1

은 내가 가진이 경우 사람에서 일 다음을 관심 :

var yB=(1-((yE+hE)/(hV + hE)))*(hE-hB); //Relative to element.