2015-02-16 3 views
0

Итак, я создаю сайт для друга, и я хочу, чтобы он прокручивал href-щелчки, что было легко, мне удалось сделать это с плавной анимацией. Но проблема в том, что, когда я загружаю страницу и нажимаю ссылку FIRST, прокрутка не является точной, и после того, как я нажму на что-либо после нажатия Test1, она снова не будет точной. Так как мне сложно объяснить, так что вы можете проверить его.Проблема с прокруткой jQuery

$(document).ready(function() { 

$('.click').click(function(e){ 
    // prevent default action 
    e.preventDefault(); 

    scrollToElement($(this).attr('href'), 1000); 
}); 

    var scrollToElement = function(el, ms){ 
    var speed = (ms) ? ms : 600; 
    $('html,body').animate({ 
     scrollTop: $(el).offset().top-102 
    }, speed); 
} 

}); 

Полный код здесь: http://jsfiddle.net/pxmfs78k/

Как проверить мою проблему:

Нажмите любую ссылку в первый раз, и тогда вы увидите, что DIV не позиционируется, где я хотел, чтобы это было, и если вы снова нажмете ту же ссылку, она будет правильно позиционировать, и после этого нет проблем при нажатии, пока вы не перезагрузите или не нажмете ссылку test1, первую.

Значит, любая идея, что может вызвать проблему?

И я прочитал эту https://stackoverflow.com/questions/19750702/jquery-scrolling-issues-with-scrolltop нить, и я не мог исправить свою проблему с объяснениями, приведенными там.

+0

Я хотел бы предложить пропускание конкретного идентификатора элемента – user2879041

+0

Это из-за липким нав. Когда страница загружается, она не липкая, но как только вы начинаете прокрутку. Я предлагаю вам удалить липкую вещь или добавить класс в организм, чтобы знать, когда он липкий или нет, и вы соответствующим образом корректируете свой расчет. Проблема не в вашем скрипте scrollTo –

+0

Или просто дайте прокладку телу, когда оно липкое. Я напишу ответ –

ответ

0

Это потому, что вы устанавливаете навигацию на липкую, таким образом, удаляя ее из потока, и весь контент вскакивает на 102px, чтобы исправить это, дать липкий класс телу вместо навигатора и использовать прописку бороться с ним. http://jsfiddle.net/pxmfs78k/1/

CSS

body.sticky { 
    padding-top: 102px; 
} 
body.sticky .nav { 
    position: fixed; 
    width: 100%; 
    left: 0; 
    top: 0; 
    z-index: 100; 
    border-top: 0; 
} 

JS

$(document).ready(function() { 
    var stickyNavTop = $('.nav').offset().top; 

    var stickyNav = function() { 
     var scrollTop = $(window).scrollTop(); 

     if (scrollTop > stickyNavTop) { 
      $('body').addClass('sticky'); 

     } else { 
      $('body').removeClass('sticky'); 
     } 
    }; 

    stickyNav(); 

    $(window).scroll(function() { 
     stickyNav(); 
    }); 
}); 



$(document).ready(function() { 

    $('.click').click(function (e) { 
     // prevent default action 
     e.preventDefault(); 

     scrollToElement($(this).attr('href'), 1000); 
    }); 

    var scrollToElement = function (el, ms) { 
     var speed = (ms) ? ms : 600; 
     $('html,body').animate({ 
      scrollTop: $(el).offset().top - 102 
     }, speed); 
    } 

}); 
+0

Да, это сработало, но прежде чем вы ответили мне, я сделал это немного по-другому, я установил навигация, чтобы иметь «липкий» класс все время, и он работал. Поэтому ваш первый ответ мне очень помог, спасибо вам большое. – zmuci

+0

Добро пожаловать, рад, что вы это решили –

Смежные вопросы