if($('.article-num').length && $('#article-end').length){ //記事本文の上部の位置を取得 var articleTop = $('.article-num').offset().top; //記事本文の下部を位置取得(=次要素の上部) var articleTBottom = $('#article-end').offset().top; //記事本文の高さを算出 var articleHeight = articleTBottom-articleTop; //初回のスクロールのみ計測のためフラグ設定(false:未スクロール、true:スクロール済み) var scrollFlag = false; //GTMにデータが複数回送られないようにフラグ設定(0:未送信、1~4:10%〜90%のデータを送信、5:全てのデータを送信) var dataFlag = 0; //要素の高さを元にスクロール率ごとの高さを設定(0%、10%、25%、50%、75%、90%、100%) var rate = [0,0.10,0.25,0.50,0.75,0.90,1]; var articleRate = []; for(var i=0;iarticleTop && scrollpoint<=articleTBottom+150){ //初回スクロール時 if(!scrollFlag){ //10%の位置に到達し、GTMに10%イベントが送信されてない時 if(scrollpoint>articleRate[1] && dataFlag==0){ //以降送信させないためフラグをインクリメント dataFlag++; //スクロールイベント送信 if( 'undefined'!==typeof dataLayer ){ dataLayer.push({ 'event':'ArticleScrolldepth', 'label':'10' }); } } //25%の位置に到達し、GTMに25%イベントが送信されてない時 if(scrollpoint>articleRate[2] && dataFlag==1){ //以降送信させないためフラグをインクリメント dataFlag++; //スクロールイベント送信 if( 'undefined'!==typeof dataLayer ){ dataLayer.push({ 'event':'ArticleScrolldepth', 'label':'25' }); } } //50%の位置に到達し、GTMに50%イベントが送信されてない時 if(scrollpoint>articleRate[3] && dataFlag==2){ //以降送信させないためフラグをインクリメント dataFlag++; //スクロールイベント送信 if( 'undefined'!==typeof dataLayer ){ dataLayer.push({ 'event':'ArticleScrolldepth', 'label':'50' }); } } //75%の位置に到達し、GTMに75%イベントが送信されてない時 if(scrollpoint>articleRate[4] && dataFlag==3){ //以降送信させないためフラグをインクリメント dataFlag++; //スクロールイベント送信 if( 'undefined'!==typeof dataLayer ){ dataLayer.push({ 'event':'ArticleScrolldepth', 'label':'75' }); } } //90%の位置に到達し、GTMに90%イベントが送信されてない時 if(scrollpoint>articleRate[5] && dataFlag==4){ //以降送信させないためフラグをインクリメント dataFlag++; //スクロールイベント送信 if( 'undefined'!==typeof dataLayer ){ dataLayer.push({ 'event':'ArticleScrolldepth', 'label':'90' }); } } //100%の位置に到達し、GTMに100%イベントが送信されてない時 if(scrollpoint>articleRate[6] && dataFlag==5){ //以降送信させないためフラグを指定 dataFlag=6; //スクロールイベント送信 if( 'undefined'!==typeof dataLayer ){ dataLayer.push({ 'event':'ArticleScrolldepth', 'label':'100' }); } } } } //記事本文の範囲外(=記事本文より下がするロールされている場合)で、100%イベントまで送信された時 if(scrollpoint>articleTBottom && dataFlag==6){ //スクロール済みのフラグを立て、同じスクロールイベントが計測されることを防ぐ scrollFlag=true; } }); }