У меня есть следующий код, который позволяет мне добавлять и удалять класс, когда пользователь достигает определенной точки прокрутки страницы, и их, я хочу анимировать заголовок
$(document).scroll(function (e) {
var value = $(this).scrollTop();
if (value > 150) {
$( "body" ).addClass( "scroll" );
$( "header.head" ).stop().animate({top:'-30px'});
}
else {
$( "body" ).removeClass( "scroll" );
$("header.head" ).stop().animate({top:'0px'});
}
моя проблема в том, что начальная анимация (сверху: -30px) работает идеально, но они, когда я прокручиваю вверх, сверху: 0px не работает. а также, когда я прокручиваю вверх, а затем возвращаюсь назад, верх: -30px не повторяется
вы можете увидеть это здесь [образец] http://www.pabloscillia.com.ar/clientes/yumyum/ 1
мое намерение состоит в том, что при> 150 выполните анимацию, а затем, когда пользователь <150 выполняет другой (также не знает, почему анимация иногда длиннее, а иногда и короче)
я действительно не знаю, где искать, чтобы заставить его работать благодаря большому успеху
Дайте заголовку два класса, по умолчанию и исправлены, добавьте класс по умолчанию в заголовок <header class="default">
и напишите класс .fixed {...}
в CSS для стилизации заголовка, когда он исправлен. Здесь FIDDLE
<header class="default"></header>
header {
background: #555;
width: 100%;
height: 120px;
}
.default {
/* Add some properties to defaut if you wish */
}
.fixed {
position: fixed;
top: 0;
left: 0;
}
$(function() {
var header = $('header');
var headOff = header.offset();
$(window).scroll(function() {
if($(this).scrollTop() > 150 + headOff.top && header.hasClass('default')) {
header.fadeOut('fast', function() {
$(this).removeClass('default').addClass('fixed').fadeIn('fast').animate({ height: '70px'}, 350);
});
}
else if($(this).scrollTop() <= 150 + headOff.top && header.hasClass('fixed')) {
header.fadeOut('fast', function() {
$(this).removeClass('fixed').addClass('default').fadeIn('fast').animate({ height: '120px'}, 350);
});
}
});
});
Замените код следующим:
var $head = $("header.head"),
$body = $("body"),current=0;
$(document).scroll(function (e) {
var value = $(this).scrollTop();
if (value > 150) {
if (current==1) return;
current=1;
$head.stop();
$body.addClass("scroll");
$head.css({top: -150});
$head.animate({
top: '-30'
},"fast");
} else {
if (current==2) return;
current=2;
$head.stop().animate({
top: '-150'
}, "fast",endScrollClass);
}
});
function endScrollClass() {
$body.removeClass("scroll");
$head.css('top',0)
}
это запустит endScrollClass в конце анимации(), а не запускает анимацию каждый раз и т.д., я сделал скрипку здесь;