Je me demande comment faire pour réduire l'en-tête collant (avec animation) lorsque vous faites défiler la page et que vous reveniez à l'état normal lorsque la page est défilée vers le haut. Voici deux exemples à clarifier:
http://themenectar.com/demo/salient/
http://www.kriesi.at/themes/enfold/
J'obtiens la pièce pour la réparer, mais comment dois-je réduire mon en-tête lorsque l'utilisateur fait défiler l'écran vers le bas?
Merci beaucoup
Cela devrait être ce que vous cherchez avec jQuery.
$(function(){
$('#header_nav').data('size','big');
});
$(window).scroll(function(){
if($(document).scrollTop() > 0)
{
if($('#header_nav').data('size') == 'big')
{
$('#header_nav').data('size','small');
$('#header_nav').stop().animate({
height:'40px'
},600);
}
}
else
{
if($('#header_nav').data('size') == 'small')
{
$('#header_nav').data('size','big');
$('#header_nav').stop().animate({
height:'100px'
},600);
}
}
});
Manifestation: http://jsfiddle.net/jezzipin/JJ8Jc/
Voici une fourchette d’animation CSS de la Solution de jezzipin, pour séparer le code du style.
JS:
$(window).on("scroll touchmove", function () {
$('#header_nav').toggleClass('tiny', $(document).scrollTop() > 0);
});
CSS:
.header {
width:100%;
height:100px;
background: #26b;
color: #fff;
position:fixed;
top:0;
left:0;
transition: height 500ms, background 500ms;
}
.header.tiny {
height:40px;
background: #aaa;
}
http://jsfiddle.net/sinky/S8Fnq/
Sur scroll/touchmove, la classe css "tiny" est définie sur "#header_nav" si "$ (document) .scrollTop ()" est supérieure à 0.
L'attribut de transition CSS anime bien les attributs "height" et "background".
http://callmenick.com/2014/02/18/create-an-animated-resizing-header-on-scroll/
Ce lien contient un excellent tutoriel avec le code source auquel vous pouvez jouer, montrant comment réduire la taille des éléments de l’en-tête ainsi que celle de l’en-tête.
Basé sur les problèmes de défilement de Twitter ( http://ejohn.org/blog/learning-from-Twitter/ ).
Voici ma solution, limiter l'événement js scroll (utile pour les appareils mobiles)
JS:
$(function() {
var $document, didScroll, offset;
offset = $('.menu').position().top;
$document = $(document);
didScroll = false;
$(window).on('scroll touchmove', function() {
return didScroll = true;
});
return setInterval(function() {
if (didScroll) {
$('.menu').toggleClass('fixed', $document.scrollTop() > offset);
return didScroll = false;
}
}, 250);
});
CSS:
.menu {
background: pink;
top: 5px;
}
.fixed {
width: 100%;
position: fixed;
top: 0;
}
HTML:
<div class="menu">MENU FIXED ON TOP</div>
J'ai fait une version améliorée de la réponse de jezzipin (et j'anime le rembourrage au lieu de la hauteur mais vous obtenez toujours le point.
/**
* ResizeHeaderOnScroll
*
* @constructor
*/
var ResizeHeaderOnScroll = function()
{
this.protocol = window.location.protocol;
this.domain = window.location.Host;
};
ResizeHeaderOnScroll.prototype.init = function()
{
if($(document).scrollTop() > 0)
{
$('header').data('size','big');
} else {
$('header').data('size','small');
}
ResizeHeaderOnScroll.prototype.checkScrolling();
$(window).scroll(function(){
ResizeHeaderOnScroll.prototype.checkScrolling();
});
};
ResizeHeaderOnScroll.prototype.checkScrolling = function()
{
if($(document).scrollTop() > 0)
{
if($('header').data('size') == 'big')
{
$('header').data('size','small');
$('header').stop().animate({
paddingTop:'1em',
paddingBottom:'1em'
},200);
}
}
else
{
if($('header').data('size') == 'small')
{
$('header').data('size','big');
$('header').stop().animate({
paddingTop:'3em'
},200);
}
}
}
$(document).ready(function(){
var resizeHeaderOnScroll = new ResizeHeaderOnScroll();
resizeHeaderOnScroll.init()
})