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