Google Tag Manager中的纯JavaScript内部促销

Google Tag Manager中的纯JavaScript内部促销,javascript,google-tag-manager,Javascript,Google Tag Manager,我的任务是创建一个纯JS内部促销跟踪器,并通过GTM实现。我不确定我是以一种非常复杂的方式做的,还是不愿意接受任何建议 目前,我有以下标签: 此函数用于检查视口中是否存在稍后引用的元素 function isInViewport(element) { var rect = element.getBoundingClientRect(); var html = document.documentElement; return ( rect.top >= 0 &

我的任务是创建一个纯JS内部促销跟踪器,并通过GTM实现。我不确定我是以一种非常复杂的方式做的,还是不愿意接受任何建议

目前,我有以下标签:

此函数用于检查视口中是否存在稍后引用的元素

  function isInViewport(element) {
  var rect = element.getBoundingClientRect();
  var html = document.documentElement;
  return (
    rect.top >= 0 &&
    rect.left >= 0 &&
    rect.bottom <= (window.innerHeight || html.clientHeight) &&
    rect.right <= (window.innerWidth || html.clientWidth)
  );
}
函数isInViewport(元素){
var rect=element.getBoundingClientRect();
var html=document.documentElement;
返回(
rect.top>=0&&
rect.left>=0&&
rect.bottomA)您可以使用布尔值来检测是否执行了数据层推送,如下所示:

window.onscroll = myfunction;
var ecommerceObject;
var event;
var done = false; // example of a new variable 
function myfunction() {
    for (var i = 0; i < cars.length; i++) {
        if (isInViewport(list[i]) === true && !done) { //execute only if NOT done
            done = true; //set done to true
            ecommerceObject['ecommerce']['promoView'] = {
              'event' : 'promoview',  
              'promotions': [{
                    'id': items[i].innerText.split("\n")[1],
                    'name': items[i].id
                }]
                             };
            window.dataLayer.push(ecommerceObject);
        }
    }

}
window.onscroll=myfunction;
var电子商务对象;
var事件;
var done=false;//新变量的示例
函数myfunction(){
对于(变量i=0;i
B) 你为什么把它放在3个单独的脚本中

window.onscroll = myfunction;
var ecommerceObject;
var event;
function myfunction() {
    for (var i = 0; i < cars.length; i++) {
        if (isInViewport(list[i]) === true) {
            ecommerceObject['ecommerce']['promoView'] = {
              'event' : 'promoview',  
              'promotions': [{
                    'id': items[i].innerText.split("\n")[1],
                    'name': items[i].id
                }]
                             };
            window.dataLayer.push(ecommerceObject);
        }
    }

}
window.onscroll = myfunction;
var ecommerceObject;
var event;
var done = false; // example of a new variable 
function myfunction() {
    for (var i = 0; i < cars.length; i++) {
        if (isInViewport(list[i]) === true && !done) { //execute only if NOT done
            done = true; //set done to true
            ecommerceObject['ecommerce']['promoView'] = {
              'event' : 'promoview',  
              'promotions': [{
                    'id': items[i].innerText.split("\n")[1],
                    'name': items[i].id
                }]
                             };
            window.dataLayer.push(ecommerceObject);
        }
    }

}