Berita terbaruLihat Selengkapnya>
Pertandingan populerPertandingan populer hari ini 0 pertandingan
Liga Bola Basket Nasional  16:12
CairnsCairns
8599
South East MelbourneSouth East Melbourne
Siaran langsung HD
Liga Bola Basket Nasional Wanita  16:12
Townsville Fire (W)Townsville Fire (W)
6173
Bendigo Spirit (W)Bendigo Spirit (W)
Siaran langsung HD
Liga Profesional Myanmar  17:12
ShanUnitedShanUnited
00
YangonUnitedYangonUnited
Siaran langsung HD
ALG U20  17:12
Maximilian HippeMaximilian Hippe
00
CRZaouiaU20CRZaouiaU20
Siaran langsung HD
Liga Profesional Myanmar  17:12
MaharUnitedMaharUnited
02
HantharwadyUnitedHantharwadyUnited
Siaran langsung HD
Liga Bola Basket Korea  18:12
Ulsan Mobis PhoebusUlsan Mobis Phoebus
912
Changwon LG SakersChangwon LG Sakers
Siaran langsung HD
Liga Senior Ethiopia  18:12
MengeBelashangulMengeBelashangul
00
Sherman CárdenasSherman Cárdenas
Siaran langsung HD
Liga Bola Basket Wanita Korea  18:12
Woori Bank WibeeWoori Bank Wibee
1816
BNK Sum WanitaBNK Sum Wanita
Siaran langsung HD
TPBL  19:12
New Taipei CTBC DEANew Taipei CTBC DEA
00
Raja Baru TaipeiRaja Baru Taipei
Akan segera dimulai
Asosiasi Bola Basket Wanita Tiongkok  19:12
Wanita Shanxi TianZeWanita Shanxi TianZe
00
Wanita GuangDong XintongshengWanita GuangDong Xintongsheng
Akan segera dimulai
Liga Bola Basket Nasional Tiongkok  19:12
HubeiWenlvHubeiWenlv
00
Jiangsu Yannan SukeJiangsu Yannan Suke
Akan segera dimulai
Liga Bola Basket Nasional Tiongkok  19:12
Hunan Changsha YongshengHunan Changsha Yongsheng
00
Shijiazhuang XianglanShijiazhuang Xianglan
Akan segera dimulai
Asosiasi Bola Basket Wanita Tiongkok  19:12
Wanita Niushoushan JiangsuWanita Niushoushan Jiangsu
00
Wanita Bebek BeijingWanita Bebek Beijing
Akan segera dimulai
Asosiasi Bola Basket Wanita Tiongkok  19:12
Wuhan WWuhan W
00
Zhejiang Golden Bulls WZhejiang Golden Bulls W
Akan segera dimulai
Bundesliga Bola Basket  19:12
Alba BerlinAlba Berlin
00
LowenLowen
Akan segera dimulai
Asosiasi Bola Basket Wanita Tiongkok  19:12
Hebei WHebei W
00
Wanita Shanxi ZhuyeqingWanita Shanxi Zhuyeqing
Akan segera dimulai
Asosiasi Bola Basket Wanita Tiongkok  19:12
Shanghai WShanghai W
00
Xinjiang WXinjiang W
Akan segera dimulai
Asosiasi Bola Basket Tiongkok  19:12
Shenzhen Marco PoloShenzhen Marco Polo
00
Beijing KongguBeijing Konggu
Akan segera dimulai
Asosiasi Bola Basket Tiongkok  19:12
Liaoning BengangLiaoning Bengang
00
Shanghai JiushiShanghai Jiushi
Akan segera dimulai
Liga Premier Ethiopia  20:12
DefenceForceETHDefenceForceETH
00
EthiopiaBunnaEthiopiaBunna
Akan segera dimulai
Liga B Israel  20:12
Hapoel Migdal HaEmekHapoel Migdal HaEmek
00
MoadonSportTiraMoadonSportTira
Akan segera dimulai
Divisi 1 Arab Saudi  20:12
Rodolfo ZelayaRodolfo Zelaya
00
JubailJubail
Akan segera dimulai
Divisi 1 Arab Saudi  20:12
Al-BatinAl-Batin
00
AbhaAbha
Akan segera dimulai
Liga Bola Basket Korea  20:12
KCC EgisKCC Egis
00
Wonju Dongbu PromyWonju Dongbu Promy
Akan segera dimulai
Kejuaraan Cymru Welsh  20:12
PenrhyncochPenrhyncoch
00
RuthinTownFCRuthinTownFC
Akan segera dimulai
Liga Utama Wales  20:12
BritonFerryAthleticBritonFerryAthletic
00
Lukas BartosakLukas Bartosak
Akan segera dimulai
Liga Utama Libya  20:12
AlSuqoorLBYAlSuqoorLBY
00
DarnesDarnes
Akan segera dimulai
Liga Senior Ethiopia  20:12
Andrea PadulaAndrea Padula
00
DessieKetemaDessieKetema
Akan segera dimulai
Divisi 2 Mesir  20:12
HorseOwnersClubHorseOwnersClub
00
El OlympiEl Olympi
Akan segera dimulai
Liga Utama Wales  20:12
BalaTownF.C.BalaTownF.C.
00
CaernarfonCaernarfon
Akan segera dimulai
Liga Premier Irak  21:12
Vincent MuratoriVincent Muratori
00
NaftMissanNaftMissan
Akan segera dimulai
Bundesliga Bola Basket  21:12
Rostock SeawolvesRostock Seawolves
00
Bayern MunchenBayern Munchen
Akan segera dimulai
Liga Premier Ethiopia  21:12
EthiopiaNigdBankEthiopiaNigdBank
00
EthiopianInsuranceEthiopianInsurance
Akan segera dimulai
Liga Premier Irak  21:12
ZakhoSCZakhoSC
00
Kosuke YamamotoKosuke Yamamoto
Akan segera dimulai
Liga Utama Libya  21:12
AlTaawunAlTaawun
00
AlAhlyBenghaziAlAhlyBenghazi
Akan segera dimulai
Liga Premier Kuwait  21:12
KazmaKazma
00
Al-SalmiyaAl-Salmiya
Akan segera dimulai
SAYA AKAN PIALA  21:12
MlandegeFCMlandegeFC
00
URA KampalaURA Kampala
Akan segera dimulai
CBA PG  21:12
Shenzhen Marco PoloShenzhen Marco Polo
00
Beijing KongguBeijing Konggu
Akan segera dimulai
Liga Utama Libya  21:12
Antonio CotanAntonio Cotan
00
QadisiyaBaniWalidQadisiyaBaniWalid
Akan segera dimulai
Liga Divisi Pertama Kuwait  22:12
Jesper DrostJesper Drost
00
Al-SalibikhaetAl-Salibikhaet
Akan segera dimulai
Liga Utama Bahrain  22:12
Kota IssaKota Issa
00
Al Ittihad BahrainAl Ittihad Bahrain
Akan segera dimulai
Liga Utama Wales  22:12
ConnahsQuayNomadsFCConnahsQuayNomadsFC
00
TheNewSaintsTheNewSaints
Akan segera dimulai
Liga Divisi Pertama Kuwait  22:12
Al-SahelAl-Sahel
00
BurganSCBurganSC
Akan segera dimulai
Liga Kejuaraan Irlandia Utara  23:12
LimavadyUnitedLimavadyUnited
00
Annagh BersatuAnnagh Bersatu
Akan segera dimulai
Piala Liga Mesir  23:12
Aleksandr NosovAleksandr Nosov
00
PharcoPharco
Akan segera dimulai
Liga Premier Ghana  23:12
BibianiGoldStarsBibianiGoldStars
00
Medeama SCMedeama SC
Akan segera dimulai
Liga Bola Basket Yordania  23:12
Al WehdatAl Wehdat
00
AmmanUnitedAmmanUnited
Akan segera dimulai
Piala Liga Mesir  23:12
PetrojetPetrojet
00
BankElAhlyBankElAhly
Akan segera dimulai
Liga Bola Basket Yordania  23:12
Al JalilAl Jalil
00
ShababBshraShababBshra
Akan segera dimulai
Liga Profesional Saudi  23:12
NEOMSportsClubNEOMSportsClub
00
AlIttihadClubAlIttihadClub
Akan segera dimulai
Divisi 1 Arab Saudi  23:12
Miroslav StevanovićMiroslav Stevanović
00
AlBukayriyahAlBukayriyah
Akan segera dimulai
Liga Premier Irak  23:12
AlGharrafAlGharraf
00
AlKarmaAlKarma
Akan segera dimulai
Liga Premier Irak  23:12
AlTalabaAlTalaba
00
Vüsal İsgändärliVüsal İsgändärli
Akan segera dimulai
Liga Premier Kuwait  23:12
AlNaserSCAlNaserSC
00
AlQadisiyaSCAlQadisiyaSC
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
  • 1ArsenalArsenal14/3/245
  • 2ManchesterCityManchesterCity13/1/440
  • 3AstonVillaAstonVilla12/3/439
  • 4LiverpoolLiverpool10/2/632
  • 5ChelseaChelsea8/6/530
  • 6ManchesterUnitedManchesterUnited8/6/530
  • 7SunderlandSunderland7/7/428
  • 8EvertonEverton8/4/728
  • 9BrentfordBrentford8/2/826
  • 10NewcastleUnitedNewcastleUnited7/5/726
  • 11Joe MurphyJoe Murphy7/5/626
  • 12FulhamFulham8/2/826
  • 13TottenhamHotspurTottenhamHotspur7/4/725
  • 14Dennis GroteDennis Grote6/7/625
  • 15BournemouthAFCBournemouthAFC5/8/623
  • 16LeedsUnitedLeedsUnited5/5/820
  • 17NottinghamForestNottinghamForest5/3/1118
  • 18WestHamUnitedWestHamUnited3/5/1114
  • 19BurnleyBurnley3/3/1312
  • 20WolverhamptonWanderersWolverhamptonWanderers0/3/163
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