2016-07-19 4 views
0

私は単一のページから成る単純なウェブサイトを持っています。使用状況はPiwik経由で追跡されています。ページのデザインのために、ユーザーは通常、ナビゲーションバーを使用してリンクをクリックするのではなく、リンクトラッキングをウェブサイトの使用方法についての非常に情報がない方法にする代わりにスクロールすることに頼っています。しかし、のいずれかを満たすすべてのスクロールをJavascriptのスクロール:最小限のCPU使用量で1回だけ機能を実行するには?

setInterval(reportposition, 1000); 
function reportposition() { 
    $(function() { 
      var $win = $(window); 

      $win.scroll(function() { 
       if ($win.scrollTop() == 0) { 
        _paq.push(['trackEvent', 'Scroll', 'PageTop']); 
}    else if (($(document).height() - $win.scrollTop() 
           < 7540) && ($(document).height() - $win.scrollTop() > 7500)) { 
        _paq.push(['trackEvent', 'Scroll', 'About']); 
} 
       else if ($win.height() + $win.scrollTop() 
           == $(document).height()) { 
        _paq.push(['trackEvent', 'Scroll', 'PageBottom']); 
       } 
      }); 
     }); 
}; 

:ユーザーの行動を追跡するために、私は、ページ上のユーザの位置を決定し、その後、追跡サーバに要求を送信し、「スクロール」を使用してjsの機能を持っています条件は何十回も実行され、したがって数十の追跡要求をサーバーに送信します。私は、関数がsetIntervalで実行される頻度を低くしようとしましたが、その効果はごくわずかです。違う条件が満たされるまで条件が満たされたときに一度だけ発火するような方法はありますか?

単純なスクロールで何百ものイベントが発生する可能性があるため、スクロールしてユーザーの位置を確認するのはむしろCPUサイクルに関するものです。できるだけ少ないCPU使用量でこの問題を解決する方法はありますか?

答えて

1

解決策は、scrollTopが、ユーザがスクロールした現在のdivのscrollTopと等しいかどうかを確認することです。

CPUに関しては、https://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jqueryをご覧ください。これは1つの解決策です。もっと理想的には、Webソケットを使用する(つまり、node.jsとともにsocket.ioを使用する)ことを検討する必要があります。

1

スクロールイベントは、ユーザがスクロールしたかどうかを検出するのに役立ちますが、スクロールするのはスクロールトップ()の値と比較するだけで済みます。彼らは周りにいない

setInterval(reportposition, 1000); 
var $win = $(window); 

function reportposition() { 
    $(function() { 
     if(scrollTop == $win.scrollTop()){ 
      //same position 
     } 
     scrollTop = $win.scrollTop(); 
     winHeight = $win.height(); 
     docHeight = $(document).height(); 
     if (scrollTop == 0) { 
      _paq.push(['trackEvent', 'Scroll', 'PageTop']); 
     }else if ((docHeight - scrollTop < 7540) 
      && (docHeight - scrollTop > 7500)) { 
      _paq.push(['trackEvent', 'Scroll', 'About']); 
     }else if (winHeight + scrollTop 
         == docHeight) { 
      _paq.push(['trackEvent', 'Scroll', 'PageBottom']); 
     } 
    }); 
}; 

他の方法を行う場合にも、スクロールイベントの内側に、あなたが経過したどのくらいの時間をチェックして処理するかどうかを決定することができ、高さの値にアクセスする必要がいけません。

関連する問題