<button data-move="-10,0">left</button>
<button data-move="10,0">right</button>
<button data-move="0,-10">up</button>
<button data-move="0,10">down</button>
<button data-move="10,10">right down</button>
<button data-move="20,-5">fast right slow up</button>
$(document).on('click', '[data-move]', function() {
const [ dx, dy ] = this.dataset.move.split(',').map(Number);
$('#overlay')
.css('left', (i, val) => `${parseInt(val) + dx}px`)
.css('top', (i, val) => `${parseInt(val) + dy}px`);
});
// или, к чёрту jquery
document.addEventListener('click', e => {
const { move } = e.target.dataset;
if (move) {
const block = document.querySelector('#overlay');
const { left, top } = getComputedStyle(block);
const [ dx, dy ] = move.split(',').map(n => +n);
block.style.left = parseInt(left) + dx + 'px';
block.style.top = parseInt(top) + dy + 'px';
}
});
v-for="post in posts.slice(0, определённое количество)"
const $block = $('.block_to_add').clone();
$('.click_to_add_block').click(function() {
$(this).before($block.clone());
});
А подскажите, как удалить один из блоков по клику на другую кнопку?
$(document).on('click', '.delete', function() {
$(this).parent().remove();
});
<button class="delete">удалить</button>
v-show="showDocs"
. Обработка клика станет выглядеть так: @click="showDocs = !showDocs"
.style.display
вовсе не none, а пустая строка (скорее всего - вы ведь элемент через css изначально скрываете, да?).Так не получиться, так как вывожу элементы в цикле v-for.
$grouped = [];
foreach ($date as $d) {
$parts = explode('-', $d);
$grouped[$parts[0]][intval($parts[1])][] = intval($parts[2]);
}
data: () => ({
checked: null,
items: [ 'hello, world!!', 'fuck the world', 'fuck everything' ],
}),
<label v-for="(n, i) in items">
<input
type="checkbox"
:checked="checked === i"
@change="checked = $event.target.checked ? i : null"
>
{{ n }}
</label>
*ngIf="year === activeYear"
. Типа так:activeYear = null;
log(year) {
this.activeYear = this.activeYear === year ? null : year;
}
<div class="middle-content" *ngFor="let year of years">
<a class="middle-content_top-indent" (click)="log(year)">{{ year }}</a>
<ul class="list-of-month" *ngIf="year === activeYear">
<li *ngFor="let month of months">
<span class="list-of-month__marker"></span>
<a href="#">{{ month }}</a>
</li>
</ul>
</div>
const itemSelector = '.menu-catalog__item';
const buttonSelector = '.menu-catalog__link';
const className = 'menu-catalog__open';
const $items = $(itemSelector).on('click', buttonSelector, e => {
$items.not(e.delegateTarget).removeClass(className);
$(e.delegateTarget).toggleClass(className);
});
// или
const items = document.querySelectorAll(itemSelector);
const onClick = ({ target: t }) =>
t.closest(buttonSelector) && items.forEach(n => {
n.classList[n.contains(t) ? 'toggle' : 'remove'](className);
});
items.forEach(n => n.addEventListener('click', onClick));
function shortNumber(val) {
const numSymbol = [ '', 'K', 'M', 'B', 'T' ];
let symbolIndex = 0;
while (val >= 1000) {
val = Math.round(val / 1000);
symbolIndex++;
}
return val + numSymbol[symbolIndex];
}
shortNumber(96); // 96
shortNumber(22222); // 22K
shortNumber(4951476); // 5M
можно статью засовывать в разные категории <...> один ко многим
как проделать тоже самое со списком $this->getProxyList('socks4') и $this->getProxyList('socks5')
$proxy_types = [ $proxy_type, 'socks4', 'socks5' ];
foreach ($proxy_types as $type) {
$proxy_list = $this->getProxyList($type);
// а здесь ваш исходный foreach
}