Невозможно переназначить или увеличить переменную (float)

0

В разных точках этого кода я пытаюсь увеличить pixSearchMoved на 1. В настоящее время, согласно console.log, он застрял в 0.

И я знаю, что он застрял в 0, потому что код в других условиях, для которых он равен 1 или больше, не выполняется.

Как я могу увеличить эту переменную?

var lastScrollTop = 0;
$(window).scroll(function(){
    var st = $(this).scrollTop();
    if (st <= lastScrollTop) {
        if (!isElementInViewport(document.getElementById('header'))) {
            var pixelsSearchMoved = 0;
            var pixelsScrollMoved = $(this).scrollTop();
            while (pixelsSearchMoved <= 18) {
                var last_pixelsScrollMoved = pixelsScrollMoved;
                pixelsScrollMoved = $(this).scrollTop();
                if(pixelsSearchMoved === 0){
                    $('#searchInput').addClass('slideBack').css('top', '-22px');
                    console.log('pixelsSearchMoved is:'+pixelsSearchMoved);
                    pixelsSearchMoved++;
                }
                else if (pixelsSearchMoved === 1) {
                    var x = '-22px';
                    $('#searchInput').css('top', parseFloat(x)+3+'px');
                    pixelsSearchMoved++;
                }
                if (pixelsSearchMoved > 1 && (last_pixelsScrollMoved = pixelsScrollMoved + 1)) {
                    var x = $('#searchInput').css('top');
                    $('#searchInput').css('top', parseFloat(x)+3+'px');
                    console.log('moved up one!');
                    pixelsSearchMoved++;
                }
                break;
            }
            $('#headerTopBar').css('position', 'fixed').css('top', '0').fadeIn();
        }
        else {
            console.log('header in viewport');
        }
    }
    lastScrollTop = st;
});
  • 0
    Пожалуйста, isElementInViewport источник вашей функции isElementInViewport
  • 0
    Пожалуйста, создайте jsfiddle.net, который воспроизводит проблему.
Теги:

2 ответа

2

Вы должны удалить оператор break из цикла. Он прерывает цикл после первого выполнения.

0

Вот проблемы, которые я заметил:

var lastScrollTop = 0;
$(window).scroll(function () {
    var st = $(this).scrollTop();
    if (st <= lastScrollTop) {
        if (!isElementInViewport(document.getElementById('header'))) {
            // here you set pixelsSearchMoved = 0
            var pixelsSearchMoved = 0;
            var pixelsScrollMoved = $(this).scrollTop(); // use st instead
            // 0 is always <= 18
            while (pixelsSearchMoved <= 18) {
                var last_pixelsScrollMoved = pixelsScrollMoved;
                pixelsScrollMoved = $(this).scrollTop(); // use st instead
                // this first condition is always true because you explicitly set pixelsSearchMoved to 0 above
                if (pixelsSearchMoved === 0) {
                    $('#searchInput').addClass('slideBack').css('top', '-22px');
                    console.log('pixelsSearchMoved is:' + pixelsSearchMoved);
                    // here you increment, but it useless as the other conditions will never be executed
                    // and you explicitly drop out of your loop below
                    pixelsSearchMoved++;
                }
                // this will never execute as you are not updating the value before the comparison
                else if (pixelsSearchMoved === 1) {
                    var x = '-22px';
                    $('#searchInput').css('top', parseFloat(x) + 3 + 'px'); // parseFloat('-22px') will always be -22, just use a static string instead
                    pixelsSearchMoved++;
                }
                // the below will never execute as you've set last_pixelsScrollMoved = pixelsScrollMoved above
                // so it can never be last_pixelsScrollMoved = (pixelsScrollMoved + 1)
                // also, = is an assignment, == or === are comparisons
                if ((pixelsSearchMoved > 1) && (last_pixelsScrollMoved = pixelsScrollMoved + 1)) {
                    var x = $('#searchInput').css('top');
                    $('#searchInput').css('top', parseFloat(x) + 3 + 'px');
                    console.log('moved up one!');
                    pixelsSearchMoved++;
                }
                // drops you out of your loop
                break;
            }
            $('#headerTopBar').css('position', 'fixed').css('top', '0').fadeIn();
        } else {
            console.log('header in viewport');
        }
    }
    lastScrollTop = st;
});

Если вы можете опубликовать скрипт, воспроизводящий проблему, мы сможем предоставить больше информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню