<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div class="bg">
<div class="inner"><h1>Heading</h1><p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Odio, perspiciatis nobis tempore deserunt iusto delectus alias sunt at quo aut molestias possimus cum numquam rerum pariatur quis ab ut quasi!</p></div>
</div>
</body>
<style>
.bg{
width: 900px;
display: flex;
justify-content: center;
align-items: center;
height: 600px;
background: url(https://img.freepik.com/free-vector/spring-landscape-scene_52683-56331.jpg?t=st=1676042552~exp=1676043152~hmac=a344e4dbe3e47487bf10ec2aa6bef3ea1bc3b4e23a68ef595ea082d4ea17755f);
background-repeat: no-repeat;
background-size: cover;
}
.inner{
width: 100%;
color: white;
height: 100%;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
/*Затемнение*/ backdrop-filter: brightness(50%);
}
</style>
</html>
<button class="open" data-target="b1">Open1</button>
<button class="open" data-target="b2">Open2</button>
<div class="hidden-block" id="b1">
<ul>
<li>Первый</li>
</ul>
<button class="close">Close</button>
</div>
<div class="hidden-block" id="b2">
<ul>
<li>Второй</li>
</ul>
<button class="close">Close</button>
</div>// 1. Константа, значение не меняется
// 2. Это кнопка, а не блок (название фиговое)
// 3. Их может быть несколько на странице
const openButtons = document.querySelectorAll('.open');
// Закрывашка находится внутри блока, поэтому искать ее нужно именно внутри блока
// чтобы она закрывала только свой блок. Это выкидываем
// let backBlock = document.querySelector('.close');
// Вешаем клики на все открывашки
openButtons.forEach(btn => {
btn.addEventListener('click', e => {
// дергаем ID из data-атрибута
const targetId = e.target.dataset.target;
document.getElementById(targetId).classList.add('open-hidden-block');
});
});
// Перебираем все блоки и ищем в них закрывашки
document.querySelectorAll('.hidden-block').forEach(block => {
const closer = block.querySelector('.close');
closer.addEventListener('click', () => {
block.classList.remove('open-hidden-block');
});
}); backBlock.addEventListener добавляется внутри обработчика клика. Т.е. каждый раз, как нажимаем на openBlock, вешается ещё и ещё один обработчик на backBlock. Достаточно один раз, заранее, так же как сейчас openBlock.addEventListeneropenBlock и backBlock не меняются, их можно вместо let объявить constdocument.querySelector('.hidden-block') наверное, не имеет смысла, достаточно один раз, заранее const hiddenBlock = document.querySelector('.hidden-block');и далее обращаться к этой константе hiddenBlock.let arr = [2,1,3,5,2,7,1,4];
let min = arr[0], max = arr[0];
for(let i of arr) {
if(min > i) min = i;
if(max < i) max = i;
}
console.log('Result is: ' + (max-min)); console.log(work([-10, -20, -40])); // -40 - (-10) = -30 => 30
-10 вычитаем - минимальное -40:-10 - (-40) == -10 + 40 == 30if..else, Math.abs() и TensorFlow )без reduce и т.д.Тогда и без
Math.max() / Math.min()max и min равны первому элементу.max. Если очередной больше, то обновляем max. Та же логика с min.Math.max() + Math.min(),
while() из этого зоопарка присутствует только условие.for( i = 0; i < 2; i = i + 1) {
console.log( i ); // выводит значение i в консоль
}i = 0.i < 2.0.i = i + 1.i < 2 и если всё ок, снова ныряем.1.i = i + 1, но условие уже не проходит проверку, т.к. i стало равно 2.while() выглядел бы так:i = 0;
while( i < 2 ) {
console.log( i );
i = i + 1;
}for() это просто более компактная запись довольно типичного цикла. var fired = false;
window.addEventListener('scroll', () => {
if (fired === false) {
fired = true;
setTimeout(() => {
// Здесь все эти тормознутые трекеры, чаты и прочая ересь,
// без которой жить не может отдел маркетинга, и которые
// дико бесят разработчиков, когда тот же маркетинг приходит
// с вопросом "почему сайт медленно грузится, нам гугл сказал"
}, 1000)
}
}); На сколько процентов, хотя бы приблизительно?
Потому что один человек говорит, что без них лучше, другой, что это необходимо
все как один говорят: Используйте препроцессоры