VKirill

Untitled

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