*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
}
$('.tabs').on('click', '.tab', function() {
setActiveTab($(this).index());
});
$('.nav').magnificPopup({
type: 'inline',
delegate: 'a',
callbacks: {
open() {
setActiveTab(this.currItem.index);
},
},
});
function setActiveTab(index) {
$('.tab').removeClass('active').eq(index).addClass('active');
$('.tab_item').hide().eq(index).fadeIn();
}
const reverse = str => str.length < 2 ? str : reverse(str.slice(1)) + str[0];
const reverse = ([ c, ...str ]) => c ? reverse(str) + c : '';
isBlockNavButtons
отвечает за логику disable для тех кнопок. То есть если у нас элемент последний или первый, то мы блочим нужную нам кнопку.
dispatch({
type: `${CREATE_QUESTION}_BLOCK_BUTTON`,
payload: {
blockPreviousButton: elementIndex === 0,
blockNextButton: elementIndex === data.length - 1,
},
});
$.easing.bullshit = function(x, t, b, c, d) {
return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
};
$('.ach-number span').each(function() {
$(this).prop('counter', 0).animate({
counter: $(this).text(),
}, {
duration: 10000,
easing: 'bullshit',
step(val) {
$(this).text(Math.ceil(val));
},
});
});
$router.push
, сама текущая страница из свойства компонента станет его параметром и будет браться из параметров маршрута. Примерно так. Не знаю, похоже ли это на то, что вам надо, если нет - кидайте свой код в песочницу, тогда возможно, смогу подсказать точнее. Скажите, может ли он ставить по одной точке и показывать?
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++) {
computed: {
isFilledAll() {
return Object.values(this.user_inputs).every(n => n.isFilled);
},
},
isFilledAll() {
return Object.values(this.user_inputs).every(n => Object.values(n).every(m => m !== null));
}