2015-04-23 4 views
0

Я пытаюсь создать гладкие переходы страницы на своем веб-сайте, чтобы пользователь не ощущал «загрузку страницы», когда он нажимает ссылку на другую страницу. Два примера того, что я хочу, это minimalissimo.com и defringe.com. Когда вы нажимаете ссылку на другую статью на любой странице этих сайтов, страница оживляет прокрутку вверх до начала загрузки следующей страницы.Как прокрутить страницу вверх до перехода на другую страницу, когда пользователь нажимает на ссылку?

До сих пор у меня есть следующий код:

jQuery(document).ready(function($){ 

    $back_to_top = $('.link-to-article'); 

    $back_to_top.on('click', function(){ 
    $("html, body").animate({scrollTop:0},260); 
    }); 

}); 

Приведенный выше код не работает, нет прокрутки не происходит при нажатии на ссылку с этим классом; однако, если я использую запрет по умолчанию, то страница выполняет прокрутку вверх, но, конечно, следующая страница не открывается, поскольку ссылка отключена с помощью предупрежденияDefault.

Пожалуйста, дайте мне знать, если вы можете помочь. Спасибо.

ответ

5

Вы правы, что вам нужно будет использовать preventDefault, но вы также должны вручную перенаправить раз завершения анимации:

$back_to_top.on('click', function(){ 
    var href = $(this).attr('href'); 
    $(document.body).animate({scrollTop:0}, 260, function() { 
     window.location.href = href; 
    }); 
    return false; 
}); 
+0

Я скопировал свой код и он работал отлично, даже без добавления 'preventDefault'. Тем не менее, меня просто беспокоит, есть ли риск использования 'window.location.href', чтобы заставить ссылки работать. Нужно ли беспокоиться о том, что ссылки не работают, если кто-то отключил javascript или использовал старый браузер или что-то еще? Благодаря! –

+0

@SameerZahidd: Нет, у вас все еще будет изящное ухудшение, так как клик не будет перехвачен вообще, если javascript не включен. Щелкните правой кнопкой мыши «открыть на новой вкладке» и т. Д., Так как адрес указан в 'href' (но это не приведет к прокрутке). То, что вы потеряете при таком подходе, будет «target» исходной ссылки. Если это важно для вас, вы можете попробовать поймать только первый клик, используя [.one] (http://api.jquery.com/one/), а затем вызывать 'click' вручную в конце этого события. Но если вы не полагаетесь на «цель», я бы сказал, что вышеупомянутое решение более аккуратное. –

+0

Хорошо, что имеет смысл, и никакая цель не важна для меня. Я просто использую то, что вы показали выше. Большое спасибо! –

1
jQuery(document).ready(function ($) { 
    $back_to_top = $('.link-to-article'); 

    $back_to_top.on('click', function (e) { 
     e.preventDefault(); 
     $this = $(this); 
     $("html, body").animate({ 
      scrollTop: 0 
     }, 260, function() { 
      window.location.href = $this.attr('href'); 
     }); 
    }); 
}(jQuery));