infinite-scroll-distance
. Она задаёт расстояние от нижней границы прокручиваемого элемента, на котором должен сработать коллбек. Просто указываете сколько вам надо. Может кто-нибудь подсказать почему так происходит и как исправить?
class AddItems extends React.Component {
state = {
value: '',
items: [],
}
inputChange = ({ target: { value } }) => {
this.setState({ value });
}
addNewItem = () => {
if (this.state.value) {
this.setState({
items: [ ...this.state.items, {
text: this.state.value,
id: (new Date()).getTime().toString(),
} ],
value: '',
});
}
}
render() {
return (
<div className="addItems">
<div className="addSection">
<input type="text" value={this.state.value} onChange={this.inputChange} />
<input type="submit" onClick={this.addNewItem} />
</div>
<div className="listSection">
<ul>{this.state.items.map((item) => <li key={item.id}>{item.text}</li>)}</ul>
</div>
</div>
)
}
}
const getClassStyles = className =>
[...document.styleSheets].reduce((styles, { cssRules }) => {
return [...cssRules]
.filter(n => n.selectorText === `.${className}`)
.reduce((styles, { cssText }) => {
return (cssText
.match(/[\w\-]+: [^;]+/g) || [])
.map(n => n.split(': '))
.reduce((styles, [ k, v ]) => (styles[k] = v, styles), styles);
}, styles);
}, {});
const styles = getClassStyles('class-name');
data: () => ({
items: [
{ value: 69, title: 'hello, world!!', checked: false },
{ value: 187, title: 'fuck the world', checked: false },
{ value: 666, title: 'fuck everything', checked: false },
],
}),
computed: {
sum() {
return this.items.reduce((acc, n) => acc + n.value * n.checked, 0);
},
checkAll: {
get() {
return this.items.every(n => n.checked);
},
set(val) {
this.items.forEach(n => n.checked = val);
},
},
},
<div>
<label>
<input type="checkbox" v-model="checkAll">
CHECK ALL
</label>
</div>
<div v-for="n in items">
<label>
<input type="checkbox" v-model="n.checked">
{{ n.title }}
</label>
</div>
<div>SUM: {{ sum }}</div>
получилось вывести только элементы первого уровня, но не могу понять, как заставить выводиться дочерние элементы
const createTreeElement = data =>
Array.isArray(data) && data.length
? data.reduce((ul, n) => {
const li = document.createElement('li');
const div = document.createElement('div');
div.textContent = n.name;
li.append(div, createTreeElement(n.children));
ul.append(li);
return ul;
}, document.createElement('ul'))
: '';
document.body.append(createTreeElement(data));
const createTreeHTML = data =>
data instanceof Array && data.length
? `<ul>${data.map(n => `
<li>
<div>${n.name}</div>
${createTreeHTML(n.children)}
</li>`).join('')}
</ul>`
: '';
document.body.insertAdjacentHTML('beforeend', createTreeHTML(data));
коллекцияМаркеров.events.add('click', function(e) {
e.get('currentTarget').each(function(n) {
n.options.set('preset', n === this ? 'islands#greenIcon' : 'islands#blueIcon');
}, e.get('target'));
});
let activeMarker = null;
// ...
коллекцияМаркеров.events.add('click', function(e) {
if (activeMarker) {
activeMarker.options.set('preset', 'islands#blueIcon');
}
activeMarker = e.get('target');
activeMarker.options.set('preset', 'islands#greenIcon');
});
const images = [
{
src: 'https://i.imgur.com/GigS3KR.png',
translate: [ 50, 50, 500, 20 ],
rotate: [ 340, 200 ],
draw: [ 0, 0, 0.95 ],
},
{
src: 'https://i.imgur.com/y3JAe69.png',
translate: [ 5, 0, 382, 2 ],
rotate: [ 630, 40 ],
draw: [ 150, 100, 0.84 ],
},
{
src: 'https://i.imgur.com/v30JIWp.png',
translate: [ 8, 150, 198, 3 ],
rotate: [ 500, 450 ],
draw: [ 0, 0, 0.7 ],
},
].map(n => {
n.draw.unshift(new Image);
n.draw[0].src = n.src;
return n;
});
const canvases = document.querySelectorAll('.canvas');
const canvasSize = document.documentElement.clientWidth;
for (const n of canvases) {
n.setAttribute('width', canvasSize);
n.setAttribute('height', canvasSize);
}
let ts0;
window.requestAnimationFrame(function draw(ts) {
for (const n of canvases) {
ts0 = ts0 || ts;
const dt = ts - ts0;
const ctx = n.getContext('2d');
ctx.clearRect(0, 0, canvasSize, canvasSize);
for (const { translate: t, rotate: r, draw: d } of images) {
ctx.save();
ctx.translate(t[0], t[1] + Math.sin(dt / t[2]) / t[3]);
ctx.rotate(Math.sin(dt / r[0]) / r[1]);
ctx.drawImage(d[0], d[1], d[2], canvasSize * d[3], canvasSize * d[3]);
ctx.restore();
}
}
window.requestAnimationFrame(draw);
});
Это либо недоработка создателя компонента либо...
<pagination
:key="records"
...
тег должен меняться,а не добавляться, как по дефолту сейчас
len
будет целым числом. А почему применяется именно >>>
, а не |
или >>
- число должно быть не только целым, но и положительным (или, если быть более точным, неотрицательным - 0
тоже окей). const radioSelector = '.radio_wrap input[type="radio"]';
const getLabel = el => document.querySelector(`[for="${el.id}"]`).textContent;
// или
const getLabel = el => el.nextElementSibling.innerText;
// или
const getLabel = el => el.labels[0].innerHTML;
// назначаем обработчик события каждой радиокнопке индивидуально
document.querySelectorAll(radioSelector).forEach(function(n) {
n.addEventListener('change', this);
}, e => console.log(getLabel(e.target)));
// или, можно сделать делегированный обработчик, где будет проверка, откуда пришло событие
document.addEventListener('change', ({ target: t }) => {
if (t.matches(radioSelector)) {
console.log(getLabel(t));
}
});
computed: {
foundItems() {
return []
.concat(...this.items.map(n => n.props || []))
.filter(n => n.name.includes(this.search));
},
},
<li v-for="item in foundItems">
{{ item.name }}
</li>
'.catalog__scrollbarLine'
$(this).find('.catalog__scrollbarLine')
$(this).find('.catalog__scrollbarLine')[0]