const state = {
current: 0,
top: 0,
opts: [].fill(new Element()) // fill просто для примера, в реальности тут должны храниться DOM элементы доступных опций
}
const visibleOpts = 6; // кол-во видимых одновременно вариантов меню
const nextIndex = isUpKey => isUpKey ? state.current - 1 : state.current + 1;
const overflows = index => index < 0 || index >= state.opts.length;
const needsScroll = index => {
if ((index >= top) && (top + visibleOpts - 1 >= index)) {
return false;
}
return true;
}
// вешаем на обработчик нажатий кнопок-переключателей, не знаю, какой у вас фреймворк, надеюсь не богомерзкий fivem... и не богомерзкий ragemp.
// передаем в аргумент сдвинулся ли выбор вверх (true) или вниз (false)
function onArrowKeyPressed(isUpKey) {
const indexNext = nextIndex(isUpKey);
if (overflows(indexNext) || !needsScroll(indexNext)) {
return;
}
state.top = isUpKey ? top - 1 : top + 1;
state.current = indexNext
state.opts[state.current].scrollIntoView(isUpKey);
}
Что может мой код на данный момент?
объяснить про ID
const userMessageDict = {};
const prefix = '!';
client.on('message', msg => {
if (msg.content === `${prefix}cmd`) {
userMessageDict[msg.author.id] = null;
msg.delete({ timeout = 0 })
.then(() => msg.channel.send('I will remember your next message.'));
}
else if (msg.content === `${prefix}slovo`) {
if ((typeof userMessageDict[msg.author.id]) === 'string') {
msg.channel.send(userMessageDict[msg.author.id]);
} else {
msg.channel.send('I dont have any words remembered from you yet!');
}
} else if (userMessageDict[msg.author.id] === null) {
userMessageDict[msg.author.id] = msg.content;
}
});
function runTests() {
const testCount = 1000;
const testArrays = [];
for (let i = 0; i < testCount; i++) {
const arrayLength = Math.round(Math.random() * 100);
const array = [];
for (let i = 0; i < arrayLength; i++) {
array.push(Math.random() * 10);
}
testArrays.push(array);
}
console.time('stringifyCompare');
for (let i = 0; i < testCount - 1; i++) {
compareStringify(testArrays[i], testArrays[i + 1]);
}
console.timeEnd('stringifyCompare');
console.time('normalCompare');
for (let i = 0; i < testCount - 1; i++) {
compareTheRightWay(testArrays[i], testArrays[i + 1]);
}
console.timeEnd('normalCompare');
}
function compareStringify(first, second) {
return JSON.stringify(first) == JSON.stringify(second);
}
function compareTheRightWay(first, second) {
if (first.length != second.length) {
return false;
}
for (let i = 0; i < first.length; i++) {
if (first[i] != second[i]) {
return false;
}
}
return true;
}
runTests();