const obj = eval(`(${document.querySelector('.link').dataset.test})`);JSON.parse использовать, пишите в атрибут корректный json, надо заменить одинарные кавычки на двойные, а само значение атрибута в одинарных писать:data-test='{"test1": "1", "test2": "2", "test3": "903", "test4": "4"}'
в идеале, чтобы каждое нажатие на ссылку делало один поворот по часовой стрелке на 90 градусов
.rotate0 { transform: rotate(0deg); }
.rotate90 { transform: rotate(90deg); }
.rotate180 { transform: rotate(180deg); }
.rotate270 { transform: rotate(270deg); }<a href="#" data-rotate="-1">Повернуть на -90 градусов</a>
<a href="#" data-rotate="+1">Повернуть на +90 градусов</a>const photo = document.querySelector('.photo');
const classes = [ 'rotate0', 'rotate90', 'rotate180', 'rotate270' ];
let index = 0;
document.addEventListener('click', function(e) {
const rotate = +e.target.dataset.rotate;
if (rotate) {
photo.classList.remove(classes[index]);
index = (index + rotate + classes.length) % classes.length;
photo.classList.add(classes[index]);
}
});а можно пример, чтобы поворачивать по 1 градусу и в обратную сторону
style.transform:<a href="#" data-rotate="-1">rotate ccw</a>
<a href="#" data-rotate="+1">rotate cw</a>const photo = document.querySelector('.photo');
let angle = 0;
document.querySelectorAll('[data-rotate]').forEach(n => n.addEventListener('click', onClick));
function onClick({ target: { dataset: { rotate } } }) {
angle = (angle + +rotate + 360) % 360;
photo.style.transform = `rotate(${angle}deg)`;
}
можно как-то, грубо говоря, весь изменяемый объект наверх посылать
@change="onChange"methods: {
onChange(e) {
this.userProps[e.name] = e.val;
}
}
messageNode.classList.add('error-message');self.formElement.querySelectorAll('.error-message').forEach(n => n.remove(n));
что не так в скрипте
можно ли его сделать проще
document.querySelector('#play').addEventListener('change', e => {
document.querySelector('.block').style.opacity = +e.target.checked;
});#play:checked ~ div > .block {
opacity: 1;
}
Это нормально...
...или можно как то его оставить что бы не рендерит по новой?
function one() {
console.log('AAAAAAAAAA');
one = () => {};
}function once(f) {
let called = false;
return function() {
if (!called) {
called = true;
return f.apply(this, arguments);
}
};
}
const one = once(function() {
console.log('AAAAAAAAAA');
});
plotOptions: {
line: {
connectEnds: false
}
}
const newArr = arr
.reduce((acc, n, i, a) => (
a[i - 1] !== n && acc.push([ n, 0 ]),
acc[acc.length - 1][1]++,
acc
), [])
.reduce((acc, n) => (
acc.push(...Array(n[1]).fill(n[1] > 2 ? `${n[0]}` : n[0])),
acc
), []);const newArr = arr.map((n, i, a) => (
a[i - 1] === n && a[i - 2] === n ||
a[i + 1] === n && a[i + 2] === n ||
a[i - 1] === n && a[i + 1] === n
? `${n}`
: n
));
[] || this.$store.getters.getMyData() всегда будет иметь своим значением пустой массив. Это первое. Второе - а что, ваш геттер действительно возвращает функцию? Или вы полагаете, будто его надо вызывать? Третье - если по вашей задумке значением myData может быть пустой массив, то почему вы работаете с myData как с объектом? Или, почему вы, зная, что нужен объект с определёнными свойствами, в качестве заглушки используете массив?myData() {
return this.$store.getters.getMyData || { list: [] };
},
!!str.trim()./[^\s]/.test(str).идея была в том, чтобы поставить регулярное выражение в паттерн валидации ангуляр формы
[pattern]="'.*\\S.*'".
[...new Set(arr.map(n => n.id))].Object.values(arr.reduce((acc, n) => (acc[n.id] = n.id, acc), {}))
// или
Array.from(new Map(arr.map(({ id }) => [ id, id ])).values())
// или
arr.map(n => n.id).filter((n, i, a) => i === a.indexOf(n))
// или
arr.reduce((acc, n) => (acc.includes(n.id) || acc.push(n.id), acc), [])