Хм, идеи у нас есть!
Если проблема заключается в изменении позиции, чем привязка прокрутки к одному элементу вместо фиксированного пикселя;
допустим в меню вы кнопки имеют с Я не знаю, класс: 'пункта меню':
Предполагая
<img class="menu-item" data-target="#my-target-selector"/>
так:
var menuSelector
menuSelector = $('.menu-item');
menuSelector.on('click', function(event){
event.preventDefault();
var $self, target;
$self = $(this);
target = $self.data('target');
// Go
$.smoothScroll({
scrollTarget: target
});
});
Это это только одна идея о том, как его решить :) Элементы могут иметь смещение, пересчитываемое окном, каждый раз, когда они меняются, оно является родным. Так что безопаснее полагаться на него.
О, и я supose вы говорите об этом smoothscroll: https://github.com/kswedberg/jquery-smooth-scroll
Ура!
---- Обновление
После того как я посмотрел на свой веб-сайт, я понял. «Проблема» - это порядок действий.
Вы скрываете заголовок, преобразуя его в мини-заголовок, в то время как прокрутка вычисляется, в этом случае вы должны использовать обратный вызов и прокрутку после того, как вы спрячете заголовок, или используйте другую функцию css для достижения мини- заголовок.
Как я справляюсь лучше с JavaScript, давайте создадим одну идею для вас :)
Здесь я немного изменился, но главная идея потока: Скрыть ваш заголовок первого, а затем прокрутите вниз.
Я взял функцию из ваших core.js файл
var menuSelector, hideHeader, showHeader, $window, $header, $head;
$window = $(window);
$header = $(".header-top");
$head = $("header");
hideHeader = function(next){
$header.removeClass('.header-top').addClass("fixed");
$head.addClass("mini");
if(next !== undefined){
next();
}
};
showHeader = function(next){
$header.removeClass("fixed").addClass('.header-top');
$head.removeClass("mini");
if(next !== undefined){
next();
}
};
$window.scroll(function() {
var scroll = $window.scrollTop();
if (scroll >= 40) {
hideHeader();
} else {
showHeader();
}
});
menuSelector = $('.menu-item');
menuSelector.on('click', function(event){
event.preventDefault();
var $self, target;
$self = $(this);
target = $self.data('target');
// Let's hide first and scroll later
hideHeader(function(){
$.smoothScroll({
scrollTarget: target
});
})
});
Все еще не работает должным образом, она прокручивается о 500px после #anchor, это вычислить смещение от высоты элемента, прежде чем добавить класс.mini – Onda
Теперь я понимаю, что я посмотрел ваш сайт, я обновлю ответ :) – DiegoYungh
Я бы предложил изменить этот прослушиватель onSCroll и проверить состояние заголовка. Я могу предоставить его позже, если вам нужно. С вашим текущим кодом вы скрываете/показываете заголовок много раз в секунду, что плохо для производительности, вы можете сохранить состояние, создав свойство типа $ header.state = 'mini', а затем проверите его перед любым action on onClroll: if ($ header.state! == 'mini' && scroll> = 40) ... – DiegoYungh