所有文档都讨论了航点何时到达视口(viewport)的顶部,但是我希望当航点的任何部分位于视口(viewport)的中心时触发。
如果我向下滚动,此代码效果很好,但是当我向上滚动时,它很无效。
$('.section').waypoint(function(direction) {
highlight('#' + this.id);
}, {
context: '#scroll',
offset: function (direction) {
return $(this).height();
}
});
我尝试了下面的代码和几个变体,但它从未命中任何一个return语句。
$('.section').waypoint(function(direction) {
highlight('#' + this.id);
}, {
context: '#scroll',
offset: function (direction) {
if (direction == 'down') {
return -$(this).height();
} else {
return 0;
}
}
});
因此,现在我基于航点示例尝试这样做,但是$ active.id不能像this.id那样工作,因此我的功能“highlight”失败了。
$('.section').waypoint(function (direction) {
var $active = $(this);
if (direction == 'down') {
$active = $active.prev();
}
if (!$active.length) {
$active = $(this);
}
highlight($active.id);
}, {
context: '#scroll',
offset: function (direction) {
return $(this).height();
}
});
最佳答案
offset
选项没有方向参数。我很想知道您是否从文档中的某处获得了该信息,因为如果在direction
函数中存在使用offset
的部分,那是一个错误。
您可以使用%偏移量来告诉航点在元素顶部到达视口(viewport)中间时触发:
offset: '50%'
如果您需要在向上滚动和向下滚动时具有不同的偏移,最好通过创建两个不同的航路点来实现:
var $things = $('.thing');
$things.waypoint(function(direction) {
if (direction === 'down') {
// do stuff
}
}, { offset: '50%' });
$things.waypoint(function(direction) {
if (direction === 'up') {
// do stuff
}
}, {
offset: function() {
// This is the calculation that would give you
// "bottom of element hits middle of window"
return $.waypoints('viewportHeight') / 2 - $(this).outerHeight();
}
});