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