2015-12-19 23 views
10

jQuery ürününe yeni katılıyorum ve giderken kendimi eğitiyorum ama yukarı doğru ilerlerken beyaz gezinme arka planının panel 1'deki beyaz gezinme metnini gösterecek şekilde nasıl gösterileceğini anlamaya çalışıyorum.Gezinme geçişi

bartaile.com, ilham kaynağı olarak kullanmakta olduğum şeydir & Bartaile'ın navigasyonunda yaptığım değişiklikler ---> Kullanıcı ilk paneli geçtiğinde gezinme gizlendikten sonra, yalnızca kullanıcı yukarı kaydırıldığında gezinme gizlenir tekrar göster, panel 1 geri geldiğinde beyaz gezinme backgrouns gizlemek ve beyaz metni göstermek için yukarı kaydırın.

Bunun nasıl yapılacağını öğrenmek için herhangi bir yardım veya ipucu büyük ölçüde takdir edilecektir! :-)

var lastScrollTop = 0; 
 
$(window).on('scroll', function() { 
 
    var header = $('.header'); 
 
    var stage0 = $('.stage-0'); 
 
    var scrollTop = $(window).scrollTop(); 
 
    if (scrollTop > lastScrollTop) { 
 
     // down scroll 
 
     if (scrollTop > stage0.offset().top + stage0.height()) { 
 
      header.addClass('hide'); 
 
     } 
 
    } else { 
 
     // up scroll 
 
     if (scrollTop <= stage0.offset().top + stage0.height()) { 
 
      header.removeClass('headerBGchange headerLIchange'); 
 
\t \t \t 
 
     } else { 
 
      header.removeClass('hide').addClass('headerBGchange headerLIchange BGupTranistion'); 
 
     } 
 
    } 
 
    lastScrollTop = scrollTop; 
 
});
.header { 
 
    display: -webkit-box; 
 
    display: -webkit-flex; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-box-align: center; 
 
    -webkit-align-items: center; 
 
    -ms-flex-align: center; 
 
    align-items: center; 
 
    height: 80px; 
 
    -webkit-transition: top .5s ease; 
 
    transition: top .5s ease; 
 
    position: fixed; 
 
    width: 100%; 
 
    top: 0; 
 
    background-color: transparent; 
 
    overflow: hidden; 
 
} 
 

 
.header ul { 
 
    margin: 20px; 
 
    padding: 0; 
 
} 
 

 
.header ul li { 
 
    display: inline-block; 
 
    margin-right: 20px; 
 
    color: white; 
 
} 
 

 
.header ul li:last-child { 
 
    margin-right: 0; 
 
} 
 

 
.hide { 
 
    top: -80px; 
 
} 
 

 
.headerBGchange { 
 
    Background: white; 
 
} 
 

 
.BGupTranistion { 
 
} 
 

 
.header.headerLIchange ul li { 
 
    color: Blue; 
 
} 
 

 
.header.headerLIchange { 
 
\t border-bottom: 1px solid black; 
 
}' 
 

 
\t 
 

 

 
</style> 
 
<!--stage style--><style> 
 

 
.stage { 
 
    color: #fff; 
 
    display: -webkit-box; 
 
    display: -webkit-flex; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-box-pack: center; 
 
    -webkit-justify-content: center; 
 
    -ms-flex-pack: center; 
 
    justify-content: center; 
 
    -webkit-box-align: center; 
 
    -webkit-align-items: center; 
 
    -ms-flex-align: center; 
 
    align-items: center; 
 
    height: 100vh; 
 
    background-color: white; 
 
\t border-bottom: 1px solid black; 
 
    font-size: 48px; 
 
\t height: 200px; 
 
\t width: 100%; 
 
\t 
 
} 
 

 
.stage-0 { 
 
    background: grey; 
 
} 
 

 
.stage-24 { 
 
    background: #433937; 
 
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<div class="header"> 
 
    <ul> 
 
    <li>Home</li> 
 
    <li>About</li> 
 
    <li>Contact</li> 
 
    </ul> 
 
</div> 
 
<div class="stage stage-0">1</div> 
 
<div class="stage stage-2">3</div> 
 
<div class="stage stage-4">5</div> 
 
<div class="stage stage-6">7</div> 
 
<div class="stage stage-8">9</div> 
 
<div class="stage stage-10">11</div> 
 
<div class="stage stage-12">13</div> 
 
<div class="stage stage-14">15</div> 
 
<div class="stage stage-16">17</div> 
 
<div class="stage stage-18">19</div> 
 
<div class="stage stage-20">21</div> 
 
<div class="stage stage-22">23</div>

+0

bu çok daha kolay ile etkiyi elde edebilirsiniz. – Sam

+0

@Sam Nav çubuğu, sadece kayan (arka plan rengi değişimi ve metin rengi değişimi) dışındaki başka geçiş öğelerine sahiptir. – Dee

+1

Yapmanız gereken şey nedir, nasıl bir gösterge? Kullanıcıya geri bildiriminiz var mı? – Simplicity

cevap

6

Sen aradığınız etkiyi elde etmek için başka bir kapsayıcı eklemek gerekir. Esas olarak sahip olmak istediğiniz şey, üstte bir konteynır ve kaydırma davranışınıza bağlı olarak sönecek başka bir kapsayıcıdır. Peki bunu nasıl başarabilirsin? Sayfanın üst kısmında, gri kutunuz şu anda olduğu gibi bir Öğe oluşturun. Aşağı kaydırırken, dönüştürmeyin, bunun yerine, sayfanın üst kısmında değilken gezinme olarak hareket etmek için daha önce gizlenmiş başka bir kapsayıcıda kaybolur. Şimdi geriye kaydırırsanız, kaydırma konumunu kontrol edin ve her iki konteynerin iki konumu üst üste geldiğinde, sayfanın üst kısmında değilken kullandığınız kabı solmaya başlayabilirsiniz. Başka bir çözüm olduğunu düşünmüyorum. Şimdi bir kod yazmayı deneyebilirim ve eğer başarılı olsaydım, yazımı düzenlerim. Ayrıca gerçek başlığın ve z indeksinin içinde başka bir div ile çalışmayı deneyebilirsiniz, ancak bu gerçekten kötü olabilir.

İstediğinizi elde etmek için elimden geleni yaptım. İşte CodePen. İki farklı div, bir tane .dinamik-başlık ve bir normal başlık kullandım ve jQuery In-Viewport'u algılamak için bir işlev ekledim.

$.fn.isOnScreen = function(){ 
    var element = this.get(0); 
    var bounds = element.getBoundingClientRect(); 
    return bounds.top < window.innerHeight && bounds.bottom > 0; 
} 

Umarım bu sizin ihtiyaçlarınıza uyar. Ayrıca geçiş için Top-Property özelliğini kullanarak bazı CSS'yi değiştirdim. Bunların tümünü CSS sınıflarına aktarabilir ve bunun yerine kullanabilirsiniz, ancak bunun gösterim amaçlı en basit çözüm olduğunu düşündüm. İstediğin bu mu?

Düzeltme 1: Örnek olarak bartaile.com adını verdiniz. Yarattıkları ve yeniden yarattıkları etkiyi inceledim.

<div class="header-bg"></div> 
    <div class="header-content"> 
     <ul> 
     <li>YOUR HEADER</li> 
     </ul> 
    </div> 

Bunun için başka CodePen yaptı: Ne yapmak zorunda böyle bir yapı oluşturmak temelde. Başlık-bg'nin 0 yüksekliği vardır. Üstbilgi içeriği 80 piksel ve arka plan renginde saydamdır. Şimdi hangi yöne kaydırıldığını kontrol ETMEYİN. Efektin tek önemli yönü, tepeden ne kadar uzak olduğunuzda/viewport'ta belirli bir unsurdur? Üstten 400px için gittim. Şimdi bu gereksinim karşılandığında, sadece başlık-bg'de kaybolur. Sarmalayıcı ve içerik arasında yer alacak ve bir arka plan sağlayacaktır. Bununla birlikte, başlık içeriğinin rengini de değiştirebilirsin, ama ben bunu yapmadım. Bu, bartaile.com'un yaptığı şeydir, yani, dahil etmek isteyebilirsiniz. Keyfini çıkarın!

Edit 2: Yorumunuza göre CodePen'i düzenledim. here numaralı eylemde görün. Bu, aşağıdakileri yapar: Bir başlık var. Aşağı kaydırıldığında, kaybolacaktır. Yukarı kaydırıldığında, bir arka plan ortaya çıkar, ancak scrollTop < 400 kadar kaydırırken arka plan kaybolur. Anladığım kadarıyla, istediğin bu.Yukarıda yayınladığım yapıyı kullanır.

+0

Bu etkiyi elde etmek için daha basit bir yol yok mu? http://bartaile.com benim ilham kaynağı olarak kullanıyorum ve sadece ekliyorum: kullanıcı ilk paneli geçtikten sonra nav kullanıcı gizlerse yalnızca gizlerse gizler ve sonra tekrar göstermez ...... İpuçlarını dene, yardımın için teşekkür ederim! – Dee

+0

Gönderiyi düzenledim. – NikxDa

+0

Ne bartaile.com yapıyor, iyi bir fikir. Yine bir CodePen oluşturacağım ve sizi güncelleyeceğim! – NikxDa

3

Ben "bartaile.com" kontrol etmek ve ne kullandıkları Eğer etkisi bu tür ulaşmak istiyorum fullpage'.If' adı verilen üçüncü taraf lib olduğuna işaret etmek zorunda, bu lib fullpage.js kontrol etmeliyiz. Bu, tam ekran kaydırma web siteleri (tek sayfa web siteleri veya sızıntı siteleri olarak da bilinir) oluşturmak için basit ve kullanımı kolay bir eklentidir. Tam ekran kaydırma web sitelerinin oluşturulmasına ve sitenin bölümlerinin içine bazı yatay kaydırıcıların eklenmesine izin verir.

Bu eklenti, "tam ekran kaydırma" ve ayrıca normal kaydırma işlemlerini gerçekleştirebilir. Yerine `.addClass` ve` sen jQuery `.slideDown` kullanarak ve olabilir .removeClass`` .slideUp` yöntemleri kullanmanın