2017-01-10 1 views
1

Ich habe 5 Boxen auf einer Webseite, die Sie hier sehen können:Wie kann ich die Klasse eines divs ändern, wenn ich mit jquery 200px vom oberen Fensterrand aus erreiche?

http://demo.axistheme.com/methodology/Wakeup-Method.html.

Die erste Box hat den Text 01 mit einer gelben Hintergrundfarbe und die zweite und die anderen haben den Text 02, 03 usw. mit einer grauen Hintergrundfarbe.

Wie kann ich beim Scrollen des Fensters die Hintergrundfarbe jedes anderen Kästchens (einzeln) an dem Punkt ändern, an dem sie 200 Pixel unter dem oberen Rand des Fensters erreichen?

Antwort

1

Sie müssen überprüfen, wann immer das Fenster gescrollt wird, wenn eines der Elemente weniger als 200px vom oberen Teil des Ansichtsfensters ist.

Um die vertikale Versatzposition jedes Elements relativ zum Ansichtsfenster zu bestimmen, können Sie die vertikale Fensterposition des Fensters ($(window).scrollTop) von der vertikalen Versatzposition jedes Elements relativ zum Dokument (.offset().top) subtrahieren.

dh.var offsetTopPosition = $(ELEMENT).offset().top - $(window).scrollTop();

Arbeitsbeispiel:

$(document).ready(function(){ 
 

 
    $(window).scroll(function(){ 
 

 
     $('div').each(function(){ 
 

 
     \t var offsetTopPosition = $(this).offset().top - $(window).scrollTop(); 
 

 
     \t if (offsetTopPosition < 100) { 
 
       $(this).addClass('active'); 
 
     \t } 
 

 
     \t if (offsetTopPosition > 100) { 
 
       $(this).removeClass('active'); 
 
     \t } 
 

 
     }); 
 

 
    }); 
 

 
});
div { 
 
width: 36px; 
 
height: 36px; 
 
line-height: 36px; 
 
margin-bottom: 200px; 
 
color: rgb(0,0,0); 
 
background-color: rgb(191,191,191); 
 
font-size: 24px; 
 
font-weight: bold; 
 
text-align: center; 
 
} 
 

 
.active { 
 
background-color: yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="active">1</div> 
 
<div>2</div> 
 
<div>3</div> 
 
<div>4</div> 
 
<div>5</div>

+0

Perfect, ist es möglich, wenn für andere oben und dieselbe zweite Feld Reichweite 2.e Box bgcolor, wenn die 1. Box Reichweite oben und ändern bgcolor drittes Feld zu ändern? – InsightCoders

+0

Ich tat dies auf komplexe Weise. Sie können hier sehen (http://demo.axistheme.com/methodology/Wakeup-Method.html). Ich möchte einfachen Code. – InsightCoders

+0

@AxisTheme - Ich bin sicher, Sie verstehen, dass Sie Ihren eigenen Code schreiben müssen. Sie verwenden diese Website, um nach Ansätzen zu fragen. Es ist keine Seite, wo Leute deine Hausaufgaben für dich machen. Sie haben genug in der obigen Lösung, um Ihre eigene Lösung zu schreiben. Du kannst es schaffen. Viel Glück! – Rounin

0

können Sie Offset() verwenden, in Kombination mit $ (Fenster) .scrollTop() die Position Ihrer Elemente zu bestimmen.

$('.box').each(function(index) { 
     var threshold = 200; 
     var topOffset = $(this).offset().top; 
     if(topOffset - $(window).scrollTop() < threshold){ 
      $(this).addClass('active'); 
     }else{ 
      $(this).removeClass('active'); 
     } 
    }); 

ein funktionsfähiges Beispiel Siehe hier: https://jsfiddle.net/jkrielaars/yt584kLz/2/

+0

Perfekt, ist es möglich, 2. Box bgcolor zu ändern, wenn 1. Box oben erreichen und 3. Box bgcolor ändern, wenn 2. Box oben und gleich für andere erreichen? – InsightCoders

+0

Sicher, ich habe die jsfiddle aktualisiert, um die nächste Boxfarbe auch zu ändern ... Sie können alles, was Sie wollen in den If/Else-Block, um nächste oder vorherige Blöcke Ziel. Sie können es möglicherweise auch durch CSS allein tun. Stellen Sie nur sicher, dass Sie die Reihenfolge der Klassen in Ihrem CSS richtig herum haben, so dass die Klasse "aktiv" immer eine höhere Priorität als die Klasse "nextActive" hat. ' https://jsfiddle.net/jkrielaars/yt584kLz/3/ – JasperZelf

Verwandte Themen