Помогите сократить код
Есть вот такой код
На этот элемент наводят мышь или отводят с него izmenenie_nastroek_blok_1 А на этом элементе происходят изменения zagolovok_tsvet_1 let izmenenie_nastroek_blok_1 = document.querySelector(".izmenenie_nastroek_blok_1"); let zagolovok_tsvet_1 = document.querySelector(".zagolovok_tsvet_1"); let zagolovok_tsvet_izmenenie_1 = () => { zagolovok_tsvet_1.style.color = "#0504aa"; console.log("навелось"); } izmenenie_nastroek_blok_1.addEventListener("mouseover", zagolovok_tsvet_izmenenie_1); let zagolovok_tsvet_izmenenie_11 = () => { zagolovok_tsvet_1.style.color = "#000"; console.log("увелось"); } izmenenie_nastroek_blok_1.addEventListener("mouseout", zagolovok_tsvet_izmenenie_11); Есть ощущение что есть можно сделать короче. |
Цитата:
Напиши одну функцию с параметром... Подвешивай ее на события с разными параметрами... |
Сергей Ракипов,
может css :hover? |
Цитата:
<!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <title>index</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="index"> <meta name="Keywords" content="index"> <style> .blok { width: 400px; height: 100px; margin: 10px auto; } .kvadrat { width: 100px; height: 100px; border: 3px solid #000; cursor: pointer; } .kvadrat.aktiv { border: 3px solid #0504aa; } .kvadrat:focus { outline: none; } .kvadrat:hover .zagolovok{ color:#0504aa } </style> </head> <body> <div class="blok"> <h1 class="zagolovok">Заголовок</h1> <button class="kvadrat aktiv"></button> <button class="kvadrat"></button> <button class="kvadrat"></button> </div> </body> </html> Вроде все сделал правильно, но заголовок не меняет цвет при наведение на квадрат. И у меня вот таких блоков будет штук 6 <div class="blok"> <h1>Заголовок</h1> <button class="kvadrat"></button> <button class="kvadrat"></button> <button class="kvadrat"></button> </div> |
Сергей Ракипов,
с таким html сложно css применить, но делегирование снова рулит. <!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <title>index</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="index"> <meta name="Keywords" content="index"> <style> .blok{ width: 400px; height: 100px; margin: 10px auto; display: flex; justify-content: space-around; } .kvadrat{ width: 100px; height: 100px; border: 3px solid #000; } .kvadrat.aktiv{ border: 3px solid #0504aa; } .kvadrat:focus{ outline: none; } .blok h1.hover{ color:#0504aa; } </style> </head> <body> <div class="blok"> <h1 class="zagolovok">Заголовок</h1> <button class="kvadrat aktiv"></button> <button class="kvadrat"></button> <button class="kvadrat"></button> </div> <div class="blok"> <h1 class="zagolovok">Заголовок</h1> <button class="kvadrat aktiv"></button> <button class="kvadrat"></button> <button class="kvadrat"></button> </div> <div class="blok"> <h1 class="zagolovok">Заголовок</h1> <button class="kvadrat aktiv"></button> <button class="kvadrat"></button> <button class="kvadrat"></button> </div> <script> let body = document.body; let aktiv = ({target}) => { target = target.closest(".kvadrat"); if(!target) return; let parent = target.closest(".blok"); let current = parent.querySelector(".kvadrat.aktiv"); current && current.classList.remove("aktiv"); target.classList.add("aktiv"); } body.addEventListener("click", aktiv); let noverEvent = { handleEvent: event => { target = event.target.closest(".kvadrat"); if(!target) return; let parent = target.closest(".blok"); let h = parent.querySelector("h1"); h.classList.toggle("hover", event.type == "mouseenter") } } body.addEventListener("mouseenter", noverEvent, true); body.addEventListener("mouseleave", noverEvent, true); </script> </body> </html> |
:D
<!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <title>index</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="index"> <meta name="Keywords" content="index"> <style> .blok{ width: 600px; height: 100px; margin: 10px auto; display: flex; justify-content: space-around; flex-direction: row-reverse; } .kvadrat{ width: 100px; height: 100px; border: 3px solid #000; } .kvadrat.aktiv{ border: 3px solid #0504aa; } .kvadrat:focus{ outline: none; } .blok .kvadrat:hover~h1{ color:#0504aa; } </style> </head> <body> <div class="blok"> <button class="kvadrat"></button> <button class="kvadrat"></button> <button class="kvadrat aktiv"></button> <h1 class="zagolovok">Заголовок</h1> </div> <div class="blok"> <button class="kvadrat"></button> <button class="kvadrat"></button> <button class="kvadrat aktiv"></button> <h1 class="zagolovok">Заголовок</h1> </div> <div class="blok"> <button class="kvadrat"></button> <button class="kvadrat"></button> <button class="kvadrat aktiv"></button> <h1 class="zagolovok">Заголовок</h1> </div> <script> let body = document.body; let aktiv = ({target}) => { target = target.closest(".kvadrat"); if(!target) return; let parent = target.closest(".blok"); let current = parent.querySelector(".kvadrat.aktiv"); current && current.classList.remove("aktiv"); target.classList.add("aktiv"); } body.addEventListener("click", aktiv); // let noverEvent = { // handleEvent: event => { // target = event.target.closest(".kvadrat"); // if(!target) return; // let parent = target.closest(".blok"); // let h = parent.querySelector("h1"); // h.classList.toggle("hover", event.type == "mouseenter") // } // } // body.addEventListener("mouseenter", noverEvent, true); // body.addEventListener("mouseleave", noverEvent, true); </script> </body> </html> |
рони,
voraa, Спасибо, два лучших пользователя на сайте. |
voraa,
А по другому ни как не записать, если к примеру h1 впереди, то есть он без ~ |
voraa,
а без flex-direction: row-reverse; сможешь? :) <!doctype html> <html lang="ru"> <head> <meta charset="utf-8"> <title>index</title> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="index"> <meta name="Keywords" content="index"> <style> .blok{ width: 600px; height: 100px; margin: 10px auto; display: flex; justify-content: space-around; /*flex-direction: row-reverse;*/ } .kvadrat{ width: 100px; height: 100px; border: 3px solid #000; } .kvadrat.aktiv{ border: 3px solid #0504aa; } .kvadrat:focus{ outline: none; } .blok .kvadrat:hover~h1{ color:#0504aa; } </style> </head> <body> <div class="blok"> <button class="kvadrat aktiv">1</button> <button class="kvadrat">2</button> <button class="kvadrat">3</button> <h1 class="zagolovok">Заголовок</h1> </div> <div class="blok"> <button class="kvadrat aktiv">1</button> <button class="kvadrat">2</button> <button class="kvadrat">3</button> <h1 class="zagolovok">Заголовок</h1> </div> <div class="blok"> <button class="kvadrat aktiv">1</button> <button class="kvadrat">2</button> <button class="kvadrat">3</button> <h1 class="zagolovok">Заголовок</h1> </div> </body> </html> |
Цитата:
но заголовок можно визуально разместить впереди, один из таких способов показал voraa, |
Часовой пояс GMT +3, время: 01:05. |