// Обработчик, который выполняется после полной загрузки содержимого документа document.addEventListener('DOMContentLoaded', function() { // Получаем параметры URL страницы const urlParams = new URLSearchParams(window.location.search); const counterId = 57508408; // Универсальные временные цели для всех счетчиков let specialGoals = [ { time: 5000, name: "time_5" }, { time: 10000, name: "time_10" }, { time: 15000, name: "time_15" }, { time: 20000, name: "time_20" }, { time: 25000, name: "time_25" }, { time: 30000, name: "time_30" }, { time: 35000, name: "time_35" }, { time: 40000, name: "time_40" }, { time: 45000, name: "time_45" }, { time: 50000, name: "time_50" }, { time: 55000, name: "time_55" }, { time: 60000, name: "time_60" } ]; function yandex_goal(goal){ ym(counterId,'reachGoal',goal); console.log('reachGoal: ' + goal); } jQuery('click','a[href*="tel:"]', function(e) { yandex_goal('click_call'); }); // Функция для отправки события выполнения цели в Яндекс.Метрику function sendYandexMetricGoal(goalName, counterId) { if (typeof ym === 'undefined') { console.error('Яндекс.Метрика не загружена.'); return; } try { ym(counterId, 'reachGoal', goalName); console.log(`Событие цели "${goalName}" отправлено в счетчик ${counterId}`); } catch (error) { console.error('Ошибка отправки события цели в Яндекс.Метрику:', error); } } // Загрузка достигнутых целей из localStorage или инициализация пустого объекта let goalsAchieved = JSON.parse(localStorage.getItem('goalsAchieved') || '{}'); // Объект для хранения UTM-параметров let utmParams = {}; // Время последней проверки достижения специальных целей let lastSpecialGoalUpdateTime = parseInt(localStorage.getItem('lastSpecialGoalUpdateTime') || '0'); // Общее время активности пользователя, загруженное из localStorage let activityTime = parseInt(localStorage.getItem('activityTime') || '0'); // Сбор UTM-параметров из URL urlParams.forEach((value, key) => { if (key.startsWith('utm_')) { utmParams[key] = value; } }); // Навешивание обработчиков на события движения мыши, прокрутки и нажатия клавиш ['mousemove', 'scroll', 'keypress'].forEach(function(event) { window.addEventListener(event, updateActivityTime); }); // Функция для обновления времени активности пользователя function updateActivityTime() { activityTime += 20; //console.log(`Активное время: ${(activityTime / 1000).toFixed(2)} секунд`); // Показываем активное время localStorage.setItem('activityTime', activityTime.toString()); // Сохранение обновленного времени активности checkSpecialGoals(); // Проверка на достижение специальных целей } // Функция для проверки достижения специальных целей function checkSpecialGoals() { const currentTime = Date.now(); // Проверка, прошла ли секунда с последней проверки if (currentTime - lastSpecialGoalUpdateTime >= 1000) { specialGoals.forEach((specialGoal) => { const goalTime = specialGoal.time; // Проверка достижения времени для каждой специальной цели и ее отсутствия в достигнутых if (activityTime >= goalTime && !goalsAchieved[specialGoal.name]) { goalsAchieved[specialGoal.name] = { timestamps: [new Date()], utm: utmParams }; console.log(`Достигнута специальная цель: ${specialGoal.name}`); sendEventToYandexMetrica(specialGoal.name, counterId); // Отправка данных в Яндекс.Метрику localStorage.setItem('goalsAchieved', JSON.stringify(goalsAchieved)); // Сохранение достигнутых целей } }); lastSpecialGoalUpdateTime = currentTime; localStorage.setItem('lastSpecialGoalUpdateTime', lastSpecialGoalUpdateTime.toString()); // Обновление времени последней проверки } } // Функция для отправки события в Яндекс.Метрику function sendEventToYandexMetrica(goal, counterId) { if (typeof ym === 'undefined' || !counterId) { console.error('Ошибка отправки данных в Яндекс.Метрику: отсутствует counterId или объект ym.'); return; } ym(counterId, 'reachGoal', goal); // Вызов функции Яндекс.Метрики для отправки события } // Обработчик события перед закрытием страницы window.addEventListener('beforeunload', sendEmailNotificationsOnUnload); // Функция для отправки уведомлений по электронной почте при закрытии страницы function sendEmailNotificationsOnUnload(event) { if (Object.keys(goalsAchieved).length > 0) { //sendEmailNotifications(goalsAchieved); // Вызов функции отправки уведомлений } } // Функция для отправки данных на сервер для уведомлений /* function sendEmailNotifications(data) { var xhr = new XMLHttpRequest(); var url = "notify.php"; // URL серверного скрипта для обработки уведомлений var params = JSON.stringify(data); // Параметры в формате JSON xhr.open("POST", url, true); xhr.setRequestHeader("Content-type", "application/json"); xhr.send(params); // Отправка запроса } */ });