2016-04-26 4 views
2

私のコードの最後のビットを動作させるのに苦労しています。問題私は私のhtmlの構造は大体このセクションを通過するときに関数を起動する - jquery

<div class="panel-grid-cell"> 
    <div id="pgc-1">...</div> 
    <div id="pgc-2">...</div> 
    ... 
    <div id="pgc-n">...</div> 
</div> 

のように見えたときにユーザーがスクロールdiv

過去のユーザーがid="pgc-1"火機能をdivを通過するときだから、アイデアがある機能を発射する必要がありますされます残りの部分についても同様です。

これらのdivのそれぞれが付属hrefli aアイテムを持っているので、私は私の関数はthisがどのような瞬間にhref

li aに対応することになる。この

ga('send','event','scroll',city,$(this).text()) 

ようになります私はこれがあります。 divをループし、id'sを配列に格納する関数です。そして、li aメニューをビルドします。

var li=""; 
var linames = ["Intro","1925","1935","1945","1955","1965","1975","1985","1995","2005","Now"]; 
var i = 0; 
function getSectionIDs() 
{ 
    $("div.panel-grid-cell").children().each(function() { 
    if(linames[i] !== undefined) 
    { 
     li += "<li><a href='#"+$(this).attr('id')+"'>"+linames[i]+"</a></li>";   
    } 
    i++; 
    }); 
$("ul.timeline-items").append(li); 
} 

は今、私はまた私がスクロールして、各li項目のクラスを変更でしたどこまでチェックする機能を持っています。

function onScroll(event){ 
    var scrollPos = $(document).scrollTop(); 
    $('ul.timeline-items li a').each(function() { 
     var currLink = $(this); 
     var refElement = $(currLink.attr("href")); 
     if (refElement.position().top -75 <= scrollPos && refElement.position().top+75 + refElement.height()-75 > scrollPos) { 
     $('ul.timeline-items li a').removeClass("active"); 
     currLink.addClass("active"); 
     } 
     else{ 
     currLink.removeClass("active"); 
     } 
    }); 
    } 
    $(document).on("scroll", onScroll); 

このコードは、私がdivに合格したりしていない場合、それは常にチェックしているため、私は、欲しいものはないが、私は一度だけ、私の機能を起動する必要があります。

助けが必要ですか?先日ソリューションを自分自身を発見

+0

[ユーザーがjQueryを使ってdivの一番下にスクロールしたときの検出](http://stackoverflow.com/questions/6271237/detecting-when-user-scrolls-to-bottom-of-div-with- jquery)。 – hmd

+1

メソッドを1回だけ実行したい場合は、jQueryの 'one'メソッドを使用してください。http://api.jquery.com/one/ – RRR

+0

hmm、良い点については' one'、スマートな方法を見つける必要がありますそれを付けなさい。 –

答えて

0

、スクロール機能インサイド

はちょうど$(document).scrollTop()refElement.offset()に等しいとき、条件を入れて機能を発射し、それが完璧に動作します。

ユーザーがスクロールした距離をチェックし、この値がdivのオフセットと等しい場合は、関数を起動します。

関連する問題