Tracking de l'application VApp (IHM du jeu)
This commit is contained in:
69
VApp/node_modules/vuetify/lib/components/VSelect/useScrolling.mjs
generated
vendored
Normal file
69
VApp/node_modules/vuetify/lib/components/VSelect/useScrolling.mjs
generated
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
// Utilities
|
||||
import { shallowRef, watch } from 'vue';
|
||||
|
||||
// Types
|
||||
|
||||
export function useScrolling(listRef, textFieldRef) {
|
||||
const isScrolling = shallowRef(false);
|
||||
let scrollTimeout;
|
||||
function onListScroll(e) {
|
||||
cancelAnimationFrame(scrollTimeout);
|
||||
isScrolling.value = true;
|
||||
scrollTimeout = requestAnimationFrame(() => {
|
||||
scrollTimeout = requestAnimationFrame(() => {
|
||||
isScrolling.value = false;
|
||||
});
|
||||
});
|
||||
}
|
||||
async function finishScrolling() {
|
||||
await new Promise(resolve => requestAnimationFrame(resolve));
|
||||
await new Promise(resolve => requestAnimationFrame(resolve));
|
||||
await new Promise(resolve => requestAnimationFrame(resolve));
|
||||
await new Promise(resolve => {
|
||||
if (isScrolling.value) {
|
||||
const stop = watch(isScrolling, () => {
|
||||
stop();
|
||||
resolve();
|
||||
});
|
||||
} else resolve();
|
||||
});
|
||||
}
|
||||
async function onListKeydown(e) {
|
||||
if (e.key === 'Tab') {
|
||||
textFieldRef.value?.focus();
|
||||
}
|
||||
if (!['PageDown', 'PageUp', 'Home', 'End'].includes(e.key)) return;
|
||||
const el = listRef.value?.$el;
|
||||
if (!el) return;
|
||||
if (e.key === 'Home' || e.key === 'End') {
|
||||
el.scrollTo({
|
||||
top: e.key === 'Home' ? 0 : el.scrollHeight,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
}
|
||||
await finishScrolling();
|
||||
const children = el.querySelectorAll(':scope > :not(.v-virtual-scroll__spacer)');
|
||||
if (e.key === 'PageDown' || e.key === 'Home') {
|
||||
const top = el.getBoundingClientRect().top;
|
||||
for (const child of children) {
|
||||
if (child.getBoundingClientRect().top >= top) {
|
||||
child.focus();
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const bottom = el.getBoundingClientRect().bottom;
|
||||
for (const child of [...children].reverse()) {
|
||||
if (child.getBoundingClientRect().bottom <= bottom) {
|
||||
child.focus();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
onListScroll,
|
||||
onListKeydown
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=useScrolling.mjs.map
|
||||
Reference in New Issue
Block a user