Pertandingan populerPertandingan populer hari ini 0 pertandingan
prevnext
Kejuaraan Vietnam U19Kejuaraan Vietnam U19  16:12
Tomoya WakaharaTomoya Wakahara
06
SongLamNgheAnU19SongLamNgheAnU19
Siaran langsung HD
Liga Bola Basket NasionalLiga Bola Basket Nasional  16:12
Peluru BrisbanePeluru Brisbane
7457
New Zealand BreakersNew Zealand Breakers
Siaran langsung HD
Indonesian Liga 1Indonesian Liga 1  16:12
PSBS BiakPSBS Biak
01
Bali BersatuBali Bersatu
Siaran langsung HD
Liga Malaysia 3Liga Malaysia 3  16:12
PerakFCPerakFC
00
Emilijus ZubasEmilijus Zubas
Siaran langsung HD
Liga Super Bola Basket 1Liga Super Bola Basket 1  17:12
Dynamo VladivostokDynamo Vladivostok
3428
Altay Keranjang BarnaulAltay Keranjang Barnaul
Siaran langsung HD
Piala Santosh IndiaPiala Santosh India  17:12
ServicesServices
20
KarnatakaStateFAKarnatakaStateFA
Siaran langsung HD
Kejuaraan Vietnam U19Kejuaraan Vietnam U19  18:12
T T Hanoi U19T T Hanoi U19
00
NinhBinhU19NinhBinhU19
Akan segera dimulai
Liga Premier KenyaLiga Premier Kenya  18:12
MaraSugarFCMaraSugarFC
00
MurangaMuranga
Akan segera dimulai
Liga Kedua TurkiLiga Kedua Turki  18:12
Menemen BelediyesporMenemen Belediyespor
00
HekimogluTrabzonHekimogluTrabzon
Akan segera dimulai
Liga Kedua TurkiLiga Kedua Turki  18:12
AdanasporAdanaspor
00
MussporMusspor
Akan segera dimulai
Liga Bola Basket KoreaLiga Bola Basket Korea  18:12
Anyang KGCAnyang KGC
00
Seoul Samsung ThundersSeoul Samsung Thunders
Akan segera dimulai
Liga Bola Basket Wanita KoreaLiga Bola Basket Wanita Korea  18:12
BNK Sum WanitaBNK Sum Wanita
00
KB Stars WKB Stars W
Akan segera dimulai
Georgia Championship U22Georgia Championship U22  18:12
00
BCIverioniU22BCIverioniU22
Akan segera dimulai
Georgia Championship U22Georgia Championship U22  18:12
VeraTbilisiBVeraTbilisiB
00
SwishU22SwishU22
Akan segera dimulai
Kejuaraan Musim Semi 1Kejuaraan Musim Semi 1  18:12
Torino U20Torino U20
00
Lecce U20Lecce U20
Akan segera dimulai
Liga B2Liga B2  18:12
Keunggulan YokohamaKeunggulan Yokohama
00
Yamagata WyvernsYamagata Wyverns
Akan segera dimulai
Divisi 2 IranDivisi 2 Iran  18:12
Eduards EmsisEduards Emsis
00
EspadTehranEspadTehran
Akan segera dimulai
HK U22LHK U22L  18:12
LeeManFCU22LeeManFCU22
00
NorthDistrictU22NorthDistrictU22
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  19:12
Alessandro QuainiAlessandro Quaini
00
Béla Csongor FejérBéla Csongor Fejér
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  19:12
BenficaU23BenficaU23
00
EstorilU23EstorilU23
Akan segera dimulai
Liga Kedua TurkiLiga Kedua Turki  19:12
KirklarelisporKirklarelispor
00
YeniMersindmanyurduYeniMersindmanyurdu
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  19:12
Estrela FC U23Estrela FC U23
00
TorreenseU23TorreenseU23
Akan segera dimulai
Liga Turki A2 U19Liga Turki A2 U19  19:12
Galatasaray U19Galatasaray U19
00
Kasimpasa U19Kasimpasa U19
Akan segera dimulai
Liga Turki A2 U19Liga Turki A2 U19  19:12
Istanbul Basaksehir U19Istanbul Basaksehir U19
00
GazisehirGaziantepFKU19GazisehirGaziantepFKU19
Akan segera dimulai
Liga Turki A2 U19Liga Turki A2 U19  19:12
Genclerbirligi U19Genclerbirligi U19
00
Trabzonspor U19Trabzonspor U19
Akan segera dimulai
Liga Premier KenyaLiga Premier Kenya  19:12
SofapakaFCSofapakaFC
00
KariobangiSharksKariobangiSharks
Akan segera dimulai
Liga Utama KambojaLiga Utama Kamboja  19:12
Christian ChiminoChristian Chimino
00
KirivongSokSenCheyKirivongSokSenChey
Akan segera dimulai
Macau-China Basketball LeagueMacau-China Basketball League  19:12
XinDuXinDu
00
HouChonHouChon
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  19:12
PortimonenseU23PortimonenseU23
00
FarenseU23FarenseU23
Akan segera dimulai
Asosiasi Bola Basket Wanita TiongkokAsosiasi Bola Basket Wanita Tiongkok  19:12
Wanita Bebek BeijingWanita Bebek Beijing
00
Wanita Shanxi ZhuyeqingWanita Shanxi Zhuyeqing
Akan segera dimulai
Liga Super Bola Basket IranLiga Super Bola Basket Iran  19:12
RaadPadafanIsfahanRaadPadafanIsfahan
00
PasKordestanPasKordestan
Akan segera dimulai
Liga Bola Basket Nasional TiongkokLiga Bola Basket Nasional Tiongkok  19:12
ShandongHoneyBadgerShandongHoneyBadger
00
ZhangjiakouZhangjiakou
Akan segera dimulai
Asosiasi Bola Basket Wanita TiongkokAsosiasi Bola Basket Wanita Tiongkok  19:12
Hebei WHebei W
00
Wanita SiChuan JinQiangWanita SiChuan JinQiang
Akan segera dimulai
Liga Bola Basket Nasional TiongkokLiga Bola Basket Nasional Tiongkok  19:12
Jiangxi GanchiJiangxi Ganchi
00
ShanghaiBlackbirdShanghaiBlackbird
Akan segera dimulai
Asosiasi Bola Basket Wanita TiongkokAsosiasi Bola Basket Wanita Tiongkok  19:12
Wanita Niushoushan JiangsuWanita Niushoushan Jiangsu
00
Zhejiang Golden Bulls WZhejiang Golden Bulls W
Akan segera dimulai
Iraq Premier DivisionIraq Premier Division  19:12
Renze FijRenze Fij
00
NaftAl-WasatNaftAl-Wasat
Akan segera dimulai
Liga Cadangan SingapuraLiga Cadangan Singapura  19:12
AlbirexNiigataU23AlbirexNiigataU23
00
TampinesRoversFCU23TampinesRoversFCU23
Akan segera dimulai
Asosiasi Bola Basket TiongkokAsosiasi Bola Basket Tiongkok  19:12
Jiutai Rural Commercial BankJiutai Rural Commercial Bank
00
Ningbo TingwoNingbo Tingwo
Akan segera dimulai
Asosiasi Bola Basket TiongkokAsosiasi Bola Basket Tiongkok  19:12
Liaoning BengangLiaoning Bengang
00
Beijing KongguBeijing Konggu
Akan segera dimulai
Asosiasi Bola Basket TiongkokAsosiasi Bola Basket Tiongkok  19:12
Shandong Hi-SpeedShandong Hi-Speed
00
Shenzhen Marco PoloShenzhen Marco Polo
Akan segera dimulai
Asosiasi Bola Basket TiongkokAsosiasi Bola Basket Tiongkok  19:12
Sichuan JinqiangSichuan Jinqiang
00
Beijing ShougangBeijing Shougang
Akan segera dimulai
Kejuaraan Musim Semi 1Kejuaraan Musim Semi 1  20:12
Cesena U20Cesena U20
00
Iu Ranera GrauIu Ranera Grau
Akan segera dimulai
NGA PLNGA PL  20:12
InterLagosInterLagos
00
Chen JunlinChen Junlin
Akan segera dimulai
Georgia Championship U22Georgia Championship U22  20:12
TSUU22TSUU22
00
CBAAcademyU22CBAAcademyU22
Akan segera dimulai
Liga Super Bola Basket IranLiga Super Bola Basket Iran  20:12
TabiatTabiat
00
NovinMahshahrNovinMahshahr
Akan segera dimulai
Asosiasi Bola Basket Wanita TiongkokAsosiasi Bola Basket Wanita Tiongkok  20:12
Xinjiang WXinjiang W
00
Wanita GuangDong XintongshengWanita GuangDong Xintongsheng
Akan segera dimulai
Indonesian Liga 1Indonesian Liga 1  20:12
Semen PadangSemen Padang
00
PersatuanSepakbolaIndonesiaJakartaPersatuanSepakbolaIndonesiaJakarta
Akan segera dimulai
Liga Sepak Bola KenyaLiga Sepak Bola Kenya  20:12
Sugar Nzoia UnitedSugar Nzoia United
00
MigoriMigori
Akan segera dimulai
Kejuaraan Musim Semi 1Kejuaraan Musim Semi 1  20:12
Atalanta U19Atalanta U19
00
JuventusU20JuventusU20
Akan segera dimulai
Jordan ReserveJordan Reserve  20:12
AlSaltReservesAlSaltReserves
00
Mateo RodasMateo Rodas
Akan segera dimulai
Jordan ReserveJordan Reserve  20:12
Tyler LissetteTyler Lissette
00
AlAhliAmmanReservesAlAhliAmmanReserves
Akan segera dimulai
Liga Super Yunani 2Liga Super Yunani 2  20:12
AsterasTripolisBAsterasTripolisB
00
Igor StasevichIgor Stasevich
Akan segera dimulai
Liga Premier KenyaLiga Premier Kenya  20:12
KakamegaHomeboyzKakamegaHomeboyz
00
KenyaPoliceFCKenyaPoliceFC
Akan segera dimulai
Liga Ketiga TurkiLiga Ketiga Turki  20:12
BursaYldrmsporBursaYldrmspor
00
InegolKafkasGenclikInegolKafkasGenclik
Akan segera dimulai
Liga Kedua TurkiLiga Kedua Turki  20:12
ElazigsporElazigspor
00
IskenderunsporIskenderunspor
Akan segera dimulai
SAR LSAR L  20:12
Al-BukayriyahFCU21Al-BukayriyahFCU21
00
AlJabalainU21AlJabalainU21
Akan segera dimulai
Macau-China Basketball LeagueMacau-China Basketball League  20:12
Night-TimeTaxiFansNight-TimeTaxiFans
00
JiaHuaJiaHua
Akan segera dimulai
Liga Super Bola Basket IranLiga Super Bola Basket Iran  20:12
Seni AbadanSeni Abadan
00
NaftZagrosJonoubiNaftZagrosJonoubi
Akan segera dimulai
Divisi 2 MesirDivisi 2 Mesir  20:12
Andrea PereiraAndrea Pereira
00
MisrLelMakkasaMisrLelMakkasa
Akan segera dimulai
Divisi 2 MesirDivisi 2 Mesir  20:12
QusQus
00
EdfuCenterEdfuCenter
Akan segera dimulai
Divisi 2 MesirDivisi 2 Mesir  20:12
EgyptStarsEgyptStars
00
CascadaCascada
Akan segera dimulai
Divisi 2 MesirDivisi 2 Mesir  20:12
Stefan ŠćepovićStefan Šćepović
00
Gergő LovrencsicsGergő Lovrencsics
Akan segera dimulai
Piala Skor MesirPiala Skor Mesir  20:12
AlMasryAlMasry
00
DikernisSCDikernisSC
Akan segera dimulai
Liga Bola Basket PolandiaLiga Bola Basket Polandia  20:12
ZaglebieSosnowiecIIWomenZaglebieSosnowiecIIWomen
00
Wanita AZS UMCS Lublin 2Wanita AZS UMCS Lublin 2
Akan segera dimulai
Liga Profesional OmanLiga Profesional Oman  20:12
Al Shabab SCAl Shabab SC
00
Al-NasrOMAAl-NasrOMA
Akan segera dimulai
HK U22LHK U22L  20:12
Ragnar JoensenRagnar Joensen
00
KowloonCityU22KowloonCityU22
Akan segera dimulai
Liga Pemuda IsraelLiga Pemuda Israel  20:12
Bianca SchmidtBianca Schmidt
00
Hélder LopesHélder Lopes
Akan segera dimulai
UAE U23UAE U23  20:12
Stefan HolisStefan Holis
00
AlJaziraSCU23AlJaziraSCU23
Akan segera dimulai
UAE U23UAE U23  20:12
Al-NasrSCU23Al-NasrSCU23
00
AlBataehU23AlBataehU23
Akan segera dimulai
Liga Premier KenyaLiga Premier Kenya  21:12
UlinziStarsNakuruUlinziStarsNakuru
00
Joao PlataJoao Plata
Akan segera dimulai
Piala YordaniaPiala Yordania  21:12
Al-AhlyAl-Ahly
00
Aleksandar BashlievAleksandar Bashliev
Akan segera dimulai
Liga Premier IrakLiga Premier Irak  21:12
Kosuke YamamotoKosuke Yamamoto
00
AlGharrafAlGharraf
Akan segera dimulai
Liga Premier IrakLiga Premier Irak  21:12
Vüsal İsgändärliVüsal İsgändärli
00
NaftMissanNaftMissan
Akan segera dimulai
Liga Utama ZanzibarLiga Utama Zanzibar  21:12
Michał SzromnikMichał Szromnik
00
NewKingNewKing
Akan segera dimulai
CBA PGCBA PG  21:12
Shandong Hi-SpeedShandong Hi-Speed
00
Shenzhen Marco PoloShenzhen Marco Polo
Akan segera dimulai
CBA PGCBA PG  21:12
Sichuan JinqiangSichuan Jinqiang
00
Beijing ShougangBeijing Shougang
Akan segera dimulai
Liga Bola Basket Wanita TurkiLiga Bola Basket Wanita Turki  21:12
Wanita Emlak Konut GelisimWanita Emlak Konut Gelisim
00
Wanita Samsun CanikWanita Samsun Canik
Akan segera dimulai
Liga Super Bola Basket IranLiga Super Bola Basket Iran  21:12
Shah Darui GorganShah Darui Gorgan
00
EsteghlalEsteghlal
Akan segera dimulai
Liga Bola Basket Turki 2Liga Bola Basket Turki 2  22:12
BakkeiBakkei
00
Bola Basket GaziantepBola Basket Gaziantep
Akan segera dimulai
Liga Super TurkiLiga Super Turki  22:12
Quentin WestbergQuentin Westberg
00
GazisehirGaziantepGazisehirGaziantep
Akan segera dimulai
Georgia Championship U22Georgia Championship U22  22:12
Hyundai U22Hyundai U22
00
MagwatiU22MagwatiU22
Akan segera dimulai
Liga Super Bola Basket IranLiga Super Bola Basket Iran  22:12
KallehKalleh
00
Golnoor IsfahanGolnoor Isfahan
Akan segera dimulai
Liga Bola Basket Turki 2Liga Bola Basket Turki 2  22:12
Final SporFinal Spor
00
Ankaragucu MamakAnkaragucu Mamak
Akan segera dimulai
Piala Nasional Afrika CAFPiala Nasional Afrika CAF  22:12
MaliMali
00
ZambiaZambia
Akan segera dimulai
Liga NasionalLiga Nasional  22:12
Macan AtyrauMacan Atyrau
00
Tobol KostanaTobol Kostana
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  22:12
Vizela U23Vizela U23
00
Gil Vicente U23Gil Vicente U23
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  22:12
RioAveU23RioAveU23
00
Devis EpassyDevis Epassy
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  22:12
Mikkel KallesøeMikkel Kallesøe
00
MaritimoU23MaritimoU23
Akan segera dimulai
NGA PLNGA PL  22:12
Damian RasakDamian Rasak
00
EkitiUnitedFCEkitiUnitedFC
Akan segera dimulai
Liga Portugal U23Liga Portugal U23  22:12
BragaU23BragaU23
00
AcademicoViseuU23AcademicoViseuU23
Akan segera dimulai
Liga Divisi Pertama KuwaitLiga Divisi Pertama Kuwait  22:12
Al-YarmoukAl-Yarmouk
00
SportySporty
Akan segera dimulai
Liga Divisi Pertama KuwaitLiga Divisi Pertama Kuwait  22:12
AlJaziraFCAlJaziraFC
00
BurganSCBurganSC
Akan segera dimulai
SAR LSAR L  22:12
AlAdalahU21AlAdalahU21
00
AlNajmaReservesAlNajmaReserves
Akan segera dimulai
SAR LSAR L  22:12
Al-RiyadhU21Al-RiyadhU21
00
Al-TaawounU21Al-TaawounU21
Akan segera dimulai
Jordan ReserveJordan Reserve  23:12
Al-HusseinSCReserveAl-HusseinSCReserve
00
Al-WehdatReservesAl-WehdatReserves
Akan segera dimulai
Liga NasionalLiga Nasional  23:12
BK ASTANABK ASTANA
00
AlmatyAlmaty
Akan segera dimulai
KejuaraanKejuaraan  23:12
Rguor MinskRguor Minsk
00
Tsmoki MinskTsmoki Minsk
Akan segera dimulai
Liga Utama Arab SaudiLiga Utama Arab Saudi  23:12
Al Ittihad Arab SaudiAl Ittihad Arab Saudi
00
Al-NasrAl-Nasr
Akan segera dimulai
Liga Utama Arab SaudiLiga Utama Arab Saudi  23:12
UhudUhud
00
ALUlaALUla
Akan segera dimulai
Liga Utama Arab SaudiLiga Utama Arab Saudi  23:12
Al Ahli Arab SaudiAl Ahli Arab Saudi
00
Al-FatehAl-Fateh
Akan segera dimulai
Liga Utama Arab SaudiLiga Utama Arab Saudi  23:12
Al KhaleejAl Khaleej
00
MudharMudhar
Akan segera dimulai
Liga Bola Basket Wanita TurkiLiga Bola Basket Wanita Turki  23:12
MersinGenclerbirligiWMersinGenclerbirligiW
00
Bodrum WanitaBodrum Wanita
Akan segera dimulai
Liga Premier NigeriaLiga Premier Nigeria  23:12
Katsina UnitedKatsina United
00
RiversUnitedRiversUnited
Akan segera dimulai
KejuaraanKejuaraan  23:12
Borisfen-Kalas MogilevBorisfen-Kalas Mogilev
00
GrodnoGrodno
Akan segera dimulai
JOR WCJOR WC  23:12
6YardEtihadW6YardEtihadW
00
AmmanWomenAmmanWomen
Akan segera dimulai
Ghana Divisi 1Ghana Divisi 1  23:12
Inter AlliesInter Allies
00
AccraLionsAccraLions
Akan segera dimulai
Piala Skor MesirPiala Skor Mesir  23:12
PyramidsFCPyramidsFC
00
FCMasarFCMasar
Akan segera dimulai
Liga Utama AzerbaijanLiga Utama Azerbaijan  23:12
SumgayitFKSumgayitFK
00
SabahBakuSabahBaku
Akan segera dimulai
Piala YordaniaPiala Yordania  23:12
AlFaisalyAlFaisaly
00
Diego PennyDiego Penny
Akan segera dimulai
Liga Premier IrakLiga Premier Irak  23:12
DialaDiala
00
Vincent MuratoriVincent Muratori
Akan segera dimulai
Liga Premier IrakLiga Premier Irak  23:12
Newroz SCNewroz SC
00
AmanatBaghdadAmanatBaghdad
Akan segera dimulai
Liga Profesional OmanLiga Profesional Oman  23:12
AlSeebSCAlSeebSC
00
BahlaSCBahlaSC
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}${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 terbaruLihat Selengkapnya>
Berita Terkini
    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
    • 1ArsenalArsenal12/3/239
    • 2ManchesterCityManchesterCity12/1/437
    • 3AstonVillaAstonVilla11/3/336
    • 4ChelseaChelsea8/5/429
    • 5LiverpoolLiverpool9/2/629
    • 6SunderlandSunderland7/6/427
    • 7ManchesterUnitedManchesterUnited7/5/526
    • 8Joe MurphyJoe Murphy7/5/526
    • 9Dennis GroteDennis Grote6/6/524
    • 10EvertonEverton7/3/724
    • 11NewcastleUnitedNewcastleUnited6/5/623
    • 12BrentfordBrentford7/2/823
    • 13TottenhamHotspurTottenhamHotspur6/4/722
    • 14BournemouthAFCBournemouthAFC5/7/522
    • 15FulhamFulham6/2/820
    • 16LeedsUnitedLeedsUnited5/4/819
    • 17NottinghamForestNottinghamForest5/3/818
    • 18WestHamUnitedWestHamUnited3/4/1013
    • 19BurnleyBurnley3/2/1211
    • 20WolverhamptonWanderersWolverhamptonWanderers0/2/152
    Papan skor basket
    • Asosiasi Basket Nasional1Asosiasi Basket Nasional
    • Asosiasi Bola Basket Tiongkok1Asosiasi Bola Basket Tiongkok
    Konferensi TimurKonferensi Barat
    TimMenang/KalahPersentase kemenangan
    • 1NetherlandsNetherlands2/00%
    • 2SenegalSenegal2/10%
    • 3EcuadorEcuador1/10%
    • 4QatarQatar0/30%