Добавлена метрика яндекс
This commit is contained in:
parent
ec415de724
commit
db25a0ed18
19
index.html
19
index.html
@ -24,6 +24,25 @@
|
|||||||
/>
|
/>
|
||||||
<!-- Chart.js -->
|
<!-- Chart.js -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||||
|
<!-- Yandex.Metrika counter -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
|
||||||
|
m[i].l=1*new Date();
|
||||||
|
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
|
||||||
|
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
|
||||||
|
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
|
||||||
|
|
||||||
|
ym(104563496, "init", {
|
||||||
|
clickmap:true,
|
||||||
|
trackLinks:true,
|
||||||
|
accurateTrackBounce:true,
|
||||||
|
webvisor:true,
|
||||||
|
trackHash:true,
|
||||||
|
ut:"noindex"
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<noscript><div><img src="https://mc.yandex.ru/watch/104563496" style="position:absolute; left:-9999px;" alt="" /></div></noscript></search>
|
||||||
|
<!-- /Yandex.Metrika counter -->
|
||||||
<style>
|
<style>
|
||||||
:root {
|
:root {
|
||||||
--theme-bg: linear-gradient(to bottom right, #dbeafe, #ffffff, #e0e7ff);
|
--theme-bg: linear-gradient(to bottom right, #dbeafe, #ffffff, #e0e7ff);
|
||||||
|
|||||||
40
script.js
40
script.js
@ -1,6 +1,17 @@
|
|||||||
// API ключ от WeatherAPI
|
// API ключ от WeatherAPI
|
||||||
const API_KEY = "485eff906f7d473b913104046250710";
|
const API_KEY = "485eff906f7d473b913104046250710";
|
||||||
|
|
||||||
|
// Yandex Metrika counter ID (замените на свой)
|
||||||
|
const YM_COUNTER_ID = 104563496; // Замените на реальный ID счетчика
|
||||||
|
|
||||||
|
// Функция для отправки событий в Yandex Metrika
|
||||||
|
function ymSendEvent(eventName, params = {}) {
|
||||||
|
if (typeof ym !== 'undefined' && YM_COUNTER_ID !== 'YOUR_COUNTER_ID') {
|
||||||
|
ym(YM_COUNTER_ID, 'reachGoal', eventName, params);
|
||||||
|
console.log(`Yandex Metrika event: ${eventName}`, params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Глобальные переменные для темы
|
// Глобальные переменные для темы
|
||||||
const themeButtons = {
|
const themeButtons = {
|
||||||
light: document.getElementById("theme-light"),
|
light: document.getElementById("theme-light"),
|
||||||
@ -351,6 +362,9 @@ function updatePageTitle() {
|
|||||||
|
|
||||||
// Автоматическая загрузка погоды при загрузке страницы
|
// Автоматическая загрузка погоды при загрузке страницы
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
|
// Отправляем событие загрузки страницы
|
||||||
|
ymSendEvent('page_load');
|
||||||
|
|
||||||
// Отображаем текущую дату
|
// Отображаем текущую дату
|
||||||
displayCurrentDate();
|
displayCurrentDate();
|
||||||
|
|
||||||
@ -383,10 +397,12 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
window.addEventListener('beforeinstallprompt', (e) => {
|
window.addEventListener('beforeinstallprompt', (e) => {
|
||||||
console.log('PWA install prompt available');
|
console.log('PWA install prompt available');
|
||||||
deferredPrompt = e;
|
deferredPrompt = e;
|
||||||
|
ymSendEvent('pwa_install_prompt');
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener('appinstalled', (e) => {
|
window.addEventListener('appinstalled', (e) => {
|
||||||
console.log('PWA installed successfully');
|
console.log('PWA installed successfully');
|
||||||
|
ymSendEvent('pwa_installed');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Функция для проверки реального соединения
|
// Функция для проверки реального соединения
|
||||||
@ -408,9 +424,11 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
if (!isOnline) {
|
if (!isOnline) {
|
||||||
banner.classList.remove('hidden');
|
banner.classList.remove('hidden');
|
||||||
console.log('Оффлайн режим активирован');
|
console.log('Оффлайн режим активирован');
|
||||||
|
ymSendEvent('offline_mode');
|
||||||
} else {
|
} else {
|
||||||
banner.classList.add('hidden');
|
banner.classList.add('hidden');
|
||||||
console.log('Онлайн режим восстановлен');
|
console.log('Онлайн режим восстановлен');
|
||||||
|
ymSendEvent('online_mode');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,6 +462,9 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
getWeatherBtn.addEventListener("click", async () => {
|
getWeatherBtn.addEventListener("click", async () => {
|
||||||
const city = citySelect.value;
|
const city = citySelect.value;
|
||||||
|
|
||||||
|
// Отправляем событие выбора города
|
||||||
|
ymSendEvent('city_select', { city: city });
|
||||||
|
|
||||||
// Сохраняем выбранный город в localStorage
|
// Сохраняем выбранный город в localStorage
|
||||||
localStorage.setItem("selectedCity", city);
|
localStorage.setItem("selectedCity", city);
|
||||||
|
|
||||||
@ -461,6 +482,9 @@ getWeatherBtn.addEventListener("click", async () => {
|
|||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
console.log("Данные получены успешно");
|
console.log("Данные получены успешно");
|
||||||
|
|
||||||
|
// Отправляем событие успешной загрузки данных
|
||||||
|
ymSendEvent('weather_load_success', { city: city });
|
||||||
|
|
||||||
// Отображаем текущую погоду
|
// Отображаем текущую погоду
|
||||||
displayCurrentWeather(data);
|
displayCurrentWeather(data);
|
||||||
|
|
||||||
@ -494,6 +518,13 @@ getWeatherBtn.addEventListener("click", async () => {
|
|||||||
console.error("Статус ответа:", error.response.status);
|
console.error("Статус ответа:", error.response.status);
|
||||||
console.error("Текст ответа:", error.response.statusText);
|
console.error("Текст ответа:", error.response.statusText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Отправляем событие ошибки загрузки
|
||||||
|
ymSendEvent('weather_load_error', {
|
||||||
|
city: city,
|
||||||
|
error: error.message
|
||||||
|
});
|
||||||
|
|
||||||
alert("Не удалось загрузить данные о погоде. Проверьте API ключ.");
|
alert("Не удалось загрузить данные о погоде. Проверьте API ключ.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -697,6 +728,9 @@ function createTemperatureChart(hourlyData) {
|
|||||||
document.documentElement.classList.contains("dark") ||
|
document.documentElement.classList.contains("dark") ||
|
||||||
document.body.classList.contains("dark");
|
document.body.classList.contains("dark");
|
||||||
|
|
||||||
|
// Отправляем событие просмотра графика температуры
|
||||||
|
ymSendEvent('chart_view', { chart_type: 'temperature' });
|
||||||
|
|
||||||
// Подготавливаем данные
|
// Подготавливаем данные
|
||||||
const labels = hourlyData.map((item) => {
|
const labels = hourlyData.map((item) => {
|
||||||
const hour = new Date(item.time).getHours();
|
const hour = new Date(item.time).getHours();
|
||||||
@ -880,6 +914,9 @@ function setTheme(theme) {
|
|||||||
html.setAttribute("data-theme", "light");
|
html.setAttribute("data-theme", "light");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Отправляем событие смены темы
|
||||||
|
ymSendEvent('theme_change', { theme: theme });
|
||||||
|
|
||||||
// Сохраняем выбранную тему
|
// Сохраняем выбранную тему
|
||||||
localStorage.setItem("theme", theme);
|
localStorage.setItem("theme", theme);
|
||||||
|
|
||||||
@ -937,6 +974,9 @@ function createPrecipitationChart(hourlyData) {
|
|||||||
const ctx = document.getElementById("precipitationChart").getContext("2d");
|
const ctx = document.getElementById("precipitationChart").getContext("2d");
|
||||||
const colors = getThemeColors();
|
const colors = getThemeColors();
|
||||||
|
|
||||||
|
// Отправляем событие просмотра графика осадков
|
||||||
|
ymSendEvent('chart_view', { chart_type: 'precipitation' });
|
||||||
|
|
||||||
// Подготавливаем данные
|
// Подготавливаем данные
|
||||||
const labels = hourlyData.map((item) => {
|
const labels = hourlyData.map((item) => {
|
||||||
const hour = new Date(item.time).getHours();
|
const hour = new Date(item.time).getHours();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user