Advertisement
VKirill

Untitled

Sep 1st, 2023
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.71 KB | None | 0 0
  1. <script>
  2. var settings = {
  3. /* Настройки которые надо менять */
  4. need: 30, // Сюда вписываем через какое количество секунд повторно отправлять цель, по умолчанию стоит 60, но можно указать и 30
  5. checkTime: 10, // секунды. период проверки.
  6. //желательно, чтобы need было кратно checkTime
  7. IDmetrika: 94498883, // Сюда вписываем ИД Счетчика Яндекс Метрики
  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>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement