所有文档都讨论了航点何时到达视口的顶部,但我希望当航点的任何部分位于视口的中心时触发器发生。
如果我向下滚动,这段代码工作得相当好,但是当我向上滚动它时,它就不起作用了。
$('.section').waypoint(function(direction) {
highlight('#' + this.id);
}, {
context: '#scroll',
offset: function (direction) {
return $(this).height();
}
});
我尝试了下面的代码和几个变体,它甚至都没有命中任何一个返回语句。
$('.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一样工作,所以我的功能“突出显示”失败。
$('.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();
}
});
答案 0 :(得分:16)
offset
选项不带方向参数。我很想知道你是否从文档中的某个地方得到了这个,因为如果在direction
函数中有一个使用offset
的部分,那就错了。
当元素的顶部通过使用%offset抵达视口的中间时,您可以告诉要触发的航点:
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();
}
});