Странная проблема со смещенной вершиной в jquery

0

Обычно я могу понять эти вещи, но на основе того, что я вижу, кажется, что этот код отключен примерно на 700 пикселей от фактического смещения.

То, что я делаю здесь, в основном блокирует кнопку только под фиксированным заголовком, когда вы прокручиваете ее. Тестирование вывода на консоль я вижу, что кнопка имеет около 713 пикселей сверху в соответствии с этим кодом. Однако на самом деле это примерно 1300 пикселей от вершины. 713 пикселей ссылаются примерно на середину другого элемента, поэтому логически это невозможно для меня, чтобы получить это число.

Вот мой код.

    window.contOffset = jQuery('#cont-step3').offset();
    window.contWidth = jQuery('#cont-step3').outerWidth();
    jQuery(window).scroll(function(){
        if(window.contOffset.top<jQuery(document).scrollTop()){
            jQuery('#cont-step3').css({
                position:'fixed',
                top:'70px',
                left:window.contOffset.left+'px',
                width:window.contWidth+'px'
            });
        }else{
            jQuery('#cont-step3').removeAttr('style');
        }
        console.log(window.contOffset,jQuery(document).scrollTop());
    });
    jQuery('#core-values2').sortable({
        update:function(event,ui){
            updateValues();
        }
    });

Проблема может просто не выпрыгивать из меня, моя логика в этом коде заключается в том, что когда пользователь прокручивает элемент (примерно 1300 пикселей, но сайт реагирует, поэтому я должен его вычислить). Он добавит встроенный стиль к элементу, придав ему фиксированную позицию. Когда пользователь выполняет прокрутку, он удаляет его. Очень простая концепция, а не много кода, эта проблема меня насторожила, и для скрипта, который занимает не более 5 минут, я уже провел отладки на 2 часа.

Кто-нибудь еще сталкивается с этим? Я просто что-то упустил? Раньше я использовал подобный метод без проблем.

Я использую jQuery 1.10.2

работа в процессе скрипта здесь. jsfiddle не прокручивает/не разрешает, так что этому примеру может понадобиться нечто большее, чтобы даже попытаться протестировать.

Теги:
scrolltop

1 ответ

0
Лучший ответ

Проблема заключалась не только в проверке завершения dom, но и повторной инициализации события с КАЖДОЙ заменой в dom, любой другой javascript, который может изменить свойство (например, меню), отбрасывает событие прокрутки.

Мне удалось подключить функцию для удаления, а затем повторно инициализировать событие каждый раз, когда есть что-то изменить и что сработало.

jQuery(window).off('scroll').on('scroll',function(){
        if(window.contOffset.top<jQuery(document).scrollTop()){
            jQuery('#cont-step3').css({
                position:'fixed',
                top:'70px',
                left:window.contOffset.left+'px',
                width:window.contWidth+'px'
            });
        }else{
            jQuery('#cont-step3').removeAttr('style');
        }
        console.log(window.contOffset,jQuery(document).scrollTop());
    });

Ещё вопросы

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