2013-08-22 78 views
0

我有一個使用mousewheel jQuery插件的水平滾動網站。滾動工作,但我想將每個「文章」捕捉到文檔的左側,以便一旦停止滾動時它不會保持中途切斷。水平滾動後jQuery捕捉

的標記我到目前爲止有:

CSS

#viewport { 
width:100%; 
height:100%; 
overflow: hidden; 
} 

#stage { 
height:100%; 
width:400%; 
position: absolute; 
display:block; 
overflow: hidden; 
} 

#stage article { 
width:25%; 
height:100%; 
position: relative; 
display:block; 
float:left; 
} 

HTML

<div id="viewport"> 
<section id="stage" class="clearfix"> 
<article> 
This is the block that should snap to the left once scrolling is stopped. 
</article> 

<article> 
This is the block that should snap to the left once scrolling is stopped. 
</article> 

<article> 
This is the block that should snap to the left once scrolling is stopped. 
</article> 

<article> 
This is the block that should snap to the left once scrolling is stopped. 
</article> 

</section> 
</div> 

JQUERY

$(function() { 
$("html, body").mousewheel(function(event, delta) { 
this.scrollLeft -= (delta * 30); 
event.preventDefault(); 
}); 
}); 

我嘗試使用這個腳本不會有好結果。看起來百分比阻止瞭解前一個/下一個位置。

https://stackoverflow.com/a/8170667

在此先感謝。

回答

0

我不知道你上一個/下一個位置是什麼意思。

但是,您可以在每次滾動結束時檢查屏幕左側是否在最近的文章。如果沒有,向上滾動一點。

也許就像......

$(function() { 
    $("html, body").mousewheel(function(event, delta) { 

     var theBody = $('body'); 
     theBody.scrollLeft(this.scollLeft() - delta * 30); 

     /* Snap how close, how many articles, and what direction is the scroll? */ 
     var tolerance = 10; 
     var numberOfArticles = 4; 
     var signDelta = number?number<0?-1:1:0; 

     /* While you're not within an acceptable tolerance, get a little closer */ 
     while (!((theBody.scollLeft()%(theBody.width()/numberOfArticles)) > tolerance)) 
     { 
      theBody.scrollLeft(theBody.scollLeft() - signDelta * 1); 
     } 

     event.preventDefault(); 
    }); 
}); 
+0

大衛,按位置我的意思是前面或後面的文章。我正在測試的腳本會檢測第一篇文章離當前的距離,然後計算到scrollLeft的距離。這沒有用。我會嘗試你的建議。謝謝! – JessyR22

+0

然後,如果您的文章具有相同的寬度,那麼您可以確定您是否處於其寬度的倍數處,並朝向最接近的倍數移動。 所以當((scrollLeft%articleWidth)== 0)你排隊在一篇文章(假設第一篇文章排隊在零) – David

+0

大衛,我測試你的代碼,但返回scrollLeft()不是一個函數。我修復了拼寫錯誤,但仍然沒有骰子。我需要的只是,如果x文章是可見的,向左滾動左邊,直到它剩下0.是不是認爲這將是複雜的。 – JessyR22