2010-04-07 13 views
11

Próbuję ustalić, jak wyświetlić element div (#tips), gdy użytkownik przewinie do drugiej ćwiartki zawierającej wysokość elementu div (# wrap), a następnie zniknie, gdy użytkownik przewinie do ostatniego kwartału. Więc byłoby tak:Użyj jQuery, aby pokazać element div tylko wtedy, gdy pozycja przewijania znajduje się między 2 punktami

1. kwartał - #tips jest ukryty
2. kwarta - #tips jest widoczne
3 kwartał - #tips jest widoczne
4 kwartał - #tips jest ukryty

Jestem niemal całkowicie nowe do jQuery, ale co mam do tej pory to:

function addKeyboardNavigation(){ 
// get the height of #wrap 
var $wrapHeight = $('#wrap').outerHeight() 
// get 1/4 of wrapHeight 
var $quarterwrapHeight = ($wrapHeight)/4 
// get 3/4 of wrapHeight 
var $threequarterswrapHeight = 3*($wrapHeight) 
// check if we're over a quarter down the page 
if($(window).scrollTop() > $quarterwrapHeight){ 
    // if we are show keyboardTips 
    $("#tips").fadeIn("slow"); 
} 
} 

to gdzie ja się mylić. Jak mogę sprawdzić, czy pozycja przewijania wynosi> $ quarterwrapHeight, ale < $ threequarterswrapHeight?

aby go uruchomić Używam:

// Run addKeyboardNavigation on scroll 
$(window).scroll(function(){ 
addKeyboardNavigation(); 
}); 

Każda pomoc lub sugestie będą bardzo mile widziane!

Dzięki.

Odpowiedz

29

Witam napisali demo here ... jedynym problemem jest to, czy #wrap div nie jest wystarczająco wysoki, w górnej części okna nigdy nie dostać się do 3/4 wysokość, więc etykieta narzędzia nie zniknie. Oto kod:

$(document).ready(function(){ 
$(window).scroll(function(){ 
    // get the height of #wrap 
    var h = $('#wrap').height(); 
    var y = $(window).scrollTop(); 
    if(y > (h*.25) && y < (h*.75)){ 
    // if we are show keyboardTips 
    $("#tips").fadeIn("slow"); 
    } else { 
    $('#tips').fadeOut('slow'); 
    } 
}); 
}) 

użyłem height() ale można użyć outerHeight() ... zapomniałem zmienić go w demie bo pierwotnie używałem body zamiast #wrap.

Kolejny problem polegałby na tym, że #wrap nie znajduje się u góry strony. Jeśli to dalej w dół, a następnie trzeba będzie odjąć to pozycja na stronie z scrollTop:

var y = $(window).scrollTop() - $('#wrap').position().top; 
+2

Fantastyczny, który działa świetnie. #wrap jest poręcznie tak duży, jak ciało (używając go, aby uzyskać stopkę do dołu), więc nie jest to problemem. Dzięki! – Rik

+1

Świetna próbka, ale nie działa na iPadzie. – Martin

+0

Miły pracujący dla mnie w Androidzie 10-calowy ... – Aravin

1

Jak o:

if(($(window).scrollTop() > $quarterwrapHeight) && ($(window).scrollTop() < $threequarterswrapHeight)){ 
    $("#tips").fadeIn("slow"); 
} else { 
    $("#tips").fadeOut("slow"); 
} 
+0

Dzięki za szybką odpowiedź, może muszę być jaśniejsze chociaż. Chciałbym, aby element #tips div się ukrywał, gdy pozycja przewijania użytkownika znajduje się w 1. i 4. kwartale wysokości #wrap div. – Rik

+0

Inne po instrukcji if z fadeOut? Zaktualizowałem moją odpowiedź. – zaf

+0

Tak, ja też tego próbowałem, ale to nie działało. Poniższa odpowiedź działa, ale nie jestem pewna, że ​​jest inaczej. Dziwny. Mimo to dziękuję. – Rik

Powiązane problemy