快乐8 数据看板
近10期
近20期
近50期
全部
var D = window.KL8_DATA || {periods:[]}; var P = D.periods.slice(); var DESC = P.slice().reverse(); var QN = ['左上','右上','左下','右下']; var QCLS = ['q0','q1','q2','q3']; var S = { page: localStorage.getItem('kl8.page') || 'home', win: parseInt(localStorage.getItem('kl8.win') || '10', 10), hn: [null,null,null], q: [null,null,null,null], cols: 8, read: 'row', zone: 8 }; function qOf(n){ var r=Math.floor((n-1)/10)+1, c=(n-1)%10+1; return r<=4 ? (c<=5?0:1) : (c<=5?2:3); } function pct(n,d){ return d ? (100*n/d).toFixed(1)+'%' : '—'; } function esc(s){ return String(s).replace(/&/g,'&').replace(/ 0 ? DESC.slice(0, S.win) : DESC.slice(); } function renderWin(){ var c = document.querySelectorAll('#win .chip'); for (var i=0;i'+label+''+ ''+ ''+txt+''; } function renderFilter(){ var h = '
'+ '冷热温'+ stepper('热', S.hn[0], 'hn', 0)+stepper('温', S.hn[1], 'hn', 1)+stepper('冷', S.hn[2], 'hn', 2)+ (filtActive() ? '清除' : '')+'
'; h += '
4象限'+ stepper(QN[0], S.q[0], 'qq', 0)+stepper(QN[1], S.q[1], 'qq', 1)+ stepper(QN[2], S.q[2], 'qq', 2)+stepper(QN[3], S.q[3], 'qq', 3)+'
'; var hits = P.filter(match).length; h += '
全库 '+P.length+' 期中 '+hits+' 期符合('+pct(hits,P.length)+')'+ (filtActive() ? ' · 已忽略期数窗口,显示全部命中' : '')+'
'; var el = document.getElementById('flt'); el.innerHTML = h; } document.getElementById('flt').addEventListener('click', function(e){ if (e.target.id === 'clr'){ S.hn=[null,null,null]; S.q=[null,null,null,null]; renderFilter(); renderList(); return; } var b = e.target.closest('button'); if(!b) return; var st = b.parentNode, cls = st.dataset.cls, i = parseInt(st.dataset.i,10); var d = parseInt(b.dataset.d,10); var arr = cls==='hn' ? S.hn : S.q; var cur = arr[i]; var nv; if (cur === null) nv = (d > 0 ? 0 : null); else if (cur === 0 && d < 0) nv = null; else nv = cur + d; if (nv !== null){ if (nv < 0) nv = 0; if (nv > 20) nv = 20; } arr[i] = nv; renderFilter(); renderList(); }); /* ---------- 首页卡片 ---------- */ function card(x){ var balls = x.n.map(function(n){ var t = n<10 ? '0'+n : ''+n; return ''+t+''; }).join(''); var badges = (x.q||[]).map(function(v,i){ return ''+QN[i]+' '+v+''; }).join(''); var hn = x.hn||[], hc = x.hc||[]; var r1 = (x.r&&x.r[0]) ? x.r[0] : null; var rest = (x.r&&x.r.length>1) ? x.r.slice(1) : []; var h = '
'+ '
'+x.p+' 期'+ 'n-1 冷热温 '+(hc.join('/')||'—')+'
'+ '
'+balls+'
'+ (badges ? '
'+badges+'
' : '')+ '
热 '+hn[0]+'温 '+hn[1]+''+ '冷 '+hn[2]+''+ '
'; if (r1) h += '
最优方案 热 '+r1[0]+' 温 '+r1[1]+' 冷 '+r1[2]+''+ ''+(r1[3]===null||r1[3]===undefined ? '—' : (r1[3]*100).toFixed(1)+'%')+'
'; if (rest.length){ h += '
展开排名 2-'+ (rest.length+1) +' ▾
'+ '
'+ rest.map(function(r,i){ return '
排名 '+(i+2)+' 热 '+r[0]+' 温 '+r[1]+' 冷 '+r[2]+''+ ''+(r[3]*100).toFixed(1)+'%
'; }).join('')+'
'; } return h+'
'; } function renderList(){ var arr = filtActive() ? P.filter(match).reverse() : winList(); var el = document.getElementById('list'); el.innerHTML = arr.length ? arr.map(card).join('') : '
没有符合条件的期
'; } document.getElementById('list').addEventListener('click', function(e){ var f = e.target.closest('[data-filt]'); if (f){ var x = P.find(function(v){return v.p === parseInt(f.dataset.filt,10);}); if (x){ S.hn = (x.hn||[]).slice(); renderFilter(); renderList(); window.scrollTo(0,0); } return; } var t = e.target.closest('[data-tog]'); if (t){ document.getElementById('rk'+t.dataset.tog).classList.toggle('on'); } }); /* ---------- 表1 排除数 ---------- */ function renderT1(){ var arr = winList(); var h = '

历史排除数(表1)

'+ ''+ ''+ ''; arr.forEach(function(x){ h += ''; if (x.e){ x.e.forEach(function(v){ h += ''; }); } else h += ''; h += ''; }); document.getElementById('t1').innerHTML = h+'
近3近4n-1n-2n-3n-4n-5n-6n-7n-8n-9n-10
'+x.p+''+(v===null||v===undefined?'—':v)+'
'; } /* ---------- 历史网格 ---------- */ function renderGrids(){ var cols = S.cols, rows = 80/cols, arr = winList(); var byRow = S.read === 'row'; var nG = byRow ? rows : cols; var h = ''; arr.forEach(function(x){ var set = {}; x.n.forEach(function(n){ set[n]=1; }); var counts = []; for (var g=0; g'+(set[nn]?nn:'')+''; } if (byRow) tbl += ''+counts[r]+''; tbl += ''; } if (!byRow){ tbl += ''; for (var c3=0;c3'; tbl += ''; } tbl += ''; var sum = counts.reduce(function(a,b){return a+b;},0); h += '
'+x.p+' 期
'+ '
'+x.n.map(function(n){return n<10?'0'+n:''+n;}).join(' ')+ ' · '+(byRow?'按行':'按列')+'分 '+nG+' 组,合计 '+sum+'
'+tbl+'
'; }); document.getElementById('grids').innerHTML = h || '
暂无数据
'; } function bindSeg(id, key, cast, after){ document.getElementById(id).addEventListener('click', function(e){ var b = e.target.closest('button'); if(!b) return; S[key] = cast ? cast(b.dataset.v) : b.dataset.v; var sib = this.querySelectorAll('button'); for (var i=0;i'+ '
'; for (var i=1;i<=n;i++) h += ''; for (var z=0;z<=6;z++) h += ''; h += ''; arr.forEach(function(x){ var g = x[key]; h += ''; if (g){ g.forEach(function(v){ h += ''; }); for (var z=0;z<=6;z++){ var c = g.filter(function(v){return v===z;}).length; h += ''; } } else h += ''; h += ''; }); document.getElementById('zones').innerHTML = h+'
'+i+''+z+'次
'+x.p+''+(v===null?'—':v)+''+c+'
'; } /* ---------- 页面切换 ---------- */ function render(){ renderFilter(); if (S.page==='home') renderList(); else if (S.page==='t1') renderT1(); else if (S.page==='grid') renderGrids(); else renderZones(); } document.getElementById('nav').addEventListener('click', function(e){ var d = e.target.closest('div[data-p]'); if(!d) return; S.page = d.dataset.p; localStorage.setItem('kl8.page', S.page); var all = this.querySelectorAll('div[data-p]'); for (var i=0;i