2011-03-11 27 views
14

Yazmak için ne yapmak istediğimin uzun bir açıklamasını yazmanın tam ortasındaydım, "Nasıl Yapılır/Biçimlendir" kenar çubuğunun bunun üzerinde aynı olduğunu fark ettiğimde Bir Soru "sayfa tam olarak ne istiyorum yapar. Temel bölüm, görünür bölümün üstünden kaymaya başlamadıkça, ana bölümle en üstte kalacak şekilde, ekranın geri kalanıyla uyum içinde yukarı ve aşağı kaydırır. Bu noktada, kenar çubuğu kaydırmayı durdurur ve görünür pencerenin üst kısmına tamamen yerleştirilmiş gibi davranmaya başlar.Gezinme nesnesini görünür pencerede tutmak için jQuery'yi kullanma

Bu "Ask (Sor)" ekranındaki kaynak kod ve komut dosyalarını incelemeyi denedim, ancak çok fazla imkansız olduğunu düşünüyorum (benim için, en azından). JQuery'nin bu tür bir şeyi gerçekten çok basitleştirdiğini varsayıyorum, ama benim için yeniyim, bu yüzden kendim için zor bir zaman geçiriyorum. (Ve eğer bu ortak bir soruya dönüşürse, özür dilerim - yaklaşık bir saat aradım ama bir cevap alamadığım için çok sıkça yazılmış jQuery soruları var. .)

Yardımlarınız için şimdiden teşekkür ederiz.

cevap

29

Bu, Apple'ın Applestore Sayfasında bulunan bir alışveriş kartı örneğidir.

mantık:

  • onay yapışkan eleman
  • onay üst pencere
  • yapışkan eleman
için CSS sınıfı eklemek veya kaldırmak olduğunu kaydırma olayı olduğu

jQuery:

$(document).ready(function() { 
// check where the shoppingcart-div is 
var offset = $('#shopping-cart').offset(); 

$(window).scroll(function() { 
    var scrollTop = $(window).scrollTop(); // check the visible top of the browser 

    if (offset.top<scrollTop) $('#shopping-cart').addClass('fixed'); 
    else $('#shopping-cart').removeClass('fixed'); 
    }); 
}); 

CSS: Burada

.fixed { 
     position: fixed; 
     top: 20px; 
     margin-left: 720px; 
     background-color: #0f0 ! important; } 

example Link

+0

Bu, bunu yapmanın güzel ve kaygan bir yoludur. +1 – Dutchie432

+0

Hollandalılar gibi "sıçrayan" değil, "Ask" sitesinde kutunun tam olarak ne yaptığı yok. – michelgotta

+0

'Yapışkan' veya 'sıçrayan' efektine ihtiyacınız yoksa, bu aslında benim yaklaşımımdan daha iyi olabilir. Yaklaşımım belirli koşullar altında titremeye neden olabilir. bkz http://jsfiddle.net/Jaybles/C5yWu/4/ – Dutchie432

2

Sadece kaydırma yaparken ekrandaki bir nesneye tutmak kadar çırpılmış biraz snippet'tir.

CANLI DEMO

http://jsfiddle.net/Jaybles/C5yWu/

HTML

<div id='object'>Top: 0px</div> 

CSS

#object{height:200px; width:200px;background:#f00;position:absolute;top:0;left:0;} 

jQuery (Timer + Animasyonla)

$(window).scroll(function(){ 
    var objectTop = $('#object').position().top; 
    var objectHeight = $('#object').outerHeight();  
    var windowScrollTop = $(window).scrollTop(); 
    var windowHeight = $(window).height(); 

    if (windowScrollTop > objectTop) 
     $('#object').css('top', windowScrollTop); 
    else if ((windowScrollTop+windowHeight) < (objectTop + objectHeight)) 
     $('#object').css('top', (windowScrollTop+windowHeight) - objectHeight);   

    $('#object').html('Top: ' + $('#object').position().top + 'px'); 

}); 

GÜNCELLEME ÖRNEK

http://jsfiddle.net/Jaybles/C5yWu/2/

+1

WHOA! Tam olarak aradığım şey bu - ve açıkçası gerçekten güzel sunuldu. Çok teşekkürler! –

+0

Nazik sözleri takdir ediyorum. Mutlu kodlar! – Dutchie432

0

bu jQuery

$(document).scroll(function() { 
    var objectTop = $('#shopping-cart').position().top; 
    var objectHeight = $('#shopping-cart').outerHeight(); 
    var windowScrollTop = $(window).scrollTop(); 
    var windowHeight = $(window).height(); 

    if((objectTop+objectHeight) <= $('html').outerHeight()) 
     $('#'+cont).css('top', (windowScrollTop+windowHeight)- objectHeight); 
    else 
     $('#'+cont).css('top', $('html').outerHeight()- objectHeight); 
}); 
olarak alt kullanımına tutmak gerekiyorsa

Css

#shopping-cart{ 
    width: 100%; 
    height: 50px; 
    position: absolute; 
    left: 0px; 
    bottom: 0px; 
} 

bunu büyü yapmak ve dont bu jquery gibi üst kullanımına

$(document).scroll(function() { 
    var objectHeight = $('#shopping-cart').outerHeight(); 
    var windowScrollTop = $(window).scrollTop(); 
    var windowHeight = $(window).height(); 

    $('#shopping-cart').css('top', windowScrollTop); 

}); 

Css

#shopping-cart{ 
    width: 100%; 
    height: 50px; 
    position: absolute; 
    left: 0px; 
    top: 0px; 
} 

tutmak gerekiyorsa stillerini tutmayı unutma pozisyonları ve bir şey onun internet explorer ile çalışmaz 8.0.7

0

Ve eğer sadece bir tarayıcıda bir yerde tutmanız gerekiyorsa, javascript'e ihtiyacınız yoktur, bunu CSS ile yapabilirsiniz.

#chatt-box { 
    right: 5px; 
    height: auto; 
    width: 300px; 
    position: fixed; 
    bottom: 0px; 
}