我已经看过这个jQuery: snapped scrolling - possible?和Scrollable Panel snap to elements on Scroll了。但他们并没有真正回答我的问题。
我有一个非常宽但与窗口高度相同的div。当用户滚动时,它很好地向左移动。但是,当用户停止滚动时,我可以将此滚动条捕捉到。 因此容器在开始时位于左侧28px处,我希望它在开始时捕捉,然后每隔207px取决于用户接近哪个捕捉点。
---------------------
|-------------------|-------------------
| | |
| | |
|-------------------|-------------------
---------------------
当我没有使用jQuery时,除了容器的宽度。
var numOfPosts = jQuery(".blog-post").length;
var div5 = numOfPosts/5;
var gutters = Math.ceil(div5)*10;
var posts = Math.ceil(div5)*197;
var postListWidth = gutters + posts + 9;
var w = jQuery(window).width();
var h = jQuery(window).height();
if(postListWidth<=w){
jQuery(".post-list").width(w-28);
}else{
jQuery(".post-list").width(postListWidth);
}
有谁知道实现这一目标的最佳方法?我更愿意知道代码,所以如果有解决方案你能解释一下吗?我正在学习jQuery,但是我不知道有关于-.-的负载 非常感谢我的帮助。
答案 0 :(得分:4)
我希望你的意思是水平滚动按钮。从你的图表来看,它看起来更像是你的意思。如果是这种情况,你可以做一些类似this jsfiddle中所展示的内容。它使用this scrollstop event plugin知道何时将滚动设置为最近的间隔。使用此插件代码(放在scrollstop插件代码之后):
(function($) {
$.fn.scrollSnap = function(snapInterval) {
var mousedown = false;
function nearestInterval(n, iv) {
return Math.round(n / iv) * iv;
}
function snapToInterval() {
if(mousedown) {
$(window).one("mouseup", snapToInterval);
} else {
var $this = $(this),
snapLeft = nearestInterval($this.scrollLeft(), snapInterval);
$(this).animate({scrollLeft: snapLeft});
}
}
$(window).mousedown(function() { mousedown = true });
$(window).mouseup(function() { mousedown = false });
this.each(function() {
$(this).bind("scrollstop", snapToInterval);
});
}
})(jQuery);
然后,您就可以在带有滚动条的元素上使用它:
$("#scrollWrapper").scrollSnap(207);
对于预建解决方案,您可能需要查看jQuery Tools Scrollable。
答案 1 :(得分:1)