2017-08-22 10 views
0

ビューポートの一番上の100pxに達すると、各要素(クラスabc)にクラスを追加しようとしています。しかし、個々の要素にクラスを追加することはできません。むしろすべてのdivにクラスを追加しています。助言がありますか?上に100pxをスクロールするときに要素にクラスを追加

$(function() { 
 
    $(document).scroll(function() { 
 
    if ($(this).scrollTop() >= $('.abc').offset().top - 100) { 
 
     $(".abc").addClass("color"); 
 
    } else { 
 
     $(".abc").removeClass("color"); 
 
    } 
 
    }); 
 
});
#header { 
 
    height: 150px; 
 
} 
 

 
.abc { 
 
    background-color: orange; 
 
} 
 

 
.color { 
 
    background-color: blue; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="header"> 
 
    <h1>Header</h1> 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div>

+0

こんにちは、このスクリプトは動作しています! https://jsfiddle.net/056vzoa2/ – Roy

+0

を参照してください。私は、オフセットにある各.abcに "color"が必要であることを確認します。毎回.abc.colorが1つしかありませんか? – Roy

答えて

3

あなたのロジックは、しかし、あなたはすべての要素をループする必要があり、コレクションのためにこれを達成するために、個別に自分の位置を評価し、単一の要素をチェックするために正しいです。このような何か:

$(function() { 
 
    $(document).scroll(function() { 
 
    var scrollTop = $(this).scrollTop(); 
 
    
 
    $('.abc').each(function() { 
 
     $(this).toggleClass('color', scrollTop >= $(this).offset().top - 100); 
 
    }); 
 
    }); 
 
});
#header { height: 150px; } 
 
.abc { background-color: orange; } 
 
.color { background-color: blue; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="header"> 
 
    <h1>Header</h1> 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div> 
 
<div class="abc"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque semper aliquam neque, id condimentum orci egestas ac. Maecenas ullamcorper semper finibus. Quisque vitae semper lorem, ut mattis mi. Maecenas ut porta enim. Duis tellus sem, tincidunt 
 
    vitae turpis tristique, laoreet sodales nunc. Donec laoreet sollicitudin nibh, a porta risus elementum id. Vivamus et quam nec enim tincidunt tempus in sed ipsum. Quisque non arcu sem. Nulla eget massa ultricies, dignissim erat vel, tristique turpis. 
 
    Pellentesque non maximus est, in feugiat nibh. Morbi enim elit, sodales ac leo eget, interdum imperdiet elit. Nunc dapibus scelerisque aliquet. 
 
</div>

0

はこのような何かを試すことができます。

$('.abc').each(function(){ //For each .abc 
    if($(window).scrollTop() >= $(this).offset().top - 100) { //see if is in offset 
     $('.abc').removeClass("color"); //remove all colors 
     $(this).addClass("color"); //set the offset .abc with color 
    } 
}) 

この例を参照してください。 https://jsfiddle.net/056vzoa2/5/
よろしく!

+0

これは素晴らしい動作します。しかし、私はまた、固定された位置のdivコンテナでこれを使用する予定でしたが、この場合は動作しません。コンテナは次のようになります。 '#container { width:100px; 身長:300px; overflow-y:scroll; 位置:固定; トップ:20ピクセル; 左:20ピクセル; } ' – user2798841

+0

あなたは何をしたいのか分かりません。あなたの質問に答えるだけです。 – Roy

関連する問題