Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Много блоков (https://javascript.ru/forum/misc/80512-mnogo-blokov.html)

Сергей Ракипов 15.06.2020 11:47

Много блоков
 
Есть блок, и их будет десятки, и делать для каждого блока функции кончено это перебор. Как сделать что бы не меняя класс одной функцией что бы работали десятки блоков.

blok

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
body{
	font-family: Verdana, Geneva CY, Helvetica, DejaVu Sans, Arial, sans-serif;
	font-size: .8rem;
	line-height: 160%;
}
h3{
	font-family:Georgia, 'Times New Roman', Times, serif;
	font-size: 1.8rem;
	line-height: 0%;
	color: #FCD7BB;
}
.main{
	max-width: 720px;
	margin: 60px auto 0px;
}
.blok{
	position: relative;
	max-width: 640px;
	display: grid;
	grid-template-columns: 240px minmax(120px, 400px);
	grid-template-rows: 60px 120px;
	grid-template-areas: 
	"kartinka_blok zagolovok_blok"
	"kartinka_blok opisanie_blok";
	grid-gap: 0px 20px;
	cursor: pointer;
}
.kartinka_blok{
	grid-area: kartinka_blok;
}
.zagolovok_blok{
	grid-area: zagolovok_blok;
}
.opisanie_blok{
	grid-area: opisanie_blok;
}
.dalee_blok{
	grid-area: dalee_blok;
	position: absolute;
	top: 0px;
	left: 0px;
	width: 100%;
	height: 100%;
	background-color: rgba(255, 255, 255, .6);
	opacity: 0;
	transition: all .4s;
}
.dalee_tekst{
	display: block;
	text-align: center;
	color: #AC5959;
	text-decoration: underline;
	padding: 90px 0px 0px 0px;
	font-size: 2rem;
}

    </style>
</head>
<body>
    <div class="blok">
		<div class="kartinka_blok"><img src="https://rakipov.ru/files/1.jpg" width="100%" alt=""></div>
		<div class="zagolovok_blok"><h3>Полигональный арт</h3></div>
		<div class="opisanie_blok">Сегодня Polygonal арт часто выглядит как стилизация для логотипов, фона и иллюстраций, которые обычно служат в качестве украшений, а не как привлекающий внимание элемент. Но именно здесь он показывает себя во всей красе.</div>
		<div class="dalee_blok"><span class="dalee_tekst">Читать далее</span></div>
	</div>
<script>
"use_strict"

const blok = document.querySelector(".blok");
const daleeBlok = document.querySelector(".dalee_blok");

function navedenie_1(){
    daleeBlok.style.opacity = "1";
}
blok.addEventListener("mouseover", navedenie_1);

function navedenie_2(){
    daleeBlok.style.opacity = "0";
}
blok.addEventListener("mouseout", navedenie_2);
</script>
</body>
</html>

laimas 15.06.2020 11:49

CSS не хватает?
:hover opacity: 1, а по умолчанию 0.

Сергей Ракипов 15.06.2020 12:15

laimas,
А как это сделать?

laimas 15.06.2020 12:19

.blok {
    opacity: 0
}

.blok:hover {
    opacity: 1
}


http://htmlbook.ru/css

Сергей Ракипов 15.06.2020 12:59

Цитата:

Сообщение от laimas (Сообщение 525839)
.blok {
    opacity: 0
}

.blok:hover {
    opacity: 1
}


http://htmlbook.ru/css

Такой вариант не подходит, посмотрите на верстку и как работает, и поймете что так не сработает.

SuperZen 15.06.2020 13:15

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    body {
      font-family: Verdana, Geneva CY, Helvetica, DejaVu Sans, Arial, sans-serif;
      font-size: .8rem;
      line-height: 160%;
    }

    h3 {
      font-family: Georgia, 'Times New Roman', Times, serif;
      font-size: 1.8rem;
      line-height: 0%;
      color: #FCD7BB;
    }

    .main {
      max-width: 720px;
      margin: 60px auto 0px;
    }

    .blok {
      position: relative;
      max-width: 640px;
      display: grid;
      grid-template-columns: 240px minmax(120px, 400px);
      grid-template-rows: 60px 120px;
      grid-template-areas:
        "kartinka_blok zagolovok_blok"
        "kartinka_blok opisanie_blok";
      grid-gap: 0px 20px;
      cursor: pointer;
    }

    .kartinka_blok {
      grid-area: kartinka_blok;
    }

    .zagolovok_blok {
      grid-area: zagolovok_blok;
    }

    .opisanie_blok {
      grid-area: opisanie_blok;
    }

    .dalee_blok {
      grid-area: dalee_blok;
      position: absolute;
      top: 0px;
      left: 0px;
      width: 100%;
      height: 100%;
      background-color: rgba(255, 255, 255, .6);
      opacity: 0;
      transition: all .4s;
    }

    .dalee_tekst {
      display: block;
      text-align: center;
      color: #AC5959;
      text-decoration: underline;
      padding: 90px 0px 0px 0px;
      font-size: 2rem;
    }
  </style>
</head>

<body>
  <div class="blok">
    <div class="kartinka_blok"><img src="https://rakipov.ru/files/1.jpg" width="100%" alt=""></div>
    <div class="zagolovok_blok">
      <h3>Полигональный арт</h3>
    </div>
    <div class="opisanie_blok">Сегодня Polygonal арт часто выглядит как стилизация для логотипов, фона и иллюстраций,
      которые обычно служат в качестве украшений, а не как привлекающий внимание элемент. Но именно здесь он показывает
      себя во всей красе.</div>
    <div class="dalee_blok"><span class="dalee_tekst">Читать далее</span></div>
  </div>

  <div class="blok">
    <div class="kartinka_blok"><img src="https://rakipov.ru/files/1.jpg" width="100%" alt=""></div>
    <div class="zagolovok_blok">
      <h3>Полигональный ар2т</h3>
    </div>
    <div class="opisanie_blok">Сегодня Polygonal арт часто выглядит как стилизация для логотипов, фона и иллюстраций,
      которые обычно служат в качестве украшений, а не как привлекающий внимание элемент. Но именно здесь он показывает
      себя во всей красе.</div>
    <div class="dalee_blok"><span class="dalee_tekst">Читать далее</span></div>
  </div>
  <script>
    "use_strict"
    document.querySelectorAll(".blok").forEach(b => {
      b.addEventListener("mouseenter", function () {
        b.querySelector('.dalee_blok').style.opacity = 1
      })
      b.addEventListener("mouseleave", function () {
        b.querySelector('.dalee_blok').style.opacity = 0
      })
    });
  </script>
</body>

</html>


или без js
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    body {
      font-family: Verdana, Geneva CY, Helvetica, DejaVu Sans, Arial, sans-serif;
      font-size: .8rem;
      line-height: 160%;
    }

    h3 {
      font-family: Georgia, 'Times New Roman', Times, serif;
      font-size: 1.8rem;
      line-height: 0%;
      color: #FCD7BB;
    }

    .main {
      max-width: 720px;
      margin: 60px auto 0px;
    }

    .blok {
      position: relative;
      max-width: 640px;
      display: grid;
      grid-template-columns: 240px minmax(120px, 400px);
      grid-template-rows: 60px 120px;
      grid-template-areas:
        "kartinka_blok zagolovok_blok"
        "kartinka_blok opisanie_blok";
      grid-gap: 0px 20px;
      cursor: pointer;
    }

    .kartinka_blok {
      grid-area: kartinka_blok;
    }

    .zagolovok_blok {
      grid-area: zagolovok_blok;
    }

    .opisanie_blok {
      grid-area: opisanie_blok;
    }

    .dalee_blok {
      grid-area: dalee_blok;
      position: absolute;
      top: 0px;
      left: 0px;
      width: 100%;
      height: 100%;
      background-color: rgba(255, 255, 255, .6);
      opacity: 0;
      transition: all .4s;
    }

    .dalee_tekst {
      display: block;
      text-align: center;
      color: #AC5959;
      text-decoration: underline;
      padding: 90px 0px 0px 0px;
      font-size: 2rem;
    }
    
    .dalee_blok {
      opacity: 0;
    }

    .blok:hover .dalee_blok {
      opacity: 1;
    }
  </style>
</head>

<body>
  <div class="blok">
    <div class="kartinka_blok"><img src="https://rakipov.ru/files/1.jpg" width="100%" alt=""></div>
    <div class="zagolovok_blok">
      <h3>Полигональный арт</h3>
    </div>
    <div class="opisanie_blok">Сегодня Polygonal арт часто выглядит как стилизация для логотипов, фона и иллюстраций,
      которые обычно служат в качестве украшений, а не как привлекающий внимание элемент. Но именно здесь он показывает
      себя во всей красе.</div>
    <div class="dalee_blok"><span class="dalee_tekst">Читать далее</span></div>
  </div>

  <div class="blok">
    <div class="kartinka_blok"><img src="https://rakipov.ru/files/1.jpg" width="100%" alt=""></div>
    <div class="zagolovok_blok">
      <h3>Полигональный ар2т</h3>
    </div>
    <div class="opisanie_blok">Сегодня Polygonal арт часто выглядит как стилизация для логотипов, фона и иллюстраций,
      которые обычно служат в качестве украшений, а не как привлекающий внимание элемент. Но именно здесь он показывает
      себя во всей красе.</div>
    <div class="dalee_blok"><span class="dalee_tekst">Читать далее</span></div>
  </div>
  <script>
    "use_strict"
    // document.querySelectorAll(".blok").forEach(b => {
    //   b.addEventListener("mouseenter", function () {
    //     b.querySelector('.dalee_blok').style.opacity = 1
    //   })
    //   b.addEventListener("mouseleave", function () {
    //     b.querySelector('.dalee_blok').style.opacity = 0
    //   })
    // });
  </script>
</body>

</html>

laimas 15.06.2020 13:18

Цитата:

Сообщение от Сергей Ракипов
Такой вариант не подходит

А кто мешает указать по селектору нужное

.dalee_blok {
    opacity: 0
}
 
.blok:hover .dalee_blok {
    opacity: 1
}


Ну я же дал ссылку, почитайте о селекторах, что там сложного.

Сергей Ракипов 18.06.2020 16:21

laimas,
SuperZen,

Спасибо за помощь, очень признателен

Сергей Ракипов 19.06.2020 07:07

SuperZen,
А можете объяснить как читается этот код

document.querySelectorAll(".blok").forEach(b => {
      b.addEventListener("mouseenter", function () {
        b.querySelector('.dalee_blok').style.opacity = 1
      })
      b.addEventListener("mouseleave", function () {
        b.querySelector('.dalee_blok').style.opacity = 0
      })
    });

laimas 19.06.2020 09:19

document.querySelectorAll(".blok") //получить элементы класса blok
    .forEach(b => { //обойти их циклом, здесь b текущий в итерации элемент
        b.addEventListener("mouseenter", function () { //установить для него обработчик события mouseenter
            //в обработчике найти в этом элементе его дочерний элемент с классом dalee_blok
            //и установить значение правила стиля
            b.querySelector('.dalee_blok').style.opacity = 1 
        })


Соответственно b.addEventListener("mouseleave"... для ухода мыши с элемента.

SuperZen 19.06.2020 09:27

Сергей Ракипов, Hello World )
найти все элементы с классом .block (querySelectorAll(".blok")), например в коде в посте №6 их будет два(<div class="blok">), для каждого элемента (forEach( b =>... , здесь используется arrow function, можно записать как function(b) {...) повесим по два слушателя (b.addEventListener...), которые слушают mouseenter (что курсор зашел в область элемента), и mouseleave (что курсор вышел за пределы элемента), если курсор зашел в область элемента (function(mouseenter)...), найдем конкретно в этом элементе (b), элемент с классом .dalee_block (b.querySelector('.dalee_blok')) и выставим ему стиль прозрачность (('.dalee_blok').style.opacity) = 1, если курсор вышел за пределы области элемента, выставим ему стиль прозрачность 0

Сергей Ракипов 19.06.2020 11:38

laimas,
Спасибо, очень доходчиво

Сергей Ракипов 19.06.2020 11:39

SuperZen,
Спасибо что отозволись

Сергей Ракипов 19.06.2020 13:42

Не люблю быть глупым, а b это что и откуда взялось

laimas 19.06.2020 13:43

Цитата:

Сообщение от Сергей Ракипов
а b это что и откуда взялось

В качестве бонуса, в подарок. :) А как вы в функции определяете аргументы их имена?

Сергей Ракипов 19.06.2020 13:51

laimas,
b это аргумент?:

laimas 19.06.2020 13:54

Если бы код начинался так:

document.querySelectorAll(".blok") //получить элементы класса blok
    .forEach(function(b) {


для вас было бы понятней, что такое b и откуда? А вам дали код написанный с применением стрелочных функций, только в этом и разница.

Сергей Ракипов 19.06.2020 13:57

laimas,
да так понятнее, в скобках пишут аргументы иногда это называют почему то параметрами
И потом можно взять этот парметр.

laimas 19.06.2020 14:10

Можете "соединить" два значения в одно, страшного не будет. А вообще, параметр, это формальный параметр, передаваемое снаружи в функцию входное значение. А аргумент, фактическая переменная, значение которой используется как входное при вызове функции. Причем эту трактовку не обязательно вы встретите во всех языках.

https://developer.mozilla.org/ru/doc...uide/Functions

Сергей Ракипов 19.06.2020 15:46

let navedenie = document.querySelectorAll(".navedenie");
let kartinkaPriNavedenii = document.querySelectorAll(".kartinka_pri_navedenii");

navedenie.forEach(function(){
    
});


Как написать в действий функции, что при наведении, на блок navedenie показывался блок kartinkaPriNavedenii

visibility: visible;

laimas 19.06.2020 15:52

Цитата:

Сообщение от Сергей Ракипов
показывался блок kartinkaPriNavedenii

Какой именно или все? Ну поступать также как и в ранее показанном коде.

PS. Если это решаемо средствами CSS, то используйте его, не нужно грузить JS этим.

Сергей Ракипов 19.06.2020 16:15

Цитата:

Сообщение от laimas (Сообщение 526131)
Какой именно или все? Ну поступать также как и в ранее показанном коде.

Я пробую но не получается, какие то ошибки

<div class="shriht">
			<a href="12_pt_serif_open_sans/" target="_blank" class="navedenie">PT Serif & Open Sans</a>
			<div class="kartinka_pri_navedenii">
				<img src="kartinka/12.png" alt="">
			</div>
		</div>

		<div class="shriht">
			<a href="13_pt_sans_pt_serif/" target="_blank" class="navedenie">PT sans & PT serif</a>
			<div class="kartinka_pri_navedenii">
				<img src="kartinka/13.png" alt="">
			</div>
		</div>

laimas 19.06.2020 16:37

let navedenie = document.querySelectorAll(".navedenie"); - это коллекция элементов, let kartinkaPriNavedenii = document.querySelectorAll(".kartinka_pri_navedenii "); - это тоже коллекция элементов. При этом, как выясняется, каждый элемент коллекции kartinkaPriNavedenii является дочерним элементом соответствующего элемента коллекции navedenie. Как понять чего вам хочется, если это две коллекции? Если управлять только своим дочерним элементом, то зачем вы получаете коллекцию kartinkaPriNavedenii?

Кстати, kartinkaPriNavedenii - это может и говорит вам о чем-то, но все-таки, такие ребусы читать не из приятного.

И зачем так, ради "потренироваться" или же так и будет работать. Если последнее, то решать это посредством JS крайне плохая практика.

Сергей Ракипов 19.06.2020 16:58

laimas,
Я пока учусь в свободное время, честно не очень получается.

Сергей Ракипов 19.06.2020 17:03

Я сделал себе вот такую подсказку

https://rakipov.ru/shrift/


И мне нужно что бы это работало вот так, но для всех блоков, а не для одного.

const navedenie = document.querySelectorAll(".navedenie");
const kartinkaPriNavedenii = document.querySelector(".kartinka_pri_navedenii");

function priNavedenii_1() {
    let navedenie = document.querySelectorAll(".navedenie");
    let test = navedenie.getBoundingClientRect();

    console.log(test.top);

    function priNavedenii_2() {

        if (test.top >= 387) {
            kartinkaPriNavedenii.style.visibility = "visible";
            kartinkaPriNavedenii.style.top = "-387" + "px";
        } else if (test.top >= 0) {
            kartinkaPriNavedenii.style.visibility = "visible";
            kartinkaPriNavedenii.style.top = "0" + "px";
        }
    }
    navedenie.addEventListener("mouseover", priNavedenii_2);
}
window.addEventListener('mousemove', priNavedenii_1);


function priNavedenii_3(){
    kartinkaPriNavedenii.style.visibility = "hidden";

}
navedenie.addEventListener("mouseout", priNavedenii_3);

Сергей Ракипов 20.06.2020 07:20

Цитата:

Сообщение от laimas (Сообщение 526127)
Можете "соединить" два значения в одно, страшного не будет. А вообще, параметр, это формальный параметр, передаваемое снаружи в функцию входное значение. А аргумент, фактическая переменная, значение которой используется как входное при вызове функции. Причем эту трактовку не обязательно вы встретите во всех языках.

https://developer.mozilla.org/ru/doc...uide/Functions

Сегодня прочитал, что к аргументу, нужно относится как переменной, это так или я поплыл не туда.

рони 20.06.2020 08:38

Цитата:

Сообщение от Сергей Ракипов
для всех блоков,

<script>
document.addEventListener( "DOMContentLoaded" , function() {
let div = document.querySelector('.kolonki');
let changeTop = {
handleEvent(event) {
const target = event.target.closest('.shriht');
if (!target) return;
let rect = target.getBoundingClientRect();
let divPicture = target.querySelector('.kartinka_pri_navedenii');
let Height = divPicture.offsetHeight;
let h = rect.top + Height > innerHeight ? innerHeight - (rect.top + Height + 10) : 0;
divPicture.style.setProperty('top', `${h}px`)
}};
div.addEventListener('mouseenter', changeTop, true);
  });
</script>

laimas 20.06.2020 09:15

Цитата:

Сообщение от Сергей Ракипов
к аргументу, нужно относится как переменной

Все проще будет, если от естественного. Функции передаются параметры, которые описаны, причем в языках типизированных указаны и типы параметров, и возвращаемый функцией тип. Например функция:

int function_name(int a, int b) в Си - передаваемые в функцию параметры, это integer и функция возвращает integer. В РНР тип возвращаемый функцией описывается в конце после двоеточия, например function_name(array $a) : number. Если передаваемый параметр не будет соответствовать типу, то это вызовет ошибку.

Вызывая функцию вы передаете ей параметры - function_name(23, 99). Функция принимает эти параметры, которые являются ее аргументами:

function_name(a, b) {
    a и b - аргументы функции
}


PS. Строго говоря, аргументы функции нельзя назвать переменными, значение их зависит от переданных в функцию параметров, это да.

Сергей Ракипов 20.06.2020 10:17

рони,
Как всегда спасибо, очень приятно знать что есть такие люди как вы

Сергей Ракипов 20.06.2020 10:19

laimas,
Буду еще разбираться, и я кроме верстки не чего не знаю JS это для меня первый язык

Сергей Ракипов 21.06.2020 11:36

Простите. но я не понимаю


Как мне получить содержимое блок2 при наведении блок1 в такой структуре, и что бы это содержимое не отображалось при отводе от блока

<div class="blok1">блок обертка
        <div class="blok2">блок 
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок 
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок 
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
    </div>


Если можно но не много объяснить, я пробую повторять под свои нужды но не выходит, а документация сложно дается.

Я пробовал по разному но не могу понять как сделать коректно.

рони 21.06.2020 13:31

Сергей Ракипов,
:-?
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<style type="text/css">
.blok1 .blok2{
     display: none;
}
.blok1:hover .blok2{
     display: block;
}
</style>
</head>
<body>
<div class="blok1">блок обертка
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
    </div>


</body>
</html>

Сергей Ракипов 21.06.2020 14:35

Цитата:

Сообщение от рони (Сообщение 526200)
Сергей Ракипов,
:-?
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<style type="text/css">
.blok1 .blok2{
     display: none;
}
.blok1:hover .blok2{
     display: block;
}
</style>
</head>
<body>
<div class="blok1">блок обертка
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
    </div>


</body>
</html>

не правильно выразился

<div class="blok2-1">блок1</div> вот это блок, и их может быть множество и для каждого свой <div class="blok2-2">блок2</div>

рони 21.06.2020 15:26

Сергей Ракипов,
.blok2-1 + .blok2-2{
     display: none;
}
.blok2-1:hover + .blok2-2{
     display: block;
     background-color: hsla(60, 100%, 90%, 1);
}

Сергей Ракипов 21.06.2020 15:49

Цитата:

Сообщение от рони (Сообщение 526203)
Сергей Ракипов,
.blok2-1 + .blok2-2{
     display: none;
}
.blok2-1:hover + .blok2-2{
     display: block;
     background-color: hsla(60, 100%, 90%, 1);
}

Да я хочу с помощью js хочу сделать, может и проще, но я учусь.
И мне интересно как это можно сделать.
Сделаю сохраняю скрипт, может в будущем понадобится

рони 21.06.2020 16:29

Цитата:

Сообщение от Сергей Ракипов
я хочу с помощью js хочу сделать

вам давали ссылку
https://javascript.ru/forum/events/8...tml#post525963
пример
https://javascript.ru/forum/misc/805...tml#post526148
всё тоже самое и тут

Сергей Ракипов 21.06.2020 16:33

Цитата:

Сообщение от рони (Сообщение 526212)
вам давали ссылку
https://javascript.ru/forum/events/8...tml#post525963
пример
https://javascript.ru/forum/misc/805...tml#post526148
всё тоже самое и тут

Я пробовал, добросовестно убил пол дня.
И вот как там сделать у меня получается.
Но разница в том что Ребенок на котрого там наводится он и подвержен изменениям, а у меня на одного ребёнка нужно навестить а к другому применить изменения.
Там по разному верстка.

Все что было в этом топике я прочитал

рони 21.06.2020 16:35

Сергей Ракипов,
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<style type="text/css">
.blok2-1 + .blok2-2{
     display: none;
     color: red;
}

</style>
</head>
<body>
<div class="blok1">блок обертка
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
    </div>

<script>
let change = {
handleEvent(event) {
const target = event.target.closest('.blok2-1');
if (!target) return;
target.nextElementSibling.style.display = event.type == 'mouseenter' ? 'block' : 'none';
}};
document.addEventListener('mouseenter', change, true);
document.addEventListener('mouseleave', change, true);
</script>
</body>
</html>

рони 21.06.2020 16:38

Сергей Ракипов,
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<style type="text/css">
.blok2-1 + .blok2-2{
     display: none;
     color: red;
}
.blok2-1.active + .blok2-2{
     display: block;
}


</style>
</head>
<body>
<div class="blok1">блок обертка
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
        <div class="blok2">блок
            <div class="blok2-1">блок1</div>
            <div class="blok2-2">блок2</div>
        </div>
    </div>

<script>
let change = {
handleEvent(event) {
const target = event.target.closest('.blok2-1');
if (!target) return;
target.classList.toggle('active', event.type == 'mouseenter');
}};
document.addEventListener('mouseenter', change, true);
document.addEventListener('mouseleave', change, true);
</script>
</body>
</html>

Сергей Ракипов 21.06.2020 16:45

рони,
Сел разбираться


Часовой пояс GMT +3, время: 07:32.