Скажите, может ли он ставить по одной точке и показывать?
const getRandom = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
const NUM_POINTS = 100000;
const BASE_POINTS = [
[ 50, 50 ],
[ 1200, 50 ],
[ 625, 500 ],
];
const draw = SVG('drawing').size(1200, 500);
const group = draw.group();
let currPoints = 0;
let point = [ (getRandom(50, 1200)), (getRandom(50, 500)) ];
function nextPoint(previousPoint) {
const basePoint = BASE_POINTS[getRandom(0, BASE_POINTS.length - 1)];
point = [ (previousPoint[0] + basePoint[0]) / 2, (previousPoint[1] + basePoint[1]) / 2 ];
group.add(draw.circle(1).fill('#000').move(point[0], point[1]));
}
(function next() {
if (currPoints < NUM_POINTS) {
for (let i = 0; i < 100; i++, currPoints++) {
nextPoint(point);
}
setTimeout(next, 50);
}
})();
<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.6.5/svg.min.js"></script>
<div id="drawing"></div>
if (elem == "edit") { app.UserBook.fullView(elem);
fullView(elem) { const d = document; const i = elem; d.querySelector('#Edname').value = this.items[i].fname;
for (let i = 0; i < this.items.length; i++) {
Есть какой нибудь более удобный способ ?
.slice(-1)[0]
, получится так:masMain.slice(-1)[0].mas1.slice(-1)[0].mas2.push(objectDoc);
masMain.at(-1).mas1.at(-1).mas2.push(objectDoc);
. const outerClass = 'item';
const innerClass = 'hidden';
const hide = el => el.style.display = 'none';
// или
const hide = el => el.style.setProperty('visibility', 'hidden');
// или
const hide = el => el.style.cssText += 'opacity: 0';
// или
const hide = el => el.setAttribute('style', 'transform: scale(0)');
// или
const hide = el => el.hidden = true;
document.querySelectorAll(`.${innerClass}`).forEach(n => {
if (n = n.closest(`.${outerClass}`)) {
hide(n);
}
});
// или
for (const n of document.getElementsByClassName(outerClass)) {
if (n.querySelector(`.${innerClass}`)) {
hide(n);
}
}
.item:has(.hidden) {
display: none;
}
в идеале, чтобы каждое нажатие на ссылку делало один поворот по часовой стрелке на 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)`;
}
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');
});
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
));
[...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), [])
Не удалось нарыть инфы по этому вопросу
есть ли ограничения у данного способа?
parseInt('666!!!') // 666
+'666!!!' // NaN
const elem = Array
.from(document.querySelectorAll('.wrap .price'))
.find(n => n.textContent === price);
if (elem) {
...
const elems = Array.prototype.filter.call(
document.querySelectorAll('.wrap .price'),
n => n.innerText.includes(price)
);
if (elems.length) {
...
const className = 'price';
.const elements = document.querySelectorAll(`.${className}`);
// или
const elements = document.getElementsByClassName(className);
const getVal = el => parseFloat(n.textContent);
// или
const getVal = el => Number(el.innerText.split(' ')[0]);
// или
const getVal = el => +el.innerHTML.match(/\d+(\.\d+)?/)[0];
const sum = Array.prototype.reduce.call(
elements,
(acc, n) => acc + getVal(n),
0
);
// или
let sum = 0;
for (const n of elements) {
sum += getVal(n);
}
// или
let sum = 0;
for (let i = 0; i < elements.length; i++) {
sum += getVal(elements[i]);
}
// или
const sum = eval(Array.from(elements, getVal).join('+')) || 0;
// или
const sum = (function get(i, n = elements.item(i)) {
return n ? getVal(n) + get(i + 1) : 0;
})(0);
$(".account_ads_more_block").toggleClass("active");
$(this).next(".account_ads_more_block").toggleClass("active");
fullField[field_name].value = element[field_name] || 'NULL';
fullField[field_name] = Object.assign(
{},
fullField[field_name],
{ value: element[field_name] || 'NULL' },
);