const container = document.querySelector('ul');
const itemSelector = 'li';const randomStyles = () => ({
'background-color': `#${(Math.random() * 0xFFFFFF | 0).toString(16).padStart(6, 0)}`,
'padding-left': `${Math.random() * 100 | 0}px`,
});.active {
border: 3px dashed blue;
}const update = (el, styles) => (
Object.assign(el.style, styles),
el.classList.toggle('active')
);container.querySelectorAll(itemSelector).forEach(function(n) {
n.addEventListener('click', this);
}, function() {
document.querySelectorAll(`.${this.id}`).forEach(function(n) {
update(n, this);
}, randomStyles());
});container.addEventListener('click', ({ target: t }) => {
if ((t = t.closest(itemSelector)) && container.contains(t)) {
const styles = randomStyles();
for (const n of document.getElementsByClassName(t.getAttribute('id'))) {
update(n, styles);
}
}
});
const audio = new Audio();
const queue = [];
audio.onended = function() {
if (queue.length) {
audio.src = queue.shift();
audio.play();
}
};
function play(srcArray) {
queue.push(...srcArray);
if (audio.paused) {
audio.onended();
}
}
play([ '1.mp3', '2.mp3', '3.mp3' ]);
{ 'символ': 'на что его надо заменить' }:const combine = (keys, values) =>
keys.reduce((acc, n, i) => (acc[n] = values[i], acc), {});
const enToRu = combine(trans[0], trans[1]);
const ruToEn = combine(trans[1], trans[0]);const translate = (str, charset) => Array
.from(str, n => charset[n] || n)
.join('');
translate(';jgf', enToRu) // 'жопа'
translate('руддщб цщкдв!!', ruToEn) // 'hello, world!!'
Вешаю на него сеттер...
function test(m) {
let money = m;
Object.defineProperty(this, 'money', {
get() {
return money;
},
set(val) {
alert(`Значение свойства money меняется с ${money} на ${val}`);
money = val;
},
});
}function test(m) {
this.money = m;
return new Proxy(this, {
set(target, prop, val) {
alert(`Значение свойства ${prop} меняется с ${target[prop]} на ${val}`);
target[prop] = val;
return true;
},
});
}
Есть ли причины так не делать?
@click="pushNumbars() reader.push(*)"
img класс лучше переключать у article - максимально дальних не общих предков картинок. Если вдруг захотите при кликах на кнопки стилизовать ещё что-то помимо картинок, или измените взаимное расположение элементов, то не придётся переписывать js-код. Стили, конечно, придётся немного поправить, вместо .active будет .active img.const container = document.querySelector('.container');
const itemSelector = 'article';
const buttonSelector = `${itemSelector} .btn`;
const activeClass = 'active';container.addEventListener('click', e => {
const button = e.target.closest(buttonSelector);
if (button) {
button.closest(itemSelector).classList.toggle(activeClass);
}
});container.querySelectorAll(buttonSelector).forEach(function(n) {
n.addEventListener('click', this);
}, e => e.currentTarget.closest(itemSelector).classList.toggle(activeClass));
:hover и самой кнопке тоже:.btn:hover {
display: block;
}
<div id="container"></div>.#container span {
display: inline-block;
white-space: pre;
font-size: 40px;
animation: span .2s ease-out;
}
@keyframes span {
from {
transform: translateX(500px);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}const forEachWithDelay = (arr, delay, callback) =>
(function next(i) {
if (i < arr.length) {
setTimeout(() => (callback(arr[i]), next(-~i)), delay);
}
})(0);
// или
async function forEachWithDelay(arr, delay, callback) {
for (let i = 0; i < arr.length; i++) {
await new Promise(r => setTimeout(r, delay));
callback(arr[i]);
}
}forEachWithDelay(
'hello, world!!',
69,
n => document
.querySelector('#container')
.insertAdjacentHTML('beforeend', `<span>${n}</span>`)
);
// или
forEachWithDelay(
'fuck the world',
187,
function(n) {
this.appendChild(document.createElement('span'));
this.lastChild.textContent = n;
}.bind(document.getElementById('container'))
);
// хочу добавить в list_appointments_drugs новый объект drug, но получается что добавляю модель this.list_appointments_drugs.unshift(this.drug)
this.list_appointments_drugs.unshift({ ...this.drug })data: () => ({
drug: null,
defaultDrugData: {
...
},
...
}),
created() {
this.resetDrug();
},
methods: {
addDrug() {
this.list_appointments_drugs.unshift(this.drug);
this.resetDrug();
},
resetDrug() {
this.drug = { ...this.defaultDrugData };
},
...
},
Этот код не работает. Совсем.
test: function() { _.debounce(function() { console.log('test222'); }, 500); }
test: _.debounce(function() {
console.log('test222');
}, 500)
- var data = [ { "title": "Артем" }, { "title": "Аня" }, { "title": "Виталик" }, { "title": "Гена" }, { "title": "Дима" }, { "title": "Вася" }, { "title": "Гриша" }, { "title": "Андрей" } ]
mixin sort(data)
- var grouped = data.reduce((acc, n) => {
- var name = n.title[0];
- acc[name] = acc[name] || [];
- acc[name].push(n);
- return acc;
- }, {});
each group, name in grouped
div
h3= name
each obj in group
div= obj.title
div
+sort(data)
arr.sort((a, b) => moment(b.date, 'DD.MM.YY') - moment(a.date, 'DD.MM.YY'));const newArr = arr
.map(n => [ n, +n.date.split('.').reverse().join('') ])
.sort((a, b) => b[1] - a[1])
.map(n => n[0]);
array[i+1]=true;array[i+1]=true; (или array[i+1]=false;, в зависимости от условия) - массив снова увеличился, опять цикл не завершился, ну и так далее - массив будет жиреть до тех пор, пока станет невозможно выделить ему ещё памяти.const ops = {
OR: arr => arr.some(Boolean),
AND: arr => arr.every(Boolean),
XOR: arr => !!arr.reduce((p, c) => p ^ c, 0),
};
const logicalCalc = (arr, op) => ops[op](arr);const ops = {
OR(arr) {
for (const n of arr) if (n) {
return true;
}
return false;
},
AND(arr) {
for (const n of arr) if (!n) {
return false;
}
return true;
},
XOR(arr) {
let result = false;
for (const n of arr) if (n) {
result = !result;
}
return result;
},
};