mirror of
https://github.com/myronblair/tomtomgames
synced 2026-06-30 17:51:08 -05:00
Add mouse drag, wheel, and arrow buttons to token package pill scroller
- Click-drag: grab cursor, drag left/right to scroll - Mouse wheel: vertical scroll converts to horizontal pan - Arrow buttons (< >) appear at edges when more pills are off-screen, hide when scrolled to the end Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -698,7 +698,11 @@ body::before{content:'';position:fixed;inset:0;background-image:linear-gradient(
|
|||||||
<!-- 3. Token Package -->
|
<!-- 3. Token Package -->
|
||||||
<div class="fg">
|
<div class="fg">
|
||||||
<label>3. Select Token Package <span style="color:var(--text2);font-weight:400;font-size:15px">($1 = 1 Token)</span></label>
|
<label>3. Select Token Package <span style="color:var(--text2);font-weight:400;font-size:15px">($1 = 1 Token)</span></label>
|
||||||
<div class="pkg-scroll" id="pkg-scroll"></div>
|
<div style="position:relative">
|
||||||
|
<button id="pkg-prev" onclick="pkgScroll(-1)" style="display:none;position:absolute;left:-10px;top:50%;transform:translateY(-50%);z-index:2;background:var(--bg3);border:1px solid var(--border);color:var(--text);border-radius:50%;width:28px;height:28px;font-size:14px;cursor:pointer;line-height:1;padding:0">‹</button>
|
||||||
|
<div class="pkg-scroll" id="pkg-scroll"></div>
|
||||||
|
<button id="pkg-next" onclick="pkgScroll(1)" style="display:none;position:absolute;right:-10px;top:50%;transform:translateY(-50%);z-index:2;background:var(--bg3);border:1px solid var(--border);color:var(--text);border-radius:50%;width:28px;height:28px;font-size:14px;cursor:pointer;line-height:1;padding:0">›</button>
|
||||||
|
</div>
|
||||||
<!-- Custom amount row -->
|
<!-- Custom amount row -->
|
||||||
<div class="custom-amt-row" id="custom-pkg-row">
|
<div class="custom-amt-row" id="custom-pkg-row">
|
||||||
<div class="custom-amt-wrap">
|
<div class="custom-amt-wrap">
|
||||||
@@ -1466,6 +1470,59 @@ function buildCashoutPlatforms() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ─── TOKEN PACKAGES ────────────────────────────────────────
|
// ─── TOKEN PACKAGES ────────────────────────────────────────
|
||||||
|
function pkgScroll(dir) {
|
||||||
|
const el = document.getElementById('pkg-scroll');
|
||||||
|
if (el) el.scrollBy({ left: dir * 160, behavior: 'smooth' });
|
||||||
|
}
|
||||||
|
|
||||||
|
function initPkgScrollMouse() {
|
||||||
|
const el = document.getElementById('pkg-scroll');
|
||||||
|
if (!el) return;
|
||||||
|
|
||||||
|
// Show/hide arrows based on scroll position
|
||||||
|
const prev = document.getElementById('pkg-prev');
|
||||||
|
const next = document.getElementById('pkg-next');
|
||||||
|
function updateArrows() {
|
||||||
|
if (!prev || !next) return;
|
||||||
|
const canLeft = el.scrollLeft > 4;
|
||||||
|
const canRight = el.scrollLeft < el.scrollWidth - el.clientWidth - 4;
|
||||||
|
prev.style.display = canLeft ? 'block' : 'none';
|
||||||
|
next.style.display = canRight ? 'block' : 'none';
|
||||||
|
}
|
||||||
|
el.addEventListener('scroll', updateArrows, { passive: true });
|
||||||
|
setTimeout(updateArrows, 100);
|
||||||
|
|
||||||
|
// Mouse wheel → horizontal scroll
|
||||||
|
el.addEventListener('wheel', e => {
|
||||||
|
if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) {
|
||||||
|
e.preventDefault();
|
||||||
|
el.scrollBy({ left: e.deltaY * 1.5, behavior: 'auto' });
|
||||||
|
}
|
||||||
|
}, { passive: false });
|
||||||
|
|
||||||
|
// Click-drag scroll
|
||||||
|
let down = false, startX = 0, startScroll = 0, moved = false;
|
||||||
|
el.addEventListener('mousedown', e => {
|
||||||
|
down = true; moved = false;
|
||||||
|
startX = e.pageX; startScroll = el.scrollLeft;
|
||||||
|
el.style.cursor = 'grabbing'; el.style.userSelect = 'none';
|
||||||
|
});
|
||||||
|
document.addEventListener('mousemove', e => {
|
||||||
|
if (!down) return;
|
||||||
|
const dx = e.pageX - startX;
|
||||||
|
if (Math.abs(dx) > 4) moved = true;
|
||||||
|
el.scrollLeft = startScroll - dx;
|
||||||
|
});
|
||||||
|
document.addEventListener('mouseup', () => {
|
||||||
|
if (!down) return;
|
||||||
|
down = false;
|
||||||
|
el.style.cursor = 'grab'; el.style.userSelect = '';
|
||||||
|
// If the mouse barely moved, let the click on the pill go through
|
||||||
|
if (!moved) el.style.cursor = '';
|
||||||
|
});
|
||||||
|
el.style.cursor = 'grab';
|
||||||
|
}
|
||||||
|
|
||||||
function buildPkgPills() {
|
function buildPkgPills() {
|
||||||
const container = document.getElementById('pkg-scroll');
|
const container = document.getElementById('pkg-scroll');
|
||||||
container.innerHTML = CFG.packages.map((pkg, i) => `
|
container.innerHTML = CFG.packages.map((pkg, i) => `
|
||||||
@@ -1476,6 +1533,7 @@ function buildPkgPills() {
|
|||||||
const popularIdx = CFG.packages.findIndex(p => p.popular);
|
const popularIdx = CFG.packages.findIndex(p => p.popular);
|
||||||
const idx = popularIdx >= 0 ? popularIdx : 0;
|
const idx = popularIdx >= 0 ? popularIdx : 0;
|
||||||
selectPkg(idx, container.querySelectorAll('.pkg-pill')[idx]);
|
selectPkg(idx, container.querySelectorAll('.pkg-pill')[idx]);
|
||||||
|
initPkgScrollMouse();
|
||||||
}
|
}
|
||||||
function selectPkg(i, el) {
|
function selectPkg(i, el) {
|
||||||
S.pkg = CFG.packages[i]; S.customPkg = false;
|
S.pkg = CFG.packages[i]; S.customPkg = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user