2013-03-15 64 views
1

我想創建一個無縫滾動頁面我正在建設有一個內部滾動div。以下是我希望它工作的方式:頁面滾動+內部滾動Div與JS和CSS

  1. 用戶向下滾動頁面,直到scrollTop達到div的頂部。
  2. div從overflow:hidden變爲overflow:scroll。
  3. 用戶然後滾動div,直到它們結束。
  4. 頁面開始再次滾動,div從溢出返回:滾動到溢出:再次隱藏。 (這是如此,如果他們反向滾動備份頁面,當他們擊中div時,它不會開始滾動過早。)

該過程應該以相反的方式工作。我認爲使用狀態可能會有幫助。我的三個狀態是,。如果你通過門檻,你的狀態是,它更改爲和股利「解鎖」滾動。然後,當你完成滾動的div,它自然推動整個頁面。狀態從轉換爲

我的問題是,如果你滾動速度太快,瀏覽器不會註冊這些變化,直到爲時已晚,div已經過去了。我寫了這個代碼來管理過渡:

function onScroll() { 
    if (cur_coord > cap_y && 
      cap_state == 'pre') { // Pre -> On 
     container.css({ 'overflow-y':'scroll'}); 
     $(window).scrollTop(cap_y); 
     cap_state = 'on'; 
    } else if (cur_coord > cap_y && 
      cap_state == 'on') { // On -> Post 
     container.css({ 'overflow-y':'hidden'}); 
     cap_state = 'post'; 
    } else if (cur_coord < cap_y && 
      cap_state == 'post') { // Post -> On 
     container.css({ 'overflow-y':'scroll'}); 
     $(window).scrollTop(cap_y); 
     cap_state = 'on'; 
    } else if (cur_coord < cap_y && 
      cap_state == 'on') { // On -> Pre 
     container.css({ 'overflow-y': 'hidden'}); 
     cap_state = 'pre'; 
    } 
} 

和我創建了一個以小提琴演奏:

http://jsfiddle.net/vD8kQ/6/

任何思考一個我怎麼可能做出這種無縫滾動體驗?

謝謝!

回答