Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.01.2021, 12:17
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

Помогите сократить код
Есть вот такой код

На этот элемент наводят мышь или отводят с него 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);


Есть ощущение что есть можно сделать короче.
Ответить с цитированием
  #2 (permalink)  
Старый 09.01.2021, 13:31
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Сергей Ракипов
Есть ощущение что есть можно сделать короче.
Сделай покороче имена переменным...
Напиши одну функцию с параметром...
Подвешивай ее на события с разными параметрами...
Ответить с цитированием
  #3 (permalink)  
Старый 09.01.2021, 13:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сергей Ракипов,
может css :hover?
Ответить с цитированием
  #4 (permalink)  
Старый 18.01.2021, 15:12
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

Сообщение от рони Посмотреть сообщение
Сергей Ракипов,
может 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>
Ответить с цитированием
  #5 (permalink)  
Старый 18.01.2021, 15:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сергей Ракипов,
с таким 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>
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2021, 16:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704


<!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, 18.01.2021 в 17:07.
Ответить с цитированием
  #7 (permalink)  
Старый 19.01.2021, 05:53
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
voraa,

Спасибо, два лучших пользователя на сайте.
Ответить с цитированием
  #8 (permalink)  
Старый 19.01.2021, 08:12
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

voraa,
А по другому ни как не записать, если к примеру h1 впереди, то есть он без ~

Последний раз редактировалось Сергей Ракипов, 19.01.2021 в 08:20.
Ответить с цитированием
  #9 (permalink)  
Старый 19.01.2021, 08:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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>
Ответить с цитированием
  #10 (permalink)  
Старый 19.01.2021, 08:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Сергей Ракипов
Нужна именно такая последовательность тэгов
потому что селекторы css обратно не видят, нужен квадрат а затем надпись, чтоб квадрат мог влиять на заголовок.

но заголовок можно визуально разместить впереди, один из таких способов показал voraa,

Последний раз редактировалось рони, 19.01.2021 в 08:23.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить код слайдшоу. 47rus Общие вопросы Javascript 0 20.03.2016 18:43
Сократить код wmfmynd jQuery 7 31.01.2016 13:25
Помогите сократить код! tarkasha Общие вопросы Javascript 5 23.01.2015 10:21
Выпадающие списки. Помогите подправить код. cardsmoney Элементы интерфейса 6 18.02.2011 16:20
Код калькулятора на JS. помогите с ошибкой! kirill.psl Общие вопросы Javascript 9 26.08.2010 11:38