У меня есть ссылка, которую я хочу, чтобы пользователь нажал. Когда они нажимают ее, маршрутизатор переходит к определенному шаблону, а затем запускает код Smoothscroll.js для анимации и прокрутки вниз до тега привязки.
//When the user clicks on the link to get to the #contact anchor...
//The code below does not work.
Router.go('index');
$('html,body').animate({
scrollTop: $('#contact').offset().top
}, 1200);
Router.go('index')
работает нормально.
$('html,body').animate({
scrollTop: $('#contact').offset().top
}, 1200);
Работает также сам по себе на индексном шаблоне.
Но когда я пытаюсь запустить их вместе, роутер уходит в индекс, но прокрутка не работает.
Любая идея, как я могу это сделать?
ИЗМЕНИТЬ
Это то, что у меня есть для последнего Meteor 1.0+ и пути типа /#contact
Router.route('/', {
name: 'index'
});
Router.onAfterAction(function() {
var self = this;
// always start by resetting scroll to top of the page
$(window).scrollTop(0);
// if there is a hash in the URL, handle it
if (this.params.hash) {
// now this is important : Deps.afterFlush ensures that iron-router rendering
// process has finished inserting the current route template into DOM so we
// can manipulate it via jQuery, if you skip this part the HTML element you
// want to scroll to might not yet be present in the DOM (this is probably
// why your code fails in the first place)
Tracker.afterFlush(function() {
if (typeof $("#" + self.params.hash).offset() != "undefined"){
var scrollTop = $("#" + self.params.hash).offset().top;
$("html,body").animate({
scrollTop: scrollTop
});
}
});
}
});