Bacon.js - ignoring certain values ​​in the stream

Assuming the following code (current status can be viewed here ):

function scrollTopFromEvent(evt) {
    return $(evt.target).scrollTop();
}

function scrollDirection(evt) {
    return -evt.originalEvent.wheelDelta / 120 || evt.originalEvent.detail / 3;
}

function pageNumber(previous, next) {
    return previous + next;
}

function scrollToPage(pageNumber) {
    var container = $('.parallax');
    TweenLite.to(container, 1, {
        scrollTop: container.height() * (pageNumber)
    });
}

function inRange(pageNumber) {
    var totalPages = $('.parallax').find('div[id^="group"]').length;
    return pageNumber >= 0 || pageNumber <= totalPages;
}
var scroll = $('.parallax')
    .asEventStream('mousewheel DOMMouseScroll')
    .doAction('.preventDefault').flatMap(scrollDirection);

var page = scroll
    .scan(0, pageNumber)
    .filter(inRange)
    .log()
    .onValue(scrollToPage);

I want to limit the values ​​coming from a stream pagefrom 0 to n , nwhich is totalPages(defined in inRange). In this particular case, there are 7 groups, so the range will be from 0 to 7

If the user scrolls to "7" and continues to scroll, no values ​​will be selected in the scroll flow.

Ideas?

thank

0
source share
2 answers

, scroll.scan(0, pageNumber) , "" , .

Try

var totalPages = $('.parallax').find('div[id^=group]').length; // static, right?

function pageNumber(previous, next) {
    return Math.max(0, Math.min(totalPages, previous + next));
}

scroll.scan(0, pageNumber).onValue(scrollToPage);
+2

, :

pageNumber:

return previous + next >= $('.parallax__group').length ? previous : previous + next;

inRange:

return pageNumber >= 0 && pageNumber < totalPages;

fiddle, .

0

All Articles