首次使用请联系 Eelyn 获取账号

// ── SWIPE TO ACTION ── function initSwipe(){ document.querySelectorAll('.ci-wrap').forEach(wrap=>{ const ci = wrap.querySelector('.ci'); const actions = wrap.querySelector('.ci-actions'); if(!ci||!actions) return; let startX=0, startY=0, isDragging=false, actionW=0; ci.addEventListener('touchstart', e=>{ startX = e.touches[0].clientX; startY = e.touches[0].clientY; isDragging = false; actionW = actions.offsetWidth; },{passive:true}); ci.addEventListener('touchmove', e=>{ const dx = e.touches[0].clientX - startX; const dy = e.touches[0].clientY - startY; if(!isDragging && Math.abs(dy) > Math.abs(dx)) return; isDragging = true; if(dx < 0){ const move = Math.max(dx, -actionW); ci.style.transform = `translateX(${move}px)`; ci.style.transition = 'none'; } else if(dx > 0){ ci.style.transform = `translateX(0)`; } },{passive:true}); ci.addEventListener('touchend', e=>{ const dx = e.changedTouches[0].clientX - startX; ci.style.transition = 'transform .25s ease'; if(dx < -actionW*0.4){ ci.style.transform = `translateX(-${actionW}px)`; } else { ci.style.transform = 'translateX(0)'; } }); }); } // Re-init swipe after list render const _origRenderList = renderList; renderList = function(){ _origRenderList(); setTimeout(initSwipe, 50); };