View difference between Paste ID: QNm1veDE and pJFMgY6h
SHOW: | | - or go back to the newest paste.
1
<script>
2
var settings = {
3
    /* Настройки которые надо менять */
4-
    need: 30, // Сюда вписываем через какое количество секунд повторно отправлять цель, по умолчанию стоит 60, но можно указать и 30
4+
    need: 10, // Сюда вписываем через какое количество секунд повторно отправлять цель, по умолчанию стоит 60, но можно указать и 30
5-
    checkTime: 10, // секунды. период проверки. 
5+
    checkTime: 2, // секунды. период проверки. 
6
    //желательно, чтобы need было кратно checkTime
7-
	IDmetrika: 90057536, // Сюда вписываем ИД Счетчика Яндекс Метрики
7+
	IDmetrika: 89294604, // Сюда вписываем ИД Счетчика Яндекс Метрики
8-
	code_gtm: true, //Скрипт вставляете с помощью GTM пишем True, если вставляете напрямую на сайт пишем False (в данном случае и Google Analytics требуется вставлять напрямую на сайт)
8+
9-
	// При False в настройках Tilda счетчика UA не забудьте "Включить gtag.js"
9+
10
}
11
 
12
/* 
13
## Инструкция по добавлению целей в Яндекс.Метрику ##
14
Если вы указываете в функции NEED шаг в 30 секунд, то в Метрике вы можете отслеживать цели с шагом в 30 секунд и цели событий добавляйте такие:
15
30sec
16
60sec
17
90sec
18
120sec
19
150sec и т.д.
20
 
21
Если вы указываете в функции NEED шаг в 60 секунд, то в Метрике вы можете отслеживать цели с шагом в 30 секунд и цели событий добавляйте такие:
22
60sec
23
120sec
24
180sec
25
240sec и т.д.
26
*/
27
28
/* БОЛЬШЕ В КОДЕ НИЧЕГО НЕ ТРОГАЕМ, ЦЕЛИ ТОЖЕ НЕ ПРАВИМ */
29
function gtag(){dataLayer.push(arguments);}
30
31
var metricsFn = function () {
32
    console.log(ActiveScore.timer);
33
    console.log(ActiveScore.need);
34
    var c1 = this.getCookie(this.cookieName);
35
    console.log(c1);
36
    if (ActiveScore.timer >= ActiveScore.need) {
37
        console.log("событие отправилось");
38
        /* Тут перечислять все что нужно будет вызвать по достижению цели */
39
        ym(settings.IDmetrika, "reachGoal", this.cookieName.slice(0, -3));
40
};
41-
		
41+
42-
	if (settings.code_gtm == true) {
42+
43-
		dataLayer.push({'event': this.cookieName.slice(0, -3)});
43+
44-
	} else {
44+
45-
		gtag('event', 'Timer', {'event_category' : 'Page Timer', 'event_action' : this.cookieName.slice(0, -3)});
45+
46-
	}
46+
47-
		
47+
48
    sendFn: null,
49-
    }
49+
50
    active_parts: 0,
51
    timer: 0,
52
    events: [
53
        "touchmove",
54
        "blur",
55
        "focus",
56
        "focusin",
57
        "focusout",
58
        "load",
59
        "resize",
60
        "scroll",
61
        "unload",
62
        "click",
63
        "dblclick",
64
        "mousedown",
65
        "mouseup",
66
        "mousemove",
67
        "mouseover",
68
        "mouseout",
69
        "mouseenter",
70
        "mouseleave",
71
        "change",
72
        "select",
73
        "submit",
74
        "keydown",
75
        "keypress",
76
        "keyup",
77
        "error",
78
    ],
79
80
    setEvents: function () {
81
        for (var index = 0; index < this.events.length; index++) {
82
            var eName = this.events[index];
83
            window.addEventListener(eName, function (e) {
84
                if (e.isTrusted && ActiveScore.period.events == false) {
85
                    ActiveScore.period.events = true;
86
                }
87
            });
88
        }
89
    },
90
91
    period: {
92
        start: 0,
93
        end: 0,
94
        events: false,
95
    },
96
97
    init: function (fn) {
98
        this.calcParts();
99
        this.setEvents();
100
        this.setStartCounter();
101
        if (this.checkCookie()) {
102
            this.sendFn = fn;
103
            this.start();
104
        }
105
    },
106
107
    readLastCookie: function () {
108
        var absurdlyLarge = 100000;
109
        for (var i = 1; i < absurdlyLarge; i++) {
110
            var cookie = this.getCookie(i * this.need + 'sec_ap');
111
            if (cookie != this.parts * this.parts) return { i: i, cookie: cookie };
112
        }
113
        return { i: 1, cookie: 0 };
114
    },
115
116
    setStartCounter: function () {
117
        var lastCookie = this.readLastCookie();
118
        this.counter = lastCookie.i - 1;
119
        this.active_parts = Number(lastCookie.cookie);
120
        this.cookieName = (this.counter + 1) * this.need + "sec_ap";
121
    },
122
123
    calcParts: function () {
124
        this.parts = Math.ceil(this.need / this.checkTime);
125
    },
126
127
    setPeriod: function () {
128
        this.period.start = this.microtime();
129
        this.period.end = this.period.start + this.checkTime;
130
        this.period.events = false;
131
    },
132
133
    microtime: function () {
134
        var now = new Date().getTime() / 1000;
135
        var s = parseInt(now);
136
        return s;
137
    },
138
139
    start: function () {
140
        this.setPeriod();
141
        this.runPeriod();
142
    },
143
144
    timeoutId: null,
145
146
    checkPeriod: function () {
147
        if (this.period.events == true) {
148
            this.active_parts = this.active_parts + 1;
149
            // console.log('В этой секции были действия');
150
        } else {
151
            // console.log('В этой секции НЕБЫЛО действия');
152
        }
153
        this.timer = this.active_parts * this.checkTime;
154
        console.log(
155
            this.active_parts + " / " + this.parts + " [" + this.timer + "]"
156
        );
157
158
        if (this.checkSecs()) {
159
        } else {
160
            this.start();
161
        }
162
        this.setCookie(this.cookieName, this.active_parts);
163
    },
164
165
    checkSecs: function () {
166
        if (this.timer >= this.need) {
167
            this.send();
168
            if (this.loop == true) {
169
                this.counter++;
170
                this.timer = 0;
171
                this.active_parts = 0;
172
                this.cookieName = (this.counter + 1) * this.need + "sec_ap";
173
                return false;
174
            } else {
175
                // console.log('Завершили проверку активности');
176
                return true;
177
            }
178
        }
179
        return false;
180
    },
181
182
    timeoutFn: function () {
183
        ActiveScore.checkPeriod();
184
    },
185
186
    runPeriod: function () {
187
        this.timeoutId = setTimeout(this.timeoutFn, this.checkTime * 1000);
188
    },
189
190
    send: function () {
191
        if (this.getCookie(this.cookieName) == this.parts * this.parts) {
192
            this.setStartCounter();
193
        } else {
194
            this.setCookie(this.cookieName, this.active_parts * this.active_parts);
195
        }
196
        this.sendFn();
197
    },
198
199
    checkCookie: function () {
200
        var c = this.getCookie(this.cookieName);
201
        if (c == null) {
202
            return true;
203
        } else {
204
            if (c == '') return true;
205
            c = parseInt(c);
206
            if (c >= this.parts) {
207
                // console.log('Скрипт даже не запустился...');
208
                if (this.loop == true) {
209
                    return true;
210
                }
211
                return false;
212
            } else {
213
                this.active_parts = c;
214
                return true;
215
            }
216
        }
217
    },
218
219
    setCookie: function (name, value, days) {
220
        var expires = "";
221
        if (days) {
222
            var date = new Date();
223
            date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
224
            expires = "; expires=" + date.toUTCString();
225
        }
226
        document.cookie = name + "=" + (value || "") + expires + "; path=/";
227
    },
228
    getCookie: function (name) {
229
        var nameEQ = name + "=";
230
        var ca = document.cookie.split(";");
231
        for (var i = 0; i < ca.length; i++) {
232
            var c = ca[i];
233
            while (c.charAt(0) == " ") c = c.substring(1, c.length);
234
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
235
        }
236
        return null;
237
    },
238
    eraseCookie: function (name) {
239
        document.cookie =
240
            name + "=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
241
    },
242
};
243
244
ActiveScore.init(metricsFn);
245
</script>