const animateElement = (el) => {
const endValue = +el.dataset.value;
let currValue = 0;
const update = () => {
el.innerText = ++currValue;
if (currValue < endValue) {
setTimeout(update, 20);
}
}
update();
}
[...document.querySelectorAll('[data-value]')].forEach(animateElement);
Тут неоптимальный момент, обилие часто создаваемых Timeout'ов: при большом количестве элементов и короткой задержке может тормозить. Альтернативный вариант сделать единые общие «часы» обновляющие, при необходимости, каждого участника коллекции. <div class="container">
<p class="text" data-text-a="ЭТО СТАРЫЙ ТЕКСТ" data-text-b="ВОТ НОВЫЙ ТЕКСТ"></p>
<div class="btn">ВЫБРАТЬ</div>
</div>
const state = {
isPrimary: true,
// потом добавятся может ещё свойства
};
render()
, которая отрисовывает состояние «на сейчас».oldArray.map(({prop1, prop2} => ({prop1, prop2}))
const oldArray = [
{a: "A1", b: "BB1", prop1: "wanted1", prop2: "dead or alive1", z: "zee1"},
{a: "A2", b: "BB2", prop1: "wanted2", prop2: "dead or alive2", z: "zee2"},
{a: "A3", b: "BB3", prop1: "wanted3", prop2: "dead or alive3", z: "zee3"},
{a: "A4", b: "BB4", prop1: "wanted4", prop2: "dead or alive4", z: "zee4"},
{a: "A5", b: "BB5", prop1: "wanted5", prop2: "dead or alive5", z: "zee5"},
];
const newArray = oldArray.map(({prop1, prop2}) => ({prop1, prop2}));
// [
// {"prop1": "wanted1", "prop2": "dead or alive1"},
// {"prop1": "wanted2", "prop2": "dead or alive2"},
// {"prop1": "wanted3", "prop2": "dead or alive3"},
// {"prop1": "wanted4", "prop2": "dead or alive4"},
// {"prop1": "wanted5", "prop2": "dead or alive5"}
// ]
const handler = () => {
console.log('click');
}
document.addEventListener('click', handler);
document.addEventListener('click', handler);
document.addEventListener('click', handler);
// при клике выведет только 1 сообщение в консоль
$(document).on('click', handler);
$(document).on('click', handler);
$(document).on('click', handler);
// при клике вывалится 3 сообщения
const dirname = (str) => {
const pos = str.lastIndexOf('/');
if (-1 === pos) return str;
return str.substring(0, pos);
}
dirname('/siparis/kampanyalar/tumu/cok-karisik-orta-firsati')
// /siparis/kampanyalar/tumu
@
— это Оператор управления ошибками: если он предшествует какому-либо выражению в PHP-коде, любые сообщения об ошибках, генерируемые этим выражением, будут подавлены. const [data1, data2, data3] = await Promise.all(
['/test1', '/test2', '/test3']
.map((url) => http.get(url).then(({ data }) => data))
)
.then((values) => {
console.log('values', values);
return values;
});
const [data1, data2, data3] = await Promise.all(
['/test1', '/test2', '/test3']
.map((url) => http.get(url))
)
.then((values) => values.map(({ data }) => data));
var array = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
array
// из каждого сделать функцию, возвращающую промис
.map((el) => () => new Promise((resolve, reject) => $.ajax({
url: '/assets/themes/theme/send.php',
method: 'post',
data: {text: el},
success: resolve,
error: reject,
})))
// склеить цепочку
.reduce((acc, c) => acc.then(() => c()), Promise.resolve())
.catch(err => console.error(err));