VKirill

92496997

Feb 16th, 2023
1,311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.    (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>
Advertisement
Add Comment
Please, Sign In to add comment