Cookie окно при посещении сайта
Собрал три файла HTML, CSS и JS в один — в одну функцию. По мне — это удобнее. Просто подключил файл и забыл. Не нужно бегать в три разных файла, как это часто бывает. Сначала ищешь футер, потом файл стилей и наконец JS основной скрипт. И всё только для того, чтоб установить эти, никому не нужные куки))
Просто создаем новый файл, называем как хотим, и подключаем к странице, как обычно, снизу.
JavaScript
function CheckCookies() {
let cookieNote = `
<!-- START Cookie-Alert -->
<style>
/* MODAL ALERT COOKIES */
#cookie_note {
--font-size: 16px;
--max-width: 768px;
--font-family: Arial, sans-serif;
--border-radius: 6px;
--bottom: 24px;
--main-color: #f04e23;
--button-font-color: #fff;
display: none;
position: fixed;
gap: 32px;
align-items: center;
z-index: 100;
bottom: var(--bottom);
left: 50%;
max-width: var(--max-width);
transform: translateX(-50%);
padding: 20px;
font-size: var(--font-size);
font-family: var(--font-family);
background-color: white;
border-radius: var(--border-radius);
box-shadow: 0px 0px 16px rgba(0, 0, 0, 0.2);
width: 100%;
box-sizing: border-box;
}
#cookie_note p {
margin: 0;
text-align: left;
color: black;
width: fit-content;
flex-grow: 1;
line-height: 1.45;
opacity: 0.8;
}
#cookie_note a{
color: var(--main-color);
text-underline-offset: 2px;
text-decoration-thickness: 1px;
text-decoration-color: hsl(from currentColor h s calc(l + 30));
}
#cookie_note p a:hover{
transition: all 0.3s ease-in-out;
text-decoration-color: hsl(from currentColor h s l);
}
#cookie_note .button {
display: block;
margin: 0 auto;
width: fit-content;
font-size: var(--font-size);
white-space: nowrap;
border-radius: var(--border-radius);
border: 1px solid var(--main-color);
background-color: var(--main-color);
color: var(--button-font-color);
padding: 8px 20px;
cursor: pointer;
transition: all 0.3s ease-in-out;
}
#cookie_note .button:hover {
background-color: var(--button-font-color);
color: var(--main-color);
}
@media (min-width: 576px) {
#cookie_note.show-modal {
display: flex;
}
}
@media (max-width: 575px) {
#cookie_note.show-modal {
--font-size: clamp(14px, 4vw, 16px);
padding: clamp(14px, 5vw, 16px);
display: flex;
flex-direction: column;
width: calc(100vw - 20px);
gap: 16px;
}
#cookie_note.show-modal p{
}
#cookie_note.show-modal .button{
margin: 0;
align-self: end;
}
}
/* MODAL ALERT COOKIES */
</style>
<div id="cookie_note">
<p>На сайте используются файлы cookies, они делают его удобнее. Посещая страницы сайта, вы соглашаетесь с <a href='/privacy-policy'>Политикой конфиденциальности сайта</a> и <a href="https://yandex.ru/legal/confidential/">Политикой конфиденциальности ООО "Яндекс"</a>.</p>
<button class="button cookie_accept">Я согласен</button>
</div>
<!-- END Cookie-Alert -->
`;
document.body.insertAdjacentHTML("beforeend", cookieNote);
cookieNote = document.getElementById("cookie_note");
let cookieBtnAccept = cookieNote.querySelector(".cookie_accept");
function setCookie(name, value, days) {
let expires = "";
if (days) {
let date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
function getCookie(name) {
let matches = document.cookie.match(
new RegExp(
"(?:^|; )" +
name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, "\\$1") +
"=([^;]*)"
)
);
return matches ? decodeURIComponent(matches[1]) : undefined;
}
// Если куки cookies_policy нет или она просрочена, то показываем уведомление
if (!getCookie("cookies_policy")) {
cookieNote.classList.add("show-modal");
}
// При клике на кнопку устанавливаем куку cookies_policy на один год
cookieBtnAccept.addEventListener("click", function () {
setCookie("cookies_policy", "true", 365);
cookieNote.classList.remove("show-modal");
});
}
CheckCookies();