.active
:console.log(`Card ${key + 1} start!`);
el.classList.add('active');
console.log(`Card ${key + 1} end!`); // выполнится почти одновременно с предыдущими строками
setTimeout
на то же время, что длится анимация:console.log(`Card ${key + 1} start!`);
el.classList.add('active');
setTimeout(() => console.log(`Card ${key + 1} end!`), 1000);
el.addEventListener('transitionend', () => {
console.log(`Card ${key + 1} end!`);
});
setTimeout(() => {
console.log(`Card ${key + 1} start!`);
const onTransitionEnd = () => {
console.log(`Card ${key + 1} end!`);
el.removeEventListener('transitionend', onTransitionEnd);
}
el.addEventListener('transitionend', onTransitionEnd);
el.classList.add('active');
}, ms);
<!-- было -->
Смотрите <a href="https://example.com/catalog">наш каталог</a>
<!-- стало -->
Смотрите <a href="https://example.com/catalog?uuid=09076506-5f26-11eb-9b96-005056111e65">наш каталог</a>
плюс добавить стандартные utm-метки для общей статистики того же Яндекса. Они не позволяют идентифицировать конкретного пользователя.uuid
и при обнаружении кидать событие в Метрику. Например, можно назначать этот UUID как UserID Метрики методом setUserId() const wrapper = () => {
const $$$ = {
get activatedFilters() {
return document.querySelectorAll(".chose");
}
}
a.addEventListener("click", () => {
// делает что-то с $$$.activatedFilters
}
b.addEventListener("click", () => {
// делает что-то другое с $$$.activatedFilters
}
}
const wrapper = () => {
const getActivatedFilters = () => document.querySelectorAll(".chose");
a.addEventListener("click", () => {
// делает что-то с getActivatedFilters()
}
b.addEventListener("click", () => {
// делает что-то другое с getActivatedFilters()
}
}
id
записи в БД, которую надо обработать – чтобы рабочий, взявший задачу, заново собирал данные. Это не кошерно и калорийно.const result = grop.reduce((acc, el) => acc.concat(el, city.filter((c) => c.idMain === el.idParent)), []);
/*
[
{
"name": "merseded",
"groupName": "avto",
"idParent": "11"
},
{
"name": "test1",
"idMain": "11"
},
{
"name": "test2",
"idMain": "11"
},
{
"name": "test4",
"idMain": "11"
},
{
"name": "bmv",
"groupName": "avto",
"idParent": "20"
},
{
"name": "test3",
"idMain": "20"
}
]
*/
setTimeout(() => {
console.log(docName.innerText);
}, 3000); // через 3 секунды-то уже появится контент?
const config = { attributes: false, childList: true, subtree: true, characterData: true };
const callback = function(mutationsList, observer) {
for(const mutation of mutationsList) {
if (mutation.type === 'childList') {
console.log(docName.textContent);
}
}
};
const observer = new MutationObserver(callback);
observer.observe(docName, config);
let x = 0;
const onTimerTick = () => {x = x + 1} // по 1 px за «кадр»
let start;
const step = (timestamp) => { // float время в ms с загрузки страницы
if (!start) start = timestamp;
const progress = timestamp - start;
x = x + progress * 0.001; // надо как-то посчитать скорость в пикселях за миллисекунду
if (progress < 2000) {
window.requestAnimationFrame(step);
}
}
new Promise((resolve, reject)...
, но надо же его изнутри когда-нибудь таки отресолвить! Внутри промиса вызвать resolve(result)
resolve()
, либо сдуться reject()
.result = await my_promise;
прост дожидается, пока промис рванёт с каким-то результатом.