Berita terbaruLihat Selengkapnya>
Pertandingan populerPertandingan populer hari ini 0 pertandingan
Liga MX Femenil Meksiko  08:01
MonterreyWomenMonterreyWomen
40
PueblaWomenPueblaWomen
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional  08:01
Santa ClaraSanta Clara
8665
San DiegoSan Diego
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional  08:01
PasifikPasifik
6461
Universitas PepperdineUniversitas Pepperdine
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional  08:01
San FranciscoSan Francisco
5649
PortlandPortland
Siaran langsung HD
Ramah Klub Internasional  08:01
ClubJaibaBravaClubJaibaBrava
21
CruzAzulCruzAzul
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional Wanita  08:01
Wanita Murray StateWanita Murray State
3130
Wanita BradleyWanita Bradley
Siaran langsung HD
Brasil Copa Sao Paulo Juniores  08:01
AtleticoMineiroYouthAtleticoMineiroYouth
01
Amr Saadawy Salem IsmailAmr Saadawy Salem Ismail
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional  08:01
Negara Bagian WashingtonNegara Bagian Washington
5133
Oregon StateOregon State
Siaran langsung HD
Ramah Klub Internasional  08:01
AtlasAtlas
10
MonterreyMonterrey
Siaran langsung HD
Ramah Klub Internasional  09:01
José FonteJosé Fonte
21
ChapulinerosChapulineros
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional  09:01
St. Marys (CA)St. Marys (CA)
3236
SeattleSeattle
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional  09:01
IndianaIndiana
3733
WashingtonWashington
Siaran langsung HD
Asosiasi Basket Nasional  09:01
Phoenix SunsPhoenix Suns
2026
Oklahoma City ThunderOklahoma City Thunder
Siaran langsung HD
Asosiasi Atletik Perguruan Tinggi Nasional  10:01
GonzagaGonzaga
00
Loyola MarymountLoyola Marymount
Akan segera dimulai
Asosiasi Basket Nasional  10:01
Raja SacramentoRaja Sacramento
00
Milwaukee BucksMilwaukee Bucks
Akan segera dimulai
Asosiasi Basket Nasional  10:01
Los Angeles LakersLos Angeles Lakers
00
Memphis GrizzliesMemphis Grizzlies
Akan segera dimulai
Divisi Super Mumbai India  11:01
RatnamSARatnamSA
00
Uche AgboUche Agbo
Akan segera dimulai
Divisi Super Mumbai India  13:01
FCBombayGymkhanaFCBombayGymkhana
00
KSAJuniorsKSAJuniors
Akan segera dimulai
Indo D4  14:01
PSMojokertoPutraPSMojokertoPutra
00
PSIDJombangPSIDJombang
Akan segera dimulai
Indo D4  14:01
Viljar Helland VevatneViljar Helland Vevatne
00
Kevin LopezKevin Lopez
Akan segera dimulai
Indo D4  14:01
Persinga NgawiPersinga Ngawi
00
PSBIBlitarPSBIBlitar
Akan segera dimulai
Liga Bola Basket Nasional Wanita  14:01
Wanita Sydney UniWanita Sydney Uni
00
Bendigo Spirit (W)Bendigo Spirit (W)
Akan segera dimulai
IBSL  15:01
North24ParganasFCNorth24ParganasFC
00
JHRRoyalCityFCJHRRoyalCityFC
Akan segera dimulai
Indo D4  16:01
Richard KrizanRichard Krizan
00
PersebataLembataPersebataLembata
Akan segera dimulai
Indo D4  16:01
Diego Rivas RegoDiego Rivas Rego
00
Jimmy RoyeJimmy Roye
Akan segera dimulai
Indo D4  16:01
Persema MalangPersema Malang
00
Persatuan Sepakbola TulungagungPersatuan Sepakbola Tulungagung
Akan segera dimulai
Indo D4  16:01
AkorFCJombangAkorFCJombang
00
PersidafonPersidafon
Akan segera dimulai
Indo D4  16:01
PerseponPonorogoPerseponPonorogo
00
PersengaNganjukPersengaNganjuk
Akan segera dimulai
A-League Australia  16:01
MacarthurFCMacarthurFC
00
AucklandFCAucklandFC
Akan segera dimulai
Liga Bola Basket Nasional  16:01
SydneySydney
00
South East MelbourneSouth East Melbourne
Akan segera dimulai
Indonesian Liga 1  16:01
BhayangkaraPresisiIndonesiaFCBhayangkaraPresisiIndonesiaFC
00
Nick GillekensNick Gillekens
Akan segera dimulai
Indonesian Liga 2  16:01
Barito PuteraBarito Putera
00
Adam RooneyAdam Rooney
Akan segera dimulai
Ramah Klub Internasional  16:01
Hannover96Hannover96
00
BorussiaMonchengladbachBorussiaMonchengladbach
Akan segera dimulai
Liga Malaysia 3  16:01
Emilijus ZubasEmilijus Zubas
00
JohorDarulTazimIIJohorDarulTazimII
Akan segera dimulai
Liga 1 Myanmar  17:01
MyawadyMyawady
00
ChinlandFCChinlandFC
Akan segera dimulai
Liga Profesional Myanmar  17:01
Martin KobylańskiMartin Kobylański
00
Jairo Mauricio HenriquezJairo Mauricio Henriquez
Akan segera dimulai
Liga B2  17:01
Veltex ShizuokaVeltex Shizuoka
00
Kagoshima UtdKagoshima Utd
Akan segera dimulai
Liga Bola Basket Wanita Nasional  17:01
Wanita CS Olimpia BrasovWanita CS Olimpia Brasov
00
Univ Arad (w)Univ Arad (w)
Akan segera dimulai
Liga Profesional Myanmar  17:01
YarmanyaUnitedFCYarmanyaUnitedFC
00
DagonPortDagonPort
Akan segera dimulai
Liga Bola Basket Korea  18:01
Daegu KOGAS PegasusDaegu KOGAS Pegasus
00
Goyang Sono SkygunnersGoyang Sono Skygunners
Akan segera dimulai
Liga Senior Ethiopia  18:01
Sherman CárdenasSherman Cárdenas
00
Boy KemperBoy Kemper
Akan segera dimulai
Liga Bola Basket Nasional Tiongkok  19:01
HubeiWenlvHubeiWenlv
00
Anhui WenyiAnhui Wenyi
Akan segera dimulai
Iraq Premier Division  19:01
AlFahadAlFahad
00
Naft Al WasatNaft Al Wasat
Akan segera dimulai
Asosiasi Bola Basket Wanita Tiongkok  19:01
JiangxiGanxingWomensJiangxiGanxingWomens
00
Henan WHenan W
Akan segera dimulai
Iraq Premier Division  19:01
Al HudodAl Hudod
00
Marek JaneckaMarek Janecka
Akan segera dimulai
Iraq Premier Division  19:01
KadhimiyaSCKadhimiyaSC
00
AlHashdAlShadeAlHashdAlShade
Akan segera dimulai
Iraq Premier Division  19:01
Hazzaa Al-HazzaaHazzaa Al-Hazzaa
00
Khalil IbrahimKhalil Ibrahim
Akan segera dimulai
Liga Cadangan Singapura  19:01
Daniel AmorimDaniel Amorim
00
HougangUnitedU23HougangUnitedU23
Akan segera dimulai
Liga Super Bola Basket Iran  19:01
MahgolMahgol
00
EsteghlalEsteghlal
Akan segera dimulai
Asosiasi Bola Basket Wanita Tiongkok  19:01
Wanita FujianWanita Fujian
00
HefeiCultureandTourismWomensHefeiCultureandTourismWomens
Akan segera dimulai
Asosiasi Bola Basket Tiongkok  19:01
Harimau Selatan GuangdongHarimau Selatan Guangdong
00
Zhejiang Chouzhou JinzuZhejiang Chouzhou Jinzu
Akan segera dimulai
Asosiasi Bola Basket Tiongkok  19:01
Qingdao Guoxin Aquatic ProductsQingdao Guoxin Aquatic Products
00
Shenzhen Marco PoloShenzhen Marco Polo
Akan segera dimulai
Liga Premier Ethiopia  20:01
Ibrahima Mame NdiayeIbrahima Mame Ndiaye
00
DireDawaDireDawa
Akan segera dimulai
Jordan Reserve  20:01
Tyler LissetteTyler Lissette
00
AlSaltReservesAlSaltReserves
Akan segera dimulai
Liga Super Bola Basket Iran  20:01
TabiatTabiat
00
PasKordestanPasKordestan
Akan segera dimulai
Jordan Reserve  20:01
Geimer BalantaGeimer Balanta
00
Al-WehdatReservesAl-WehdatReserves
Akan segera dimulai
Indonesian Liga 1  20:01
PersatuansepakbolaIndonesiaKediriPersatuansepakbolaIndonesiaKediri
00
Georgi MilanovGeorgi Milanov
Akan segera dimulai
Asosiasi Bola Basket Tiongkok  20:01
Shanghai JiushiShanghai Jiushi
00
Zhejiang East Sunshine MedicineZhejiang East Sunshine Medicine
Akan segera dimulai
Indonesian Liga 2  20:01
KendalTornadoFCKendalTornadoFC
00
PSSSlemanPSSSleman
Akan segera dimulai
Divisi 1 Arab Saudi  20:01
JubailJubail
00
Al-Arabi (Arab Saudi)Al-Arabi (Arab Saudi)
Akan segera dimulai
Divisi 1 Arab Saudi  20:01
Mohammed QassemMohammed Qassem
00
Jefferson MonteroJefferson Montero
Akan segera dimulai
Liga Super Bola Basket Iran  20:01
Seni AbadanSeni Abadan
00
Golnoor IsfahanGolnoor Isfahan
Akan segera dimulai
Divisi 2 Mesir  20:01
LuxorLuxor
00
QusQus
Akan segera dimulai
Divisi 2 Arab Saudi  20:01
ArarFCArarFC
00
MudharMudhar
Akan segera dimulai
Liga Senior Ethiopia  20:01
Camilo PonceCamilo Ponce
00
AddisAbabaKetemaAddisAbabaKetema
Akan segera dimulai
Divisi 1 Arab Saudi  20:01
AbhaAbha
00
Rodolfo ZelayaRodolfo Zelaya
Akan segera dimulai
Divisi 2 Arab Saudi  20:01
Al AinAl Ain
00
Al TarajiAl Taraji
Akan segera dimulai
Liga Nasional Rwanda  21:01
MusanzeFCMusanzeFC
00
Al-Hilal OmdurmanAl-Hilal Omdurman
Akan segera dimulai
Ramah Klub Internasional  21:01
VfBStuttgartVfBStuttgart
00
LuzernLuzern
Akan segera dimulai
Liga Super Bola Basket Iran  21:01
RaadPadafanIsfahanRaadPadafanIsfahan
00
NaftZagrosJonoubiNaftZagrosJonoubi
Akan segera dimulai
Liga Premier Irak  21:01
NaftMissanNaftMissan
00
DialaDiala
Akan segera dimulai
Liga Premier Irak  21:01
Al-MinaaSCAl-MinaaSC
00
Serdar GürlerSerdar Gürler
Akan segera dimulai
Liga Utama Libya  21:01
Jordan McGheeJordan McGhee
00
Jack JebbJack Jebb
Akan segera dimulai
Liga Premier Irak  21:01
Newroz SCNewroz SC
00
Al-NaftSCAl-NaftSC
Akan segera dimulai
Liga Premier Ethiopia  21:01
EthiopianInsuranceEthiopianInsurance
00
Mekelle70EndertaMekelle70Enderta
Akan segera dimulai
Liga 2 Inggris U21  21:01
Barnsley U21Barnsley U21
00
Javier GarciaJavier Garcia
Akan segera dimulai
Piala Putra Mahkota Kuwait  21:01
AlFahaheelSCAlFahaheelSC
00
AlJaziraFCAlJaziraFC
Akan segera dimulai
Ramah Klub Internasional  21:01
AzamAzam
00
URA KampalaURA Kampala
Akan segera dimulai
Liga Utama Libya  21:01
QadisiyaBaniWalidQadisiyaBaniWalid
00
Asswehly SCAsswehly SC
Akan segera dimulai
CBA PG  21:01
Qingdao Guoxin Aquatic ProductsQingdao Guoxin Aquatic Products
00
Shenzhen Marco PoloShenzhen Marco Polo
Akan segera dimulai
Liga Utama Libya  21:01
AlDahraAlDahra
00
AlWatanAlWatan
Akan segera dimulai
Piala Liga Mesir  22:01
AlMasryAlMasry
00
Smouha SCSmouha SC
Akan segera dimulai
Liga Persatuan VTB  22:01
CSKA MoskowCSKA Moskow
00
Avtodor SaratovAvtodor Saratov
Akan segera dimulai
Piala Liga Mesir  22:01
ElMokawloonElArabElMokawloonElArab
00
GhazlElMahallahGhazlElMahallah
Akan segera dimulai
Ramah Klub Internasional  22:01
LuganoLugano
00
Ian HendersonIan Henderson
Akan segera dimulai
Liga Bola Basket Lebanon  22:01
Antranik BeirutAntranik Beirut
00
ChampvilleChampville
Akan segera dimulai
Jordan Reserve  23:01
SamaAlSarhanReservesSamaAlSarhanReserves
00
Al-HusseinSCReserveAl-HusseinSCReserve
Akan segera dimulai
Ramah Klub Internasional  23:01
SSVUlm1846SSVUlm1846
00
BonnerBonner
Akan segera dimulai
Piala FA Inggris  23:01
WokingWoking
00
MacclesfieldTownMacclesfieldTown
Akan segera dimulai
Liga Bola Basket Yordania  23:01
Al JubaihaAl Jubaiha
00
AlAshrafeyaAlAshrafeya
Akan segera dimulai
Juara Nasional Portugal Juniores A2  23:01
José Luis PalominoJosé Luis Palomino
00
GilVicenteU19GilVicenteU19
Akan segera dimulai
Liga Bola Basket Yordania  23:01
Al JalilAl Jalil
00
AlIngliziaAlInglizia
Akan segera dimulai
Liga Utama Bahrain  23:01
Sitra ClubSitra Club
00
Al Ittihad BahrainAl Ittihad Bahrain
Akan segera dimulai
Liga Bola Basket Qatar  23:01
Al ArabiAl Arabi
00
Qatar SCQatar SC
Akan segera dimulai
Liga Premier Irak  23:01
AlKarmaAlKarma
00
Al-NajafAl-Najaf
Akan segera dimulai
Liga Premier Irak  23:01
AlZawraaAlZawraa
00
AlGharrafAlGharraf
Akan segera dimulai
Tampilkan lebih banyak kecocokan
*
*
*
* ``` */ const tabs_event = new EventTarget(); const tabs = document.getElementById("tabs"); ((tabs) => { if (!tabs) return; const tabs_wrapper = tabs?.querySelector(".tabs_wrapper"); tabs_wrapper.addEventListener("transitionstart", () => { const controller = new AbortController(); controller.signal.addEventListener("abort", () => tabs_wrapper.style.removeProperty("transition"), { once: true }); tabs_event.addEventListener("reset", () => controller.abort(), { signal: controller.signal }); tabs_wrapper.addEventListener("transitionend", () => controller.abort(), { signal: controller.signal }); tabs_wrapper.addEventListener("transitioncancel", () => controller.abort(), { signal: controller.signal }); }); tabs_event.addEventListener("anchor", () => { for (const item of tabs?.querySelectorAll(".tabs_item")) { if (item.classList.contains("is_active")) { const group_style = window.getComputedStyle(tabs); const wrapper_style = window.getComputedStyle(tabs_wrapper); const max = parseInt(group_style.getPropertyValue("width")) - parseInt(wrapper_style.getPropertyValue("width")); const offset = -item.offsetLeft; tabs_wrapper.style.setProperty("transition", "left 300ms ease-in-out"); tabs_wrapper.style.setProperty("left", `${offset max ? offset : max) : 0}px`); } } }) tabs.addEventListener("wheel", ($event) => { const { wheelDeltaX, wheelDeltaY } = $event $event.preventDefault(); const group_style = window.getComputedStyle(tabs); const wrapper_style = window.getComputedStyle(tabs_wrapper); const max = parseInt(group_style.getPropertyValue("width")) - parseInt(wrapper_style.getPropertyValue("width")); const diff = [wheelDeltaX, wheelDeltaY].filter((v) => v !== 0); const offset = parseInt(wrapper_style.getPropertyValue("left")) + (diff.every((v) => v > 0) !== diff.every((v) => v p + c, 0) > 0 ? Math.max(wheelDeltaX, wheelDeltaY) : Math.min(wheelDeltaX, wheelDeltaY)) : diff.reduce((p, c) => Math.max(...diff.map((v) => Math.abs(v))) === Math.abs(c) ? c : p, 0)); tabs_wrapper.style.setProperty("transition", "left 300ms ease-in-out"); tabs_wrapper.style.setProperty("left", `${offset max ? offset : max) : 0}px`); }, { passive: false }); let flag = false; tabs.addEventListener("mousedown", ($event) => { const { target, clientX, clientY } = $event; const controller = new AbortController(); controller.signal.addEventListener("abort", () => setTimeout(() => flag = false, 0), { once: true }); const group_style = window.getComputedStyle(tabs); const wrapper_style = window.getComputedStyle(tabs_wrapper); tabs_event.dispatchEvent(new Event("reset")); tabs_wrapper.style.removeProperty("transition"); const max = parseInt(group_style.getPropertyValue("width")) - parseInt(wrapper_style.getPropertyValue("width")); const $x = parseInt(wrapper_style.getPropertyValue("left")); window.addEventListener("mousemove", ($event) => { const offset = $x - (clientX - $event.clientX); tabs_wrapper.style.setProperty("left", `${offset max ? offset : max) : 0}px`); if ((clientX - $event.clientX) !== 0) flag = true; }, { signal: controller.signal }) window.addEventListener("mouseup", ($event) => controller.abort(), { signal: controller.signal }); window.addEventListener("mouseleave", ($event) => controller.abort(), { signal: controller.signal }); }); tabs.addEventListener("click", ({ target }) => { if (flag) return; const tabs_item = tabs?.querySelectorAll(".tabs_item"); for (let i = 0; i { const tabs_item = tabs?.querySelectorAll(".tabs_item"); for (let i = 0; i *
*
*
*
* * ``` */ const date_event = new EventTarget(); const date = document.getElementById("date"); ((date) => { if (!date) return; const date_wrapper = date.querySelector(".date_wrapper"); date_wrapper.addEventListener("transitionstart", (event) => { const controller = new AbortController(); controller.signal.addEventListener("abort", () => date_wrapper.style.removeProperty("transition"), { once: true }); date_event.addEventListener("reset", () => controller.abort(), { signal: controller.signal }); date_wrapper.addEventListener("transitionend", () => controller.abort(), { signal: controller.signal }); date_wrapper.addEventListener("transitioncancel", () => controller.abort(), { signal: controller.signal }); }); date_event.addEventListener("anchor", () => { for (const item of date.querySelectorAll(".date_item")) { if (item.classList.contains("is_active")) { const group_style = window.getComputedStyle(date); const wrapper_style = window.getComputedStyle(date_wrapper); const max = parseInt(group_style.getPropertyValue("width")) - parseInt(wrapper_style.getPropertyValue("width")); const offset = -item.offsetLeft; date_wrapper.style.setProperty("transition", "left 300ms ease-in-out"); date_wrapper.style.setProperty("left", `${offset max ? offset : max) : 0}px`); } } }) date.addEventListener("wheel", ($event) => { const { wheelDeltaX, wheelDeltaY } = $event $event.preventDefault(); const group_style = window.getComputedStyle(date); const wrapper_style = window.getComputedStyle(date_wrapper); const max = parseInt(group_style.getPropertyValue("width")) - parseInt(wrapper_style.getPropertyValue("width")); const diff = [wheelDeltaX, wheelDeltaY].filter((v) => v !== 0); const offset = parseInt(wrapper_style.getPropertyValue("left")) + (diff.every((v) => v > 0) !== diff.every((v) => v p + c, 0) > 0 ? Math.max(wheelDeltaX, wheelDeltaY) : Math.min(wheelDeltaX, wheelDeltaY)) : diff.reduce((p, c) => Math.max(...diff.map((v) => Math.abs(v))) === Math.abs(c) ? c : p, 0)); date_wrapper.style.setProperty("transition", "left 300ms ease-in-out"); date_wrapper.style.setProperty("left", `${offset max ? offset : max) : 0}px`); }, { passive: false }); let flag = false; date.addEventListener("mousedown", ($event) => { const { target, clientX, clientY } = $event; const controller = new AbortController(); controller.signal.addEventListener("abort", () => setTimeout(() => flag = false, 0), { once: true }); const group_style = window.getComputedStyle(date); const wrapper_style = window.getComputedStyle(date_wrapper); date_event.dispatchEvent(new Event("reset")); date_wrapper.style.removeProperty("transition"); const max = parseInt(group_style.getPropertyValue("width")) - parseInt(wrapper_style.getPropertyValue("width")); const $x = parseInt(wrapper_style.getPropertyValue("left")); window.addEventListener("mousemove", ($event) => { const offset = $x - (clientX - $event.clientX); date_wrapper.style.setProperty("left", `${offset max ? offset : max) : 0}px`); if ((clientX - $event.clientX) !== 0) flag = true; }, { signal: controller.signal }) window.addEventListener("mouseup", ($event) => controller.abort(), { signal: controller.signal }); window.addEventListener("mouseleave", ($event) => controller.abort(), { signal: controller.signal }); }); date.addEventListener("click", ({ target }) => { if (flag) return; const date_item = date.querySelectorAll(".date_item"); for (let i = 0; i { const node = date_wrapper.querySelector(".is_active"); if (node.previousElementSibling) { node.classList.remove("is_active"); node.previousElementSibling.classList.add("is_active"); date_event.dispatchEvent(new Event("anchor")); date_event.dispatchEvent(new Event("update")); } }) date_next.addEventListener("click", () => { const node = date_wrapper.querySelector(".is_active"); if (node.nextElementSibling) { node.classList.remove("is_active"); node.nextElementSibling.classList.add("is_active"); date_event.dispatchEvent(new Event("anchor")); date_event.dispatchEvent(new Event("update")); } }) })(date); /* --------------------- */ /* ======= E N D ======= */ /* --------------------- */ // funcGetDataWithDaysRecord .site .navigation 0 8 1 // funcGetDataWithDay(site, nav, sportId /* 0:全部 1:足球 2:篮球 */, days /* 天数 */, compId /* 联赛ID */, allComp /* 是否获取全部联赛赛事 1:是 2:否 */) const data = [ /**/ ]; data.sort((a, b) => a.time.getTime() - b.time.getTime()); /**终止信号(缓存) */ let controller = new AbortController(); /** 突变 */ const update_scroll = () => { const date = document.getElementById("date"); const list = document.getElementById("list"); if (!date || !list) return; const items = date.querySelectorAll(".date_item"); const helper = new Map(); for (const element of list.querySelectorAll(".list_group")) { const attr_date = element.getAttribute("data-date"); helper.set(attr_date, element.offsetTop - 122 - window.scrollY); } let active = Math.max.apply(null, Array.from(helper.values()).filter((v) => v { /**@type {Map>} */ const cache = swap = new Map(); controller.signal.addEventListener("abort", () => cache.clear(), { once: true }); const list = document.getElementById("list"); for (let i = 0; i main_event.dispatchEvent(new CustomEvent("load_more", { detail: data.map((v) => (v.MatchLiveList.length + 200)) })), { signal: controller.signal }); const wrapper = list.querySelector(".list_wrapper") const groups = await Promise.all(data.map(async (group, index) => { const list = group.MatchLiveList; const pad = (index + 1) * PADDING; const start = data.slice(0, index).reduce((p, c) => p + (c.MatchLiveList.length * ELEMENT_HEIGHT), pad); const height = group.MatchLiveList.length * ELEMENT_HEIGHT; const standard_date = `${`${group.time.getMonth() + 1}`.padStart(2, "0")}-${`${group.time.getDate()}`.padStart(2, "0")}`; const $el = document.createElement("div"); $el.classList.add("list_group"); $el.setAttribute("data-date", `${group.time.getTime()}`); Object.assign($el.style, { boxSizing: "border-box", overflow: "hidden", height: `${height + PADDING}px` }) if (list.length) { wrapper.appendChild($el); cache.set($el, new Map()); } return { $el, list, standard: standard_date, index, start, height, pad, setTop: (top) => $el.style.setProperty("padding-top", `${top}px`) }; })); await new Promise((resolve) => window.requestAnimationFrame(resolve)); let scroll_timer = void 0; let sync_lock = false; const render = () => { if (sync_lock) return; if (scroll_timer !== void 0) window.cancelAnimationFrame(scroll_timer); scroll_timer = window.requestAnimationFrame(async () => { scroll_timer = void 0; while (sync_lock) { await new Promise((resolve) => window.requestAnimationFrame(resolve)); } sync_lock = true; const offsetTop = list.offsetTop + 12; const scroll_y = Math.max(0, window.scrollY - offsetTop); const length = ((window.innerHeight + (PADDING * groups.length)) - ((window.innerHeight + (PADDING * groups.length)) % ELEMENT_HEIGHT) + ELEMENT_HEIGHT) / ELEMENT_HEIGHT; for (const group of groups) { if (!group.list.length) continue; const { $el, start, height } = group; const top = Math.min(height, Math.max(0, (scroll_y - start) - ((scroll_y - start) % ELEMENT_HEIGHT))); const bottom = Math.min(height, Math.max(0, ((scroll_y + (ELEMENT_HEIGHT * length)) - start) - (((scroll_y + (ELEMENT_HEIGHT * length)) - start) % ELEMENT_HEIGHT))); group.setTop(top); for (const element of $el.querySelectorAll(".list_item")) $el.removeChild(element); if ((bottom - top) >= 0) { const $start = top / ELEMENT_HEIGHT; const $end = (bottom / ELEMENT_HEIGHT) + 1; const $range = group.list.slice($start, $end); for (let $index = 0; $index
${item.comp}${`${date.getHours()}`.padStart(2, "0")}:${`${date.getMinutes()}`.padStart(2, "0")}
${item.home}${item.home}
${item.homeScores}${item.awayScores}
${item.away}${item.away}
${item.buttonName}
`, "text/html").querySelector(".list_item"); const live = () => { $(".staute", $item_el).css({ color: "var(--color-primary)" }).attr("title", item.statusName2).text(item.statusName2).append(`${item.matchTimeIng}`); $(".info_right > .btn_info", $item_el).css({ background: "var(--color-primary)", color: "var(--color-background-white)" }); } const play = () => { $(".staute", $item_el).css({ color: "var(--color-text-regular)" }).attr("title", item.statusName).text(item.statusName); $(".info_right > .btn_info", $item_el).css({ color: "var(--color-text-secondary)" }); } const back = () => { $(".staute", $item_el).css({ color: "var(--color-text-regular)" }).attr("title", item.statusName).text(item.statusName); $(".info_right > .btn_info", $item_el).css({ color: "var(--color-text-primary)", boxShadow: "inset 0 0 0 1px var(--color-text-primary)" }); } switch (item.sportId) { case 1: /* 足球 */{ if (item.statusId >= 2 && item.statusId = 2 && item.statusId ${item.statusId}`); break; } } if (item.isTop === 1) $item_el.classList.add("is_top"); $el.appendChild($item_el); $("img.lazy", $item_el).lazyload({ effect: "fadeIn", failurelimit: 10000 }); cache.get($el).set($start + $index, $item_el) } } } sync_lock = false; }); } window.addEventListener("scroll", render, { signal: controller.signal }); render(); })(); date_event.dispatchEvent(new Event("anchor")); update_scroll(); loading = false; console.timeEnd("update"); } tabs_event.addEventListener("update", async () => { const now = new Date().setHours(12, 0, 0, 0); let $active = data.map((v) => v.time.getTime()).reduce((p, c) => (Math.max(now, p) - Math.min(now, p)) > (Math.max(now, c) - Math.min(now, c)) ? c : p , 0); let $competition = 0; let $sport = 0; let $keyword = ""; if (tabs) { const tabs_item = tabs?.querySelectorAll(".tabs_item"); for (let i = tabs_item.length - 1; i >= 0 ; i--) { if (tabs_item[i].classList.contains("is_active")) { $competition = Number(tabs_item[i].getAttribute("data-id")); $sport = Number(tabs_item[i].getAttribute("data-type")); $keyword = String(tabs_item[i].getAttribute("data-keyword")).toLowerCase(); } } } if (date) { const date_item = date.querySelectorAll(".date_item"); for (let i = date_item.length - 1; i >= 0 ; i--) { if (date_item[i].classList.contains("is_active") && data.map((v) => v.time.getTime()).includes(Number(date_item[i].getAttribute("data-date")))) { $active = Number(date_item[i].getAttribute("data-date")); } date_item[i].parentNode.removeChild(date_item[i]); } } const list_wrapper_item = document.getElementById("list").querySelector(".list_wrapper").childNodes; for (let i = list_wrapper_item.length - 1; i >= 0; i--) list_wrapper_item[i].parentNode.removeChild(list_wrapper_item[i]); if ($keyword && $keyword !== location.pathname) { const state = { path: $keyword, competition: $competition, sport: $sport }; window.history.pushState(state, "", new URL($keyword, location.origin)); window.dispatchEvent(new PopStateEvent("pushstate", state)); } for (let i = 0; i ${data[i].weekday}

${`${data[i].time.getMonth() + 1}`.padStart(2, "0")}-${`${data[i].time.getDate()}`.padStart(2, "0")}

`; $el.setAttribute("data-date", String(data[i].time.getTime())); date.querySelector(".date_wrapper").appendChild($el); } date_event.dispatchEvent(new Event("anchor")); date_event.dispatchEvent(new Event("update")); }); date_event.addEventListener("update", async () => { const $controller = new AbortController(); const now = new Date().setHours(12, 0, 0, 0); let $active = data.map((v) => v.time.getTime()).reduce((p, c) => (Math.max(now, p) - Math.min(now, p)) > (Math.max(now, c) - Math.min(now, c)) ? c : p , 0); let $competition = 0; let $sport = 0; let $keyword = ""; if (tabs) { const tabs_item = tabs?.querySelectorAll(".tabs_item"); for (let i = tabs_item.length - 1; i >= 0 ; i--) { if (tabs_item[i].classList.contains("is_active")) { $competition = Number(tabs_item[i].getAttribute("data-id")); $sport = Number(tabs_item[i].getAttribute("data-type")); $keyword = String(tabs_item[i].getAttribute("data-keyword")).toLowerCase(); } } } if (date) { const date_item = date.querySelectorAll(".date_item"); for (let i = date_item.length - 1; i >= 0 ; i--) { if (date_item[i].classList.contains("is_active") && data.map((v) => v.time.getTime()).includes(Number(date_item[i].getAttribute("data-date")))) { $active = Number(date_item[i].getAttribute("data-date")); } } } const list_wrapper_item = document.getElementById("list").querySelector(".list_wrapper"); for (let i = list_wrapper_item.childNodes.length - 1; i >= 0; i--) list_wrapper_item.childNodes[i].parentNode.removeChild(list_wrapper_item.childNodes[i]); controller.abort(); controller = $controller; while (loading) { await new Promise((resolve) => window.requestAnimationFrame(resolve)); } const item = $("#list > .list_wrapper").children(`[data-date="${$(".date_item.is_active", date).data("date")}"]`); if (item.length) { const top = item.offset().top; document.removeEventListener("scroll", update_scroll); const scrollEnd = () => { if (window.pageYOffset === top) { window.removeEventListener("scroll", scrollEnd); document.addEventListener("scroll", update_scroll); } } window.addEventListener("scroll", scrollEnd); window.scrollTo({ top, behavior: "smooth" }); } const list_data = data.filter((v) => v.time.getTime() === $active).map((v) => { const list = v.MatchLiveList.filter(({ sportId, competitionId }) => (($competition === 0 || competitionId === $competition) && ($sport === 0 || sportId === $sport))); let end = 0 // const is_current_day = v.time.toDateString() === new Date().toDateString(); if (list.length) { const max = Math.min(...list.map((v) => v.matchTs.getTime())) + (3.6e+6 * 4); while (list[end] && list[end].matchTs.getTime() { const $controller = new AbortController(); const now = new Date().setHours(12, 0, 0, 0); let $active = data.map((v) => v.time.getTime()).reduce((p, c) => (Math.max(now, p) - Math.min(now, p)) > (Math.max(now, c) - Math.min(now, c)) ? c : p , 0); let $competition = 0; let $sport = 0; let $keyword = ""; if (tabs) { const tabs_item = tabs?.querySelectorAll(".tabs_item"); for (let i = tabs_item.length - 1; i >= 0 ; i--) { if (tabs_item[i].classList.contains("is_active")) { $competition = Number(tabs_item[i].getAttribute("data-id")); $sport = Number(tabs_item[i].getAttribute("data-type")); $keyword = String(tabs_item[i].getAttribute("data-keyword")).toLowerCase(); } } } if (date) { const date_item = date.querySelectorAll(".date_item"); for (let i = date_item.length - 1; i >= 0 ; i--) { if (date_item[i].classList.contains("is_active") && data.map((v) => v.time.getTime()).includes(Number(date_item[i].getAttribute("data-date")))) { $active = Number(date_item[i].getAttribute("data-date")); } } } const list_wrapper_item = document.getElementById("list").querySelector(".list_wrapper"); for (let i = list_wrapper_item.childNodes.length - 1; i >= 0; i--) list_wrapper_item.childNodes[i].parentNode.removeChild(list_wrapper_item.childNodes[i]); controller.abort(); controller = $controller; while (loading) { await new Promise((resolve) => window.requestAnimationFrame(resolve)); } const list_data = data.filter((v) => v.time.getTime() === $active).map((v, i) => { const list = v.MatchLiveList.filter(({ sportId, competitionId }) => (($competition === 0 || competitionId === $competition) && ($sport === 0 || sportId === $sport))); return { ...v, MatchLiveList: list.slice(0, detail[i]), length: list.length } }); await update($controller, list_data); }); /**/ $.ajax({ method: "GET", url: "/getMatchListJsonp?days=7", dataType: "json", }).done(({ matchLiveList }) => { const map = new Map(); const weekdays = ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu']; for (let i = 0; i { const time = new Date(k); return { weekday: weekdays[time.getDay()], time, MatchLiveList: v } }) ); tabs_event.dispatchEvent(new Event("update")); }) /**/ });
Berita Terkini
    Papan skor sepak bolaDaftar pencetak gol sepak bola
    • Liga Utama Inggris
    • Serie A
    • Ligue 1
    • Fußball-Bundesliga
    • La Liga
    TimMenang/seri/kalahPoin
  • 1ArsenalArsenal15/3/248
  • 2ManchesterCityManchesterCity13/3/442
  • 3AstonVillaAstonVilla13/3/442
  • 4LiverpoolLiverpool10/4/634
  • 5ChelseaChelsea8/7/531
  • 6ManchesterUnitedManchesterUnited8/7/531
  • 7BrentfordBrentford9/3/830
  • 8SunderlandSunderland7/9/430
  • 9NewcastleUnitedNewcastleUnited8/5/729
  • 10Dennis GroteDennis Grote7/7/628
  • 11FulhamFulham8/4/828
  • 12EvertonEverton8/4/828
  • 13TottenhamHotspurTottenhamHotspur7/6/727
  • 14Joe MurphyJoe Murphy7/6/727
  • 15BournemouthAFCBournemouthAFC5/8/723
  • 16LeedsUnitedLeedsUnited5/7/822
  • 17NottinghamForestNottinghamForest5/3/1218
  • 18WestHamUnitedWestHamUnited3/5/1214
  • 19BurnleyBurnley3/3/1412
  • 20WolverhamptonWanderersWolverhamptonWanderers1/3/166
  • Papan skor basket
    • Asosiasi Basket Nasional
    • Asosiasi Bola Basket Tiongkok
    Konferensi TimurKonferensi Barat
    TimMenang/KalahPersentase kemenangan
  • 1NetherlandsNetherlands2/00%
  • 2SenegalSenegal2/10%
  • 3EcuadorEcuador1/10%
  • 4QatarQatar0/30%