Berita terbaruLihat Selengkapnya>
Pertandingan populerPertandingan populer hari ini 0 pertandingan
Divisi 2 Mesir  20:12
FCMasarFCMasar
40
DayrotDayrot
Siaran langsung HD
Pertandingan Wanita AFF  20:12
VietnamWomenVietnamWomen
00
PhilippinesWomenPhilippinesWomen
Siaran langsung HD
Liga Divisi 1 Yordania  20:12
MaanMaan
31
KuferSoomKuferSoom
Siaran langsung HD
Liga Divisi 1 Yordania  20:12
Sama SCSama SC
22
DograFCDograFC
Siaran langsung HD
Piala Yunani  20:12
AOMikrasiatikosAOMikrasiatikos
02
AOChaidariFCAOChaidariFC
Siaran langsung HD
Liga Pemuda Israel  20:12
Maccabi Yavne Shimon U19Maccabi Yavne Shimon U19
01
Maximiliano UrrutiMaximiliano Urruti
Siaran langsung HD
Liga Premier Malawi  20:12
Dylan BronnDylan Bronn
42
EkhayaFCEkhayaFC
Siaran langsung HD
Divisi 2 Mesir  20:12
AbouQirFertilizersSCAbouQirFertilizersSC
00
TersanaSCTersanaSC
Siaran langsung HD
EuroBasket U20  20:12
FukienFukien
4870
Teman-Teman Able HonTeman-Teman Able Hon
Siaran langsung HD
HK U22L  20:12
EasternDistrictU22EasternDistrictU22
10
EasternFootballTeamU22EasternFootballTeamU22
Siaran langsung HD
Gamma Ethniki Yunani  21:12
LamiaLamia
30
Yvan NeyouYvan Neyou
Siaran langsung HD
Liga Premier Kenya  21:12
Ivan SchranzIvan Schranz
10
KakamegaHomeboyzKakamegaHomeboyz
Siaran langsung HD
Gamma Ethniki Yunani  21:12
Özer HurmacıÖzer Hurmacı
00
AsterasStavrosAsterasStavros
Siaran langsung HD
Gamma Ethniki Yunani  21:12
PoElassonasPoElassonas
01
TrikalaTrikala
Siaran langsung HD
Liga Utama Zanzibar  21:12
Zimamoto SCZimamoto SC
11
Christian BentekeChristian Benteke
Siaran langsung HD
Gamma Ethniki Yunani  21:12
AELefkimmisAELefkimmis
10
AENeasSeleukeiasAENeasSeleukeias
Siaran langsung HD
Gamma Ethniki Yunani  21:12
ThesprotosThesprotos
00
AnagennisiSchimatariouAnagennisiSchimatariou
Siaran langsung HD
GRE CW  21:12
AEKAthensWomenAEKAthensWomen
00
PanathinaikosWomenPanathinaikosWomen
Siaran langsung HD
Liga Utama Libya  21:12
AlTaawunAlTaawun
00
AlSuqoorLBYAlSuqoorLBY
Siaran langsung HD
Liga Nasional Rwanda  21:12
EtincellesEtincelles
11
ElMerreikhSCOmdurmanElMerreikhSCOmdurman
Siaran langsung HD
Liga Premier Kuwait  21:12
AlKuwaitSCAlKuwaitSC
01
Al-SalmiyaAl-Salmiya
Siaran langsung HD
Liga Super Zambia  21:12
ZESCOUnitedNdolaZESCOUnitedNdola
00
NchangaRangersNchangaRangers
Siaran langsung HD
Liga Premier Uganda  21:12
MaLuMaLu
30
ExpressFCExpressFC
Siaran langsung HD
Liga Premier Uganda  21:12
Kota MbararaKota Mbarara
00
URA KampalaURA Kampala
Siaran langsung HD
Liga Premier Uganda  21:12
Damian BarišDamian Bariš
01
VipersVipers
Siaran langsung HD
Liga Pemuda Israel  21:12
Fernando GuerreroFernando Guerrero
20
HapoelPetahTikvaNahumStelmahU19HapoelPetahTikvaNahumStelmahU19
Siaran langsung HD
Liga Portugal U23  21:12
SantaClaraU23SantaClaraU23
10
BenficaU23BenficaU23
Siaran langsung HD
Liga Super Malaysia  21:12
KualaLumpurCityFCKualaLumpurCityFC
03
JohorDarulTazimFCJohorDarulTazimFC
Siaran langsung HD
Liga Super Yunani 2  21:12
AOEgaleoAOEgaleo
01
Maxime GironMaxime Giron
Siaran langsung HD
GRE CW  21:12
ArisSalonikawArisSalonikaw
04
Afiq FazailAfiq Fazail
Siaran langsung HD
GRE CW  21:12
Trikala 2011 (w)Trikala 2011 (w)
14
AgiaParaskeviwAgiaParaskeviw
Siaran langsung HD
Kejuaraan Serbia U19  21:12
Vojvodina U19Vojvodina U19
4735
Sloga U19Sloga U19
Siaran langsung HD
Piala Amatir Yunani  21:12
Aaron RamsdaleAaron Ramsdale
01
AORomanosAORomanos
Siaran langsung HD
Liga Pemuda Prancis U19  21:12
Lille U19Lille U19
20
Caen U19Caen U19
Siaran langsung HD
Divisi Pertama Andorra  21:12
Inter Club d'EscaldesInter Club d'Escaldes
20
PenyaPenya
Siaran langsung HD
Piala Santosh India  21:12
TripuraTripura
01
MizoramMizoram
Siaran langsung HD
Liga Wanita Nigeria  22:12
DannazFCWomenDannazFCWomen
02
FCRoboWomenFCRoboWomen
Siaran langsung HD
Liga U19 Yunani  22:12
NestosChrisoupolisU19NestosChrisoupolisU19
00
Aitor CantalapiedraAitor Cantalapiedra
Siaran langsung HD
Taça de Portugal  22:12
VilaMeaVilaMea
00
UniaoLeiriaUniaoLeiria
Siaran langsung HD
Piala Yunani  22:12
AOKavalaAOKavala
01
PanathinaikosPanathinaikos
Siaran langsung HD
Liga Utama Bola Basket Wanita Rusia  22:12
Wanita UMMC EkaterinburgWanita UMMC Ekaterinburg
2214
Tim Basket Wanita Neftyanik AvangardTim Basket Wanita Neftyanik Avangard
Siaran langsung HD
Liga Super Bola Basket 1  22:12
Ufimets UfaUfimets Ufa
1514
Dynamo VladivostokDynamo Vladivostok
Siaran langsung HD
Liga Ketiga Turki  22:12
EskisehirsporEskisehirspor
00
BalikesirsporBalikesirspor
Siaran langsung HD
Liga Spanyol U19  22:12
SanFelixCFU19SanFelixCFU19
00
SportingCeutaU19SportingCeutaU19
Akan segera dimulai
Liga Persatuan VTB  22:12
Uralmash EkaterinburgUralmash Ekaterinburg
00
CSKA MoskowCSKA Moskow
Akan segera dimulai
Liga Persatuan VTB  23:12
BC SamaraBC Samara
00
Enisey KrasnoyarskEnisey Krasnoyarsk
Akan segera dimulai
Liga Wanita Nigeria  23:12
NasarawaAmazonsWomenNasarawaAmazonsWomen
00
AbiaAngelsFCWomenAbiaAngelsFCWomen
Akan segera dimulai
Juara Nasional Portugal Juniores A2  23:12
Victor BaltaVictor Balta
00
BragaU19BragaU19
Akan segera dimulai
Juara Nasional Portugal Juniores A2  23:12
Tondela U19Tondela U19
00
Volodymyr PolioviyVolodymyr Polioviy
Akan segera dimulai
Juara Nasional Portugal Juniores A2  23:12
BenficaU19BenficaU19
00
CDMafraU19CDMafraU19
Akan segera dimulai
Kejuaraan Musim Semi 1  23:12
Verona U20Verona U20
00
InterMilanU20InterMilanU20
Akan segera dimulai
Kejuaraan Musim Semi 1  23:12
Cremonese U19Cremonese U19
00
Andrea RispoliAndrea Rispoli
Akan segera dimulai
Piala Turki  23:12
CaykurRizesporCaykurRizespor
00
GazisehirGaziantepGazisehirGaziantep
Akan segera dimulai
Ramah Internasional  23:12
AngolaAngola
00
MozambiqueMozambique
Akan segera dimulai
Liga Bola Basket Wanita Swedia  23:12
Uppsala Basket WanitaUppsala Basket Wanita
00
SodertaljeWomenSodertaljeWomen
Akan segera dimulai
EuroBasket U18 B  23:12
PeiramatikoMachitesPeiramatikoMachites
00
AE Doxa LefkadasAE Doxa Lefkadas
Akan segera dimulai
EuroBasket U18 B  23:12
G.S.NikiVolouG.S.NikiVolou
00
DafniDafni
Akan segera dimulai
EuroBasket U18 B  23:12
KoroivosKoroivos
00
AE Psyhiko AthenaAE Psyhiko Athena
Akan segera dimulai
Liga Wanita Yordania  23:12
AmmanWomenAmmanWomen
00
AlIstiqlalWomenAlIstiqlalWomen
Akan segera dimulai
Liga Super  23:12
Gurjaani DeltaGurjaani Delta
00
IverionIverion
Akan segera dimulai
Liga Bola Basket Super Wanita Latvia  23:12
Daugavpils WDaugavpils W
00
TTT Riga WTTT Riga W
Akan segera dimulai
Kejuaraan Bola Basket Eropa  23:12
Socar OlahragaSocar Olahraga
00
Casademont ZaragozaCasademont Zaragoza
Akan segera dimulai
Liga Bola Basket Wanita Adriatik  23:12
ZKK Partizan Galenika WanitaZKK Partizan Galenika Wanita
00
Orlovi WOrlovi W
Akan segera dimulai
Liga Wanita Nigeria  23:12
Naija Ratels (w)Naija Ratels (w)
00
HeartlandQueensWomenHeartlandQueensWomen
Akan segera dimulai
Liga Wanita Nigeria  23:12
Towa YamaneTowa Yamane
00
Fernando FernandezFernando Fernandez
Akan segera dimulai
Ramah Internasional  23:12
UgandaUganda
00
GabonGabon
Akan segera dimulai
Liga Wanita Nigeria  23:12
BayelsaQueensFCWomenBayelsaQueensFCWomen
00
Takumu KawamuraTakumu Kawamura
Akan segera dimulai
Wanita Liga NBL1 Australia  23:12
ZKKMedvescakWZKKMedvescakW
00
BrodNaSaviWomenBrodNaSaviWomen
Akan segera dimulai
Kejuaraan  23:12
Tsmoki MinskTsmoki Minsk
00
RubonRubon
Akan segera dimulai
Kejuaraan Asia Barat  23:12
Shah Darui GorganShah Darui Gorgan
00
Al Riyadi BeirutAl Riyadi Beirut
Akan segera dimulai
Liga Pemuda Israel  23:12
HapoelMarmorekU19HapoelMarmorekU19
00
Daniel CarvajalDaniel Carvajal
Akan segera dimulai
BFL 2  23:12
SahelFCSahelFC
00
LeopardStCamilleLeopardStCamille
Akan segera dimulai
Liga Super Serbia  23:12
Egor KhatkevichEgor Khatkevich
00
FKukarikiFKukariki
Akan segera dimulai
Liga Premier Kuwait  23:12
AlQadisiyaSCAlQadisiyaSC
00
Al-ArabiClubKUWAl-ArabiClubKUW
Akan segera dimulai
Piala PBA Filipina  23:12
Rain Or Shine Elasto PaintersRain Or Shine Elasto Painters
00
Barangay Ginebra San MiguelBarangay Ginebra San Miguel
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")); }) /**/ });
Papan skor sepak bolaDaftar pencetak gol sepak bola
  • Liga Utama Inggris2Liga Utama Inggris
  • Serie A2Serie A
  • Ligue 12Ligue 1
  • Fußball-Bundesliga2Fußball-Bundesliga
  • La Liga2La Liga
TimMenang/seri/kalahPoin
  • 1ArsenalArsenal11/3/236
  • 2ManchesterCityManchesterCity11/1/434
  • 3AstonVillaAstonVilla10/3/333
  • 4ChelseaChelsea8/4/428
  • 5Joe MurphyJoe Murphy7/5/426
  • 6ManchesterUnitedManchesterUnited7/5/426
  • 7LiverpoolLiverpool8/2/626
  • 8SunderlandSunderland7/5/426
  • 9EvertonEverton7/3/624
  • 10Dennis GroteDennis Grote6/5/523
  • 11TottenhamHotspurTottenhamHotspur6/4/622
  • 12NewcastleUnitedNewcastleUnited6/4/622
  • 13BournemouthAFCBournemouthAFC5/6/521
  • 14FulhamFulham6/2/820
  • 15BrentfordBrentford6/2/820
  • 16NottinghamForestNottinghamForest5/3/818
  • 17LeedsUnitedLeedsUnited4/4/816
  • 18WestHamUnitedWestHamUnited3/4/913
  • 19BurnleyBurnley3/1/1210
  • 20WolverhamptonWanderersWolverhamptonWanderers0/2/142
Papan skor basket
  • Asosiasi Basket Nasional2Asosiasi Basket Nasional
  • Asosiasi Bola Basket Tiongkok2Asosiasi Bola Basket Tiongkok
Konferensi TimurKonferensi Barat
TimMenang/KalahPersentase kemenangan
  • 1NetherlandsNetherlands2/00%
  • 2SenegalSenegal2/10%
  • 3EcuadorEcuador1/10%
  • 4QatarQatar0/30%
Berita Terkini