2013-05-08 10 views
73

スクロールヘッダーを(スクロールして)ページを下にスクロールし、ページをスクロールして元の状態に戻す方法を考えます。ここclearifyするには、2つの例です:jQuery - スクロールダウン時に縮むスティッキーヘッダー

http://themenectar.com/demo/salient/

http://www.kriesi.at/themes/enfold/

が、私はそれを固定するために一部を得るが、どのように私は時にユーザーがスクロールダウン私のヘッダーを縮小したらいいですか?

おかげトン

+5

あなたのコードを投稿してください。あなたがこれまでに試みているか見てみましょう。 – pmandell

+0

このタイプのアニメーションヘッダーの名前はありますか? – zkent

答えて

102

これは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); 
     } 
    } 
}); 

デモンストレーション:ここ http://jsfiddle.net/jezzipin/JJ8Jc/

+1

夢のように動作します、ありがとうJezzipin。 – user2362529

+0

いいえ心配しないでください。私は助けることができてうれしい:-) – jezzipin

+0

良い仕事の男。 Keep on :) –

84

jezzipinのソリューションのCSSアニメーションフォーク、スタイリングからコードを区切るします。

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/

/touchmove "#header_nav" を「場合に設定されたCSSクラス "小さな" $(文書) .scrollTop() "が0より大きい。

CSSトランジション属性は、"高さ "と"バックグラウンドund "属性がうまくいきます。

+0

素敵な仕事。 IE9とIE8のユーザーにとっては、これらのブラウザではこのプロパティがサポートされていないため、移行は行われません。それとは別に、コード内でdom操作の量を減らしたい人にとっては、優れたソリューションです。 http://caniuse.com/#search=transition – jezzipin

+6

@Sinkyクラスを1行で切り替えることができます '$( '#header_nav')。toggleClass( 'tiny'、$(document).scrollTop()> 0); ' – Eric

+2

受け入れられる答えであるべきです。はるかにクリーンなソリューションです。 –

3

twitterスクロールのトラブル(http://ejohn.org/blog/learning-from-twitter/)に基づいています。

$(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> 
ここ

は、(モバイルデバイス用に便利)

JS JSスクロールイベントを絞る、私の解決策であります

http://codepen.io/anon/pen/BgqHw

+0

すべてのスクロールイベントでコードを実行する際のパフォーマンス上の問題を考慮して、非常に役立つリンクと改善されたソリューション...ありがとう! $(document)要素をキャッシュしましたが、$( '。menu)elをキャッシュして、毎回コードを取得しないようにすることもできます。 – nabrown78

0

私はjezzipinの答えのアップグレード版をやった(と私はパディングトップの代わりの高​​さをアニメーション化していますが、あなたはまだポイントを得る。

/** 
* 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() 
}) 
関連する問題