Почему выходят сразу 10 элементов?
Как правильно перебрать элементы, чтобы выбирался один элемент? Есть модальное окно. При наведении на Постер появляются все модалки. Как сделать так, чтобы выходила определенная модалка и удалялась, когда уводишь курсор?
"use strict";
const CheckTextForNum = document.querySelector(".text"),
body = document.querySelector("body"),
moviePoster = document.querySelectorAll(".item"),
block1 = document.querySelector("div.block-D-none"),
blockClose = document.querySelector("div.close-opening-window"),
windowClose = document.querySelector(".closeWindow"),
divMovieContainer = document.querySelector("div.container-postr"),
templatePostr = document.querySelector(".movie-content").content;
divMovieContainer.addEventListener("mouseover", (event) => {
const parent = event.target.closest('div.container-postr');
const posters =
parent.querySelectorAll('div.block-D-none');
for (const block of posters) {
block.classList.add("block");
block.classList.remove("block-D-none");
}
});
divMovieContainer.addEventListener("mouseout", (event) => {
const parent = event.target.closest('div.container-postr');
const posters =
parent.querySelectorAll('div.block-D-none');
for (const block of posters) {
block.classList.remove("block");
block.classList.add("block-D-none");
}
});
showPostr();
async function showPostr() {
try {
const response = await fetch("https://jsonplaceholder.typicode.com/users/");
const users = await response.json();
createNameMovie(users);
} catch (error) {
showErr(error);
}
}
function showErr(err) {
body.innerHTML = `<span class="error">ERROR:${err}</span>`;
}
function createNameMovie(users) {
for (let user of users) {
const fragment = templatePostr.cloneNode(true);
fragment.querySelector(".name-movie").textContent = user.username;
fragment.querySelector(".date-movie").textContent = "Date: " + user.id;
divMovieContainer.append(fragment);
}
}
* {
font-family: Arial, Helvetica, sans-serif;
}
body {
margin: 0;
}
.wrap {
background-image: url(movie-background-collage.jpg);
/* background-repeat: no-repeat; */
min-width: 320px;
position: relative;
padding-top: 200px;
background-size: cover;
}
.wrap-center {
max-width: 1100px;
margin: 0 auto;
}
header {
display: flex;
flex-direction: row;
align-items: center;
background-color: white;
}
header>ul {
display: none;
list-style-type: none;
font-size: larger;
font-weight: 800;
padding: 0 .2em .3em .6em;
}
header>ul>li>a {
text-decoration: none;
color: gray;
}
header>ul>li>a:hover {
padding-bottom: .6em;
box-shadow: inset 0 -2px blue;
transition: .3s ease;
}
header>ul>li {
padding: 0 .5em 0 .4em;
}
.logo {
display: flex;
align-items: center;
font-size: x-large;
text-decoration: none;
letter-spacing: .2em;
color: black;
}
.icon-logo {
padding-right: .5em;
}
.group-logo {
margin: .3em 0;
margin-left: .6em;
}
.btn-search {
position: absolute;
margin: .5em;
}
.group-search {
flex-grow: 1;
display: none;
margin: .3em 0;
margin-right: .6em;
}
.group-poisk {
display: flex;
align-items: center;
justify-content: flex-end;
flex-grow: 1;
}
.story {
height: 31px;
width: 100%;
box-shadow: 1px 0px 6px blue;
border-radius: 11px;
padding-left: .7em;
font-size: large;
}
.login {
margin-left: 1em;
border-radius: 7px;
border: none;
background-color: darkblue;
font-size: large;
color: white;
}
.login:hover {
background-color: blue;
}
.form {
display: flex;
justify-content: center;
}
.search-btn {
top: 28px;
right: 310px;
position: absolute;
/* background-color: white; */
}
.desc-text {
background-color: rgb(208, 206, 206);
padding: .2em 0 1em .6em;
}
.name-site {
letter-spacing: 0.2em;
}
.text-color {
color: white;
margin-bottom: .8em;
}
img {
max-width: 100%;
/* border-radius: 10%; */
}
.kino-poster-img {
width: 100%;
}
main {
background-color: #ededed;
}
.container-postr {
padding: 1em;
display: flex;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
}
.item {
-webkit-box-shadow: 0px 0px 7px 6px rgba(34, 60, 80, 0.2);
-moz-box-shadow: 0px 0px 7px 6px rgba(34, 60, 80, 0.2);
box-shadow: 0px 0px 7px 6px rgba(34, 60, 80, 0.2);
width: 33.33%;
margin: .5em .7em;
}
.url-movie {
display: flex;
flex-direction: column;
justify-content: end;
align-items: center;
}
.name-group-movie {
padding: 10px;
position: absolute;
z-index: 10;
color: #fff;
text-align: center;
}
.name-movie {
width: 100%;
font-size: calc(14px + 2 * ((100vw - 420px) / 860));
font-weight: 600;
margin: 0;
}
.date-movie {
margin: .5em;
position: absolute;
z-index: 5;
padding: 3px 5px;
border-radius: 3px;
background-color: rgba(39, 39, 137, 0.868);
color: #fff;
font-weight: 600;
font-size: 13px;
}
.error {
color: black;
}
footer {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
background-color: rgb(9, 9, 54);
color: white;
padding: 1em 0em;
}
.group-logo-foot {
margin-left: .6em;
display: flex;
flex-direction: column;
align-items: center;
}
.foot-menu {
display: flex;
flex-direction: column;
align-items: center;
margin: 0 1em;
font-size: larger;
}
.foot-menu>ul {
padding: 0;
margin-top: 0;
list-style-type: '›';
}
.foot-menu>ul>li>a {
text-decoration: none;
padding: 0 .6em;
color: white;
}
ul>li {
padding-bottom: .5em;
}
ul>li>a:hover {
color: blue;
}
/* window modal*/
span {
user-select: none;
}
button {
user-select: none;
}
.block-D-none {
display: none;
}
.block {
position: absolute;
left: auto;
top: auto;
transform: translate(-33%, -33%);
width: 125px;
height: 120px;
background-color: black;
opacity: 1;
border-radius: 5%;
}
.block2 {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.closeWindow {
width: 5vw;
height: 5vh;
font-weight: 900;
color: black;
}
@media(min-width:770px) {
.item {
width: 25%;
}
footer {
flex-direction: row;
}
.group-logo-foot {
align-items: flex-start;
}
}
@media(min-width:1025px) {
.group-search,
header>ul {
display: flex;
}
.item {
width: 15.66%;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="wink.css">
<title>Document</title>
</head>
<body>
<div class="wrap">
<div class="wrap-center">
<header>
<div class="group-logo">
<a class="logo" href="#"><img class="icon-logo" src="ico-logo.png" alt="">NAZFILM</a>
</div>
<ul>
<li><a href="/film">Фильмы</a></li>
<li><a href="/serial">Сериалы</a></li>
<li><a href="/multfilm">Мультфильмы</a></li>
</ul>
<div class="group-search">
<div class="group-poisk">
<input class="story form__email" type="text" value="red">
<span class="btn-search form__btn"><img src="ico-poisk.png" alt=""></span>
</div>
<button class="login openModalWindow">Войти</button>
</div>
</header>
<main>
<div class="container-postr">
</div>
</main>
<div class="desc-text">
<h3><span class="name-site">NAZFILM</span> – фильмы в HD онлайн бесплатно и без регистрации!</h3>
<span>Современный портал nazfilm вас точно порадует: на сайте собраны тысячи фильмов,
которые можно просматривать онлайн в высоком качестве. Удобный,
простой и комфортный «кинотеатр на дому» предлагает смотреть новинки совершенно бесплатно,
то есть значительно экономит ваше время и деньги на поиск кинозала и покупку билетов.
Фильмы, представленные на сайте, рассортированы по категориям и жанрам: Лордфильм регулярно добавляет не только популярные киноленты,
но и сериалы, и мультфильмы в приятной озвучке и хорошем качестве.
Смотреть кино можно круглосуточно и в любой точке мира – мы публикуем новинки,
которые помогут отдохнуть после тяжелых будней и еще раз встретиться с любимыми героями.
Официальный сайт Лорд Фильм дает возможность смотреть любимые фильмы и сериалы с любого устройства.
Это может быть компьютер, планшет, а также смартфон на IOS или Android.
Умный проигрыватель определит оптимальный режим просмотра для вашего девайса,
а вам останется только подобрать увлекательные фильмы онлайн из огромного архива и наслаждаться просмотром!</span>
</div>
<footer>
<div class="group-logo-foot">
<a class="logo text-color" href="#"><img class="icon-logo" src="ico-logo.png" alt="">NAZFILM</a>
<span>
<span class="name-site">NAZFILM</span> - сайт Назфильм онлайн в хорошем качестве бесплатно.
<br>
<a class="text-color" href="https://mail.ru/po" target="_blank">[email protected]</a> - почта для обратной связи.
</span>
</div>
<div class="foot-menu">
<p>Главное меню</p>
<ul>
<li><a href="">Фильмы</a></li>
<li><a href="">Сериалы</a></li>
</ul>
</div>
</footer>
</div>
</div>
<template class="movie-content">
<div class="item">
<div class="date-movie"></div>
<a class="url-movie" href="https://mo.lordfilm15.com/filmy/51352-chuzhoj-romul-2024.html" target="_blank">
<img class="poster-img" src="kino-poster.jpg" alt="">
<div class="name-group-movie">
<h3 class="name-movie"></h3>
</div>
<!--open window-->
<div class="block-D-none close-opening-window">
<div class="block2">
</div>
</div>
</a>
</div>
</template>
<script src="wink.js"></script>
</body>
</html>
Ответы (1 шт):
Автор решения: Vladislav G.
→ Ссылка
Например так. Работает, но там верстку сначала надо нормально сделать, чтобы не прыгали "модалки".
"use strict";
const CheckTextForNum = document.querySelector(".text"),
body = document.querySelector("body"),
moviePoster = document.querySelectorAll(".item"),
block1 = document.querySelector("div.block-D-none"),
blockClose = document.querySelector("div.close-opening-window"),
windowClose = document.querySelector(".closeWindow"),
divMovieContainer = document.querySelector("div.container-postr"),
templatePostr = document.querySelector(".movie-content").content;
divMovieContainer.addEventListener("mouseover", (event) => {
// const parent = event.target.closest('div.container-postr');
// const posters =
// parent.querySelectorAll('div.block-D-none');
// for (const block of posters) {
// block.classList.add("block");
// block.classList.remove("block-D-none");
// }
if (event.target !== divMovieContainer) {
const modal = event.target.closest('.item').querySelector('.close-opening-window');
modal.classList.add('block');
modal.classList.remove('block-D-none');
}
});
divMovieContainer.addEventListener("mouseout", (event) => {
// const parent = event.target.closest('div.container-postr');
// const posters =
// parent.querySelectorAll('div.block-D-none');
// for (const block of posters) {
// block.classList.remove("block");
// block.classList.add("block-D-none");
// }
if (event.target !== divMovieContainer) {
const modal = event.target.closest('.item').querySelector('.close-opening-window');
modal.classList.remove('block');
modal.classList.add('block-D-none');
}
});
showPostr();
async function showPostr () {
try {
const response = await fetch("https://jsonplaceholder.typicode.com/users/");
const users = await response.json();
createNameMovie(users);
} catch (error) {
showErr(error);
}
}
function showErr (err) {
body.innerHTML = `<span class="error">ERROR:${err}</span>`;
}
function createNameMovie (users) {
for (let user of users) {
const fragment = templatePostr.cloneNode(true);
fragment.querySelector(".name-movie").textContent = user.username;
fragment.querySelector(".date-movie").textContent = "Date: " + user.id;
divMovieContainer.append(fragment);
}
}
* {
font-family: Arial, Helvetica, sans-serif;
}
body {
margin: 0;
}
.wrap {
background-image: url(movie-background-collage.jpg);
/* background-repeat: no-repeat; */
min-width: 320px;
position: relative;
padding-top: 200px;
background-size: cover;
}
.wrap-center {
max-width: 1100px;
margin: 0 auto;
}
header {
display: flex;
flex-direction: row;
align-items: center;
background-color: white;
}
header>ul {
display: none;
list-style-type: none;
font-size: larger;
font-weight: 800;
padding: 0 .2em .3em .6em;
}
header>ul>li>a {
text-decoration: none;
color: gray;
}
header>ul>li>a:hover {
padding-bottom: .6em;
box-shadow: inset 0 -2px blue;
transition: .3s ease;
}
header>ul>li {
padding: 0 .5em 0 .4em;
}
.logo {
display: flex;
align-items: center;
font-size: x-large;
text-decoration: none;
letter-spacing: .2em;
color: black;
}
.icon-logo {
padding-right: .5em;
}
.group-logo {
margin: .3em 0;
margin-left: .6em;
}
.btn-search {
position: absolute;
margin: .5em;
}
.group-search {
flex-grow: 1;
display: none;
margin: .3em 0;
margin-right: .6em;
}
.group-poisk {
display: flex;
align-items: center;
justify-content: flex-end;
flex-grow: 1;
}
.story {
height: 31px;
width: 100%;
box-shadow: 1px 0px 6px blue;
border-radius: 11px;
padding-left: .7em;
font-size: large;
}
.login {
margin-left: 1em;
border-radius: 7px;
border: none;
background-color: darkblue;
font-size: large;
color: white;
}
.login:hover {
background-color: blue;
}
.form {
display: flex;
justify-content: center;
}
.search-btn {
top: 28px;
right: 310px;
position: absolute;
/* background-color: white; */
}
.desc-text {
background-color: rgb(208, 206, 206);
padding: .2em 0 1em .6em;
}
.name-site {
letter-spacing: 0.2em;
}
.text-color {
color: white;
margin-bottom: .8em;
}
img {
max-width: 100%;
/* border-radius: 10%; */
}
.kino-poster-img {
width: 100%;
}
main {
background-color: #ededed;
}
.container-postr {
padding: 1em;
display: flex;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
}
.item {
-webkit-box-shadow: 0px 0px 7px 6px rgba(34, 60, 80, 0.2);
-moz-box-shadow: 0px 0px 7px 6px rgba(34, 60, 80, 0.2);
box-shadow: 0px 0px 7px 6px rgba(34, 60, 80, 0.2);
width: 33.33%;
margin: .5em .7em;
}
.url-movie {
display: flex;
flex-direction: column;
justify-content: end;
align-items: center;
}
.name-group-movie {
padding: 10px;
position: absolute;
z-index: 10;
color: #fff;
text-align: center;
}
.name-movie {
width: 100%;
font-size: calc(14px + 2 * ((100vw - 420px) / 860));
font-weight: 600;
margin: 0;
}
.date-movie {
margin: .5em;
position: absolute;
z-index: 5;
padding: 3px 5px;
border-radius: 3px;
background-color: rgba(39, 39, 137, 0.868);
color: #fff;
font-weight: 600;
font-size: 13px;
}
.error {
color: black;
}
footer {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
background-color: rgb(9, 9, 54);
color: white;
padding: 1em 0em;
}
.group-logo-foot {
margin-left: .6em;
display: flex;
flex-direction: column;
align-items: center;
}
.foot-menu {
display: flex;
flex-direction: column;
align-items: center;
margin: 0 1em;
font-size: larger;
}
.foot-menu>ul {
padding: 0;
margin-top: 0;
list-style-type: '›';
}
.foot-menu>ul>li>a {
text-decoration: none;
padding: 0 .6em;
color: white;
}
ul>li {
padding-bottom: .5em;
}
ul>li>a:hover {
color: blue;
}
/* window modal*/
span {
user-select: none;
}
button {
user-select: none;
}
.block-D-none {
display: none;
}
.block {
position: absolute;
left: auto;
top: auto;
transform: translate(-33%, -33%);
width: 125px;
height: 120px;
background-color: black;
opacity: 1;
border-radius: 5%;
}
.block2 {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.closeWindow {
width: 5vw;
height: 5vh;
font-weight: 900;
color: black;
}
@media(min-width:770px) {
.item {
width: 25%;
}
footer {
flex-direction: row;
}
.group-logo-foot {
align-items: flex-start;
}
}
@media(min-width:1025px) {
.group-search,
header>ul {
display: flex;
}
.item {
width: 15.66%;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="wink.css">
<title>Document</title>
</head>
<body>
<div class="wrap">
<div class="wrap-center">
<header>
<div class="group-logo">
<a class="logo" href="#"><img class="icon-logo" src="ico-logo.png" alt="">NAZFILM</a>
</div>
<ul>
<li><a href="/film">Фильмы</a></li>
<li><a href="/serial">Сериалы</a></li>
<li><a href="/multfilm">Мультфильмы</a></li>
</ul>
<div class="group-search">
<div class="group-poisk">
<input class="story form__email" type="text" value="red">
<span class="btn-search form__btn"><img src="ico-poisk.png" alt=""></span>
</div>
<button class="login openModalWindow">Войти</button>
</div>
</header>
<main>
<div class="container-postr">
</div>
</main>
<div class="desc-text">
<h3><span class="name-site">NAZFILM</span> – фильмы в HD онлайн бесплатно и без регистрации!</h3>
<span>Современный портал nazfilm вас точно порадует: на сайте собраны тысячи фильмов,
которые можно просматривать онлайн в высоком качестве. Удобный,
простой и комфортный «кинотеатр на дому» предлагает смотреть новинки совершенно бесплатно,
то есть значительно экономит ваше время и деньги на поиск кинозала и покупку билетов.
Фильмы, представленные на сайте, рассортированы по категориям и жанрам: Лордфильм регулярно
добавляет не только популярные киноленты,
но и сериалы, и мультфильмы в приятной озвучке и хорошем качестве.
Смотреть кино можно круглосуточно и в любой точке мира – мы публикуем новинки,
которые помогут отдохнуть после тяжелых будней и еще раз встретиться с любимыми героями.
Официальный сайт Лорд Фильм дает возможность смотреть любимые фильмы и сериалы с любого устройства.
Это может быть компьютер, планшет, а также смартфон на IOS или Android.
Умный проигрыватель определит оптимальный режим просмотра для вашего девайса,
а вам останется только подобрать увлекательные фильмы онлайн из огромного архива и наслаждаться
просмотром!</span>
</div>
<footer>
<div class="group-logo-foot">
<a class="logo text-color" href="#"><img class="icon-logo" src="ico-logo.png" alt="">NAZFILM</a>
<span>
<span class="name-site">NAZFILM</span> - сайт Назфильм онлайн в хорошем качестве бесплатно.
<br>
<a class="text-color" href="https://mail.ru/po" target="_blank">[email protected]</a> -
почта для обратной связи.
</span>
</div>
<div class="foot-menu">
<p>Главное меню</p>
<ul>
<li><a href="">Фильмы</a></li>
<li><a href="">Сериалы</a></li>
</ul>
</div>
</footer>
</div>
</div>
<template class="movie-content">
<div class="item">
<div class="date-movie"></div>
<a class="url-movie" href="https://mo.lordfilm15.com/filmy/51352-chuzhoj-romul-2024.html" target="_blank">
<img class="poster-img" src="kino-poster.jpg" alt="">
<div class="name-group-movie">
<h3 class="name-movie"></h3>
</div>
<!--open window-->
<div class="block-D-none close-opening-window">
<div class="block2">
</div>
</div>
</a>
</div>
</template>
<script src="wink.js"></script>
</body>
</html>