<!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.addEventListener
openBlock
и backBlock
не меняются, их можно вместо let
объявить const
document.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 == 30
if..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)
}
});
На сколько процентов, хотя бы приблизительно?
Потому что один человек говорит, что без них лучше, другой, что это необходимо
все как один говорят: Используйте препроцессоры