Showing source for: https://xoilaclivettbdad.tv/
Duration: 0.481185s
Server: TencentEdgeOne
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="/wp-content/themes/cakhiatv/style.css" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
<!-- Tá»i ưu hóa công cụ tìm kiếm bá»i Rank Math PRO - https://rankmath.com/ -->
<title>Xoilac TV - Trực Tiếp World Cup 2026 HD - Xem Xôi Lạc TTBD</title>
<meta name="description" content="Xoilac TV trá»±c tiếp bóng Äá miá»
n phÃ, xem bóng Äá trá»±c tuyến Xôi Lạc TV tá»c Äá» cao cùng Äá»i ngÅ© BLV chuyên nghiá»p á» tất cả giải Äấu trên thế giá»i."/>
<meta name="robots" content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large"/>
<link rel="canonical" href="https://xoilaclivettbdad.tv" />
<meta property="og:locale" content="vi_VN" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Xoilac TV - Trực Tiếp World Cup 2026 HD - Xem Xôi Lạc TTBD" />
<meta property="og:description" content="Xoilac TV trá»±c tiếp bóng Äá miá»
n phÃ, xem bóng Äá trá»±c tuyến Xôi Lạc TV tá»c Äá» cao cùng Äá»i ngÅ© BLV chuyên nghiá»p á» tất cả giải Äấu trên thế giá»i." />
<meta property="og:url" content="https://xoilaclivettbdad.tv" />
<meta property="og:site_name" content="Xoilac TV - Bóng Äá Xôi Lạc trá»±c tuyến, trá»±c tiếp TTBD HD" />
<meta property="og:updated_time" content="2026-04-27T23:52:25+07:00" />
<meta property="og:image" content="https://cdn.xoilaclivettbdad.tv/wp-content/uploads/2025/05/xoilactv_share_social_image.jpg" />
<meta property="og:image:secure_url" content="https://cdn.xoilaclivettbdad.tv/wp-content/uploads/2025/05/xoilactv_share_social_image.jpg" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="xoilac tv" />
<meta property="og:image:type" content="image/jpeg" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Xoilac TV - Trực Tiếp World Cup 2026 HD - Xem Xôi Lạc TTBD" />
<meta name="twitter:description" content="Xoilac TV trá»±c tiếp bóng Äá miá»
n phÃ, xem bóng Äá trá»±c tuyến Xôi Lạc TV tá»c Äá» cao cùng Äá»i ngÅ© BLV chuyên nghiá»p á» tất cả giải Äấu trên thế giá»i." />
<meta name="twitter:site" content="@xoilacphongkham" />
<meta name="twitter:creator" content="@xoilacphongkham" />
<meta name="twitter:image" content="https://cdn.xoilaclivettbdad.tv/wp-content/uploads/2025/05/xoilactv_share_social_image.jpg" />
<meta name="twitter:label1" content="ÄÆ°á»£c viết bá»i" />
<meta name="twitter:data1" content="Trần Ngá»c Hùng" />
<meta name="twitter:label2" content="Thá»i gian Äá» Äá»c" />
<meta name="twitter:data2" content="10 phút" />
<script type="application/ld+json" class="rank-math-schema-pro">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","description":"Xoilac TV - Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 ch\u1ea5t l\u01b0\u1ee3ng cao. Xem b\u00f3ng \u0111\u00e1 tr\u1ef1c tuy\u1ebfn mi\u1ec5n ph\u00ed c\u00f9ng X\u00f4i L\u1ea1c TV, t\u1ed1c \u0111\u1ed9 nhanh, kh\u00f4ng qu\u1ea3ng c\u00e1o, h\u1ed7 tr\u1ee3 m\u1ecdi thi\u1ebft b\u1ecb.","keywords":["xoilac","xoilac tv","x\u00f4i l\u1ea1c","x\u00f4i l\u1ea1c tv","xoilactv","xoi lac","tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1","xem b\u00f3ng \u0111\u00e1"]},{"@type":"Organization","@id":"https://xoilaclivettbdad.tv/#organization","name":"Xoilac TV","sameAs":["https://twitter.com/xoilacphongkham","https://www.youtube.com/@xoilacphongkham","https://www.reddit.com/user/xoilacphongkham/","https://www.pinterest.com/xoilacphongkham","https://www.tumblr.com/xoilacphongkham","https://www.instapaper.com/p/xoilacphongkham","https://500px.com/p/xoilacphongkham","https://issuu.com/xoilacphongkham","https://gravatar.com/xoilacphongkham","https://pixabay.com/users/49571724/","https://gitlab.com/xoilacphongkham","https://disqus.com/by/xoilacphongkham/about/","https://heylink.me/xoilacphongkham","https://fliphtml5.com/homepage/empll/","https://wakelet.com/@xoilacphongkham","https://www.producthunt.com/@xoilacphongkham","https://www.walkscore.com/people/243151118779/xoilacphongkham","https://www.snipesocial.co.uk/xoilacphongkham"],"logo":{"@type":"ImageObject","@id":"https://xoilaclivettbdad.tv/#logo","url":"https://cdn.adminphongkham.site/wp-content/uploads/2025/07/logo-squared.jpg","contentUrl":"https://cdn.adminphongkham.site/wp-content/uploads/2025/07/logo-squared.jpg","caption":"Xoilac TV - B\u00f3ng \u0111\u00e1 X\u00f4i L\u1ea1c tr\u1ef1c tuy\u1ebfn, tr\u1ef1c ti\u1ebfp TTBD HD","inLanguage":"vi","width":"1080","height":"1080"},"alternateName":"Xoilac TV - Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 X\u00f4i L\u1ea1c TV mi\u1ec5n ph\u00ed","url":"https://xoilaclivettbdad.tv","image":"https://xoilaclivettbdad.tv/wp-content/uploads/2025/04/openart-image_-x9isWRS_1745922617635_raw.png","founders":[{"@type":"Person","name":"Tr\u1ea7n Ng\u1ecdc H\u00f9ng","jobTitle":"CEO","url":"https://xoilaclivettbdad.tv/author/tranngochung"}],"email":"[email protected]","telephone":"+84-816-248-3766","address":{"@type":"PostalAddress","streetAddress":"6A P. Qu\u00e1n S\u1ee9, H\u00e0ng B\u00f4ng, Ho\u00e0n Ki\u1ebfm, H\u00e0 N\u1ed9i, Vi\u1ec7t Nam, 100000","addressLocality":"H\u00e0 N\u1ed9i","addressRegion":"H\u00e0 N\u1ed9i","postalCode":"100000","addressCountry":"VN"},"contactPoint":{"@type":"ContactPoint","telephone":"+84-816-248-3766","contactType":"customer support"},"description":"Xoilac TV tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 HD mi\u1ec5n ph\u00ed. X\u00f4i L\u1ea1c TV ph\u00e1t b\u00f3ng \u0111\u00e1 tr\u1ef1c tuy\u1ebfn t\u1ea5t c\u1ea3 gi\u1ea3i \u0111\u1ea5u h\u00e0ng \u0111\u1ea7u th\u1ebf gi\u1edbi. Link xem b\u00f3ng \u0111\u00e1 t\u1ed1c \u0111\u1ed9 cao, kh\u00f4ng qu\u1ea3ng c\u00e1o t\u1ea1i Xoilac TV","legalName":"Xoilac TV","additionalType":["https://vi.wikipedia.org/wiki/Ph\u00e1t_tr\u1ef1c_ti\u1ebfp","https://vi.wikipedia.org/wiki/B\u00f3ng_\u0111\u00e1","https://vi.wikipedia.org/wiki/Truy\u1ec1n_h\u00ecnh_tr\u1ef1c_ti\u1ebfp","https://en.wikipedia.org/wiki/Livestreaming","https://en.wikipedia.org/wiki/Football"]},{"@type":"WebSite","@id":"https://xoilaclivettbdad.tv/#website","url":"https://xoilaclivettbdad.tv","name":"Xoilac TV - B\u00f3ng \u0111\u00e1 X\u00f4i L\u1ea1c tr\u1ef1c tuy\u1ebfn, tr\u1ef1c ti\u1ebfp TTBD HD","alternateName":"Xoilac TV - Tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 X\u00f4i L\u1ea1c TV","publisher":{"@id":"https://xoilaclivettbdad.tv/#organization"},"inLanguage":"vi","potentialAction":{"@type":"SearchAction","target":"https://xoilaclivettbdad.tv/?s={search_term_string}","query-input":"required name=search_term_string"},"description":"Xoilac TV tr\u1ef1c ti\u1ebfp b\u00f3ng \u0111\u00e1 HD mi\u1ec5n ph\u00ed, xem b\u00f3ng \u0111\u00e1 X\u00f4i L\u1ea1c TV kh\u00f4ng qu\u1ea3ng c\u00e1o c\u00f9ng nhi\u1ec1u t\u00ednh n\u0103ng h\u1eefu \u00edch nh\u01b0 m\u00f4 ph\u1ecfng tr\u1eadn \u0111\u1ea5u, l\u1ecbch thi \u0111\u1ea5u, BXH, KQBD."},{"@type":"ImageObject","@id":"https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/gioi-thieu-xoilac-tv.jpg","url":"https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/gioi-thieu-xoilac-tv.jpg","width":"200","height":"200","inLanguage":"vi"},{"@type":"WebPage","@id":"https://xoilaclivettbdad.tv#webpage","url":"https://xoilaclivettbdad.tv","name":"Xoilac TV - Tr\u1ef1c Ti\u1ebfp World Cup 2026 HD - Xem X\u00f4i L\u1ea1c TTBD","datePublished":"2025-04-30T19:12:38+07:00","dateModified":"2026-04-27T23:52:25+07:00","about":{"@id":"https://xoilaclivettbdad.tv/#organization"},"isPartOf":{"@id":"https://xoilaclivettbdad.tv/#website"},"primaryImageOfPage":{"@id":"https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/gioi-thieu-xoilac-tv.jpg"},"inLanguage":"vi"}]}</script>
<!-- /Plugin SEO WordPress Rank Math -->
<link rel='dns-prefetch' href='//cdn.xoilaclivettbdad.tv' />
<script type="text/javascript">
/* <![CDATA[ */
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cdn.xoilaclivettbdad.tv\/wp-content\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.8.1"}};
/*! This file is auto-generated */
!function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\ud83d\udd25","\ud83d\udc26\u200b\ud83d\udd25")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings);
/* ]]> */
</script>
<style id='wp-emoji-styles-inline-css' type='text/css'>
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://cdn.xoilaclivettbdad.tv/wp-content/wp-includes/css/dist/block-library/style.min.css?ver=6.8.1' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='main-style-css' href='https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/style.css?ver=6.8.1' type='text/css' media='all' />
<link rel="https://api.w.org/" href="https://xoilaclivettbdad.tv/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://xoilaclivettbdad.tv/wp-json/wp/v2/pages/1073" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://xoilaclivettbdad.tv/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 6.8.1" />
<link rel='shortlink' href='https://xoilaclivettbdad.tv/' />
<link rel="alternate" title="oNhúng (JSON)" type="application/json+oembed" href="https://xoilaclivettbdad.tv/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fxoilaclivettbdad.tv%2F" />
<link rel="alternate" title="oNhúng (XML)" type="text/xml+oembed" href="https://xoilaclivettbdad.tv/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fxoilaclivettbdad.tv%2F&format=xml" />
<style>
@media (min-width: 1024px) {
h1 {
font-size: 1.5em !important;
}
}
.match-teams-score {
display: flex !important;
}
@media (max-width: 767px) {
.xgplayer .xg-inner-controls {
height: 60px !important;
}
.header .logo img{
height: 35px;
}
}
@media (min-width: 481px) and (max-width: 767px) {
div#chat_messages {
max-height: 60vh !important;
}
}
</style>
<style>
.match-section {
min-height: 4800px;
}
.match-card__status {
position: absolute;
top: 13%;
left: 50%;
transform: translate(-50%, -50%);
}
.match-card__stats-content {
background: none !important;
box-shadow: none !important
}
@media (max-width: 480px) {
.team__logo {
width: 40px !important;
height: 40px !important;
}
.match-card__league {
max-width: 100px;
}
.match-card__time {
max-width: 100px;
}
.match-card__status {
max-width: 120px;
order: 1 !important;
font-size: 12px
}
.streaming {
padding: 4px;
}
.btn-view-truc-tiep {
padding: 8px 4px !important;
font-size: 12px;
}
.match-card__stats-content {
display: block !important;
}
.match-card__stats {
display: block !important
}
}
@media (min-width: 768px) and (max-width: 1024px) {
.match-card__status {
position: absolute;
top: 13%;
left: 50%;
transform: translate(-50%, -50%);
}
.match-card__league {
max-width: 110px;
}
}
</style>
<!-- Google tag (tá»ng) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-V8GXMSME5N"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-V8GXMSME5N');
</script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-4VKF8640ES"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-4VKF8640ES');
</script>
<script src="//s1.what-on.com/widget/service-v2.js?key=aj9X2zKQ" async="async"></script>
</head>
<body>
<!-- Header -->
<header class="header">
<div class="container">
<div class="header__inner">
<a href="/" class="logo">
<img src="/wp-content/uploads/2025/05/xoilactv_logo.png" alt="XOILAC TV" />
</a>
<div style="display: flex; align-items: center">
<nav class="nav">
<button class="nav__toggle">
<img src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/hamburger.svg" alt="Menu" />
</button>
<ul class="nav__menu">
<button class="nav__close" aria-label="Close menu"></button>
<li class="nav__item"><a href="/" class=" active">TRANG CHỦ</a></li><li class="nav__item"><a href="https://xoilaclivettbdad.tv/lich-thi-dau" class="">Lá»CH THI ÄẤU</a></li><li class="nav__item"><a href="https://xoilaclivettbdad.tv/bang-xep-hang" class="">BẢNG XẾP HẠNG</a></li><li class="nav__item"><a href="https://xoilaclivettbdad.tv/ket-qua-bong-da" class="">KẾT QUẢ BÃNG ÄÃ</a></li><li class="nav__item"><a href="https:/xoilaclivettbdad.tv/nhan-dinh" class="">NHẬN Äá»NH</a></li><li class="nav__item"><a href="https:/xoilaclivettbdad.tv/tin-bong-da" class="">TIN TỨC</a></li> </ul>
</nav>
<div class="header__buttons">
<a href="https://refvsbg.com/" class="btn btn--secondary header-button" rel="nofollow">
<span class="header-text">CƯỢC VSBET</span>
</a>
<a href="https://t.me/vsbet88888888888888888" rel="nofollow" target="_blank" class="btn btn--default header-button">
<span class="header-text">LIÃN Há» KM</span>
</a>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<!-- Main Content -->
<main>
<!-- Hero Section -->
<section class="hero">
<div class="container">
<div class="hero__content">
<h1 class="text-uppercase">
Xoilac TV - Bóng Äá Xôi Lạc trá»±c tuyến, trá»±c tiếp TTBD HD
</h1>
</div>
</div>
</section>
<!-- Sports Filter -->
<section class="sports-filter">
<div class="container">
<div class="sports-filter__inner" style="display: none">
<!-- Group 1: Sports Categories -->
<!--<div class="sports-filter__group sports-categories">
<button
class="sports-filter__button"
data-sport="all"
>
<div class="sports-filter__button-icon">
<img
src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/football.png"
alt="Tất Cả"
/>
</div>
<div class="sports-filter__button-text">Tất Cả</div>
<div class="sports-filter__button-count" id="count-all-type"></div>
</button>
<button
class="sports-filter__button"
data-sport="football"
>
<div class="sports-filter__button-icon">
<img
src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/football.png"
alt="Football"
/>
</div>
<div class="sports-filter__button-text">Bóng Äá</div>
<div class="sports-filter__button-count" id="count-football"></div>
</button>
<button class="sports-filter__button" data-sport="basketball">
<div class="sports-filter__button-icon">
<img
src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/basketball.png"
alt="Basketball"
/>
</div>
<div class="sports-filter__button-text">Bóng rá»</div>
<div class="sports-filter__button-count" id="count-basketball"></div>
</button>
<!-- <button class="sports-filter__button" data-sport="tennis">
<div class="sports-filter__button-icon">
<img src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/tennis.png" alt="Tennis" />
</div>
<div class="sports-filter__button-text">Tennis</div>
<div class="sports-filter__button-count" id="count-tennis"></div>
</button> -->
<!--<button class="sports-filter__button" data-sport="volleyball">
<div class="sports-filter__button-icon">
<img
src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/volleyball.png"
alt="Volleyball"
/>
</div>
<div class="sports-filter__button-text">Bóng chuyá»n</div>
<div class="sports-filter__button-count" id="count-volleyball"></div>
</button> -->
<div class="livescore-switch">
<label class="switch">
<input type="checkbox" id="livescoreToggle" />
<span class="slider"></span>
</label>
<span class="livescore-label">Livescore</span>
</div>
</div>
<!-- Divider -->
<div class="sports-filter__divider"></div>
<!-- Group 2: Match Filters -->
<div class="sports-filter__group match-filters">
<button class="sports-filter__button_child active" data-filter="child_all">
<div class="sports-filter__button-icon">
<img src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/all.png" alt="All" />
</div>
<div class="sports-filter__button-text">Tất cả</div>
<div class="sports-filter__button-count" id="count-all-type"></div>
</button>
<button class="sports-filter__button_child live" data-filter="live">
<div class="sports-filter__button-icon">
<img src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/live.png" alt="Live" />
</div>
<div class="sports-filter__button-text">Äang Live</div>
<div class="sports-filter__button-count" id="count-live"></div>
</button>
<!--<button class="sports-filter__button_child" data-filter="hot">
<div class="sports-filter__button-icon">
<img src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/hot.png" alt="Hot" />
</div>
<div class="sports-filter__button-text">Tráºn HOT</div>
<div class="sports-filter__button-count" id="count-hot">48</div>
</button>-->
<!--<button class="sports-filter__button_child" data-filter="date" data-value="">
<div class="sports-filter__button-icon">
<img src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/calendar.png" alt="Today" />
</div>
<div class="sports-filter__button-text">Hôm Nay</div>
<div class="sports-filter__button-count" id="count-today"></div>
</button>-->
<!--<button class="sports-filter__button_child" data-filter="date" data-value="">
<div class="sports-filter__button-icon">
<img
src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/images/icons/calendar.png"
alt="Tomorrow"
/>
</div>
<div class="sports-filter__button-text">Ngà y Mai</div>
<div class="sports-filter__button-count" id="count-tomorrow"></div>
</button>-->
<!--
<button class="sports-filter__button_child" data-filter="no_blv">
<div class="sports-filter__button-text">Live không BLV</div>
<div class="sports-filter__button-count" id="noblv-live">0</div>
</button>
-->
</div>
</div>
</div>
</section>
<!-- Featured Matches -->
<section class="featured-matches">
<div class="container">
<div class="match-section">
<div id="match-list" class="matches">
</div>
</div>
<!--<div
style="
display: flex;
justify-content: center;
margin-top: 1rem;
margin-bottom: 1rem;
"
>
<a href="#" class="btn btn--readmore">
<span>Xem thêm lá»ch trá»±c tiếp -></span>
</a>
</div>-->
</div>
</section>
<!-- Content Navigation Section -->
<section class="content-nav">
<div class="container">
<div class="content-nav__container" style="max-height:800px !important">
<div class="content-nav__lists">
<div class="content-nav__list">
<!-- Nếu bạn vẫn muá»n giữ Mục lục nà y thá»§ công, thì Äá» lại -->
<p style="font-weight: bold; font-size: 120%">Mục Lục</p>
<!-- Hoặc có thá» xoá toà n bá» <ul> nà y nếu muá»n Gutenberg xá» lý luôn -->
<div class="content-nav__divider"></div>
<div class="content-nav__text">
<p><a href="/"><strong>Xoilac</strong></a> TV ÄÆ°á»£c Äánh giá là Äá»a chá» quen thuá»c cá»§a những thà nh viên Äam mê bá» môn bóng Äá, cung cấp dá»ch vụ phát sóng trá»±c tiếp các tráºn Äấu hấp dẫn, cùng nhiá»u tÃnh nÄng ná»i báºt khác nhau. Nếu bạn Äang tìm kiếm má»t trang web uy tÃn Äá» theo dõi các giải Äấu lá»n, XoilacTV chÃnh là lá»±a chá»n hà ng Äầu.</p>
<h2 class="wp-block-heading" id="tong-quan-ve-kenh-xem-bong-da-truc-tiep-xoilac-tv">Tá»ng quan vá» kênh xem bóng Äá trá»±c tiếp Xoilac TV</h2>
<p>Xoilac là má»t trong những trang truyá»n hình trá»±c tiếp các giải Äấu bóng Äá ÄÆ°á»£c nhiá»u thà nh viên yêu thÃch nhất thá»i gian qua. ÄÆ¡n vá» trá» thà nh Äá»a chá» uy tÃn trên thá» trưá»ng, thu hút sá» lượng lá»n ngưá»i theo dõi.</p>
<h3 class="wp-block-heading" id="lich-su-hinh-thanh">Lá»ch sá» hình thà nh trang web trá»±c tiếp bóng Äá uy tÃn hà ng Äầu</h3>
<p>Xôi Lạc TV ra Äá»i vá»i sứ má»nh mang Äến cho ngưá»i hâm má» bóng Äá má»t ná»n tảng xem trá»±c tiếp chất lượng, tiá»n lợi và miá»
n phà hiá»u quả nhất. Ban Äầu, trang web chá» phát sóng má»t sá» giải Äấu lá»n ÄÆ°á»£c nhiá»u ngưá»i biết Äến như Ngoại hạng Anh, La Liga, Serie A nhưng Äã nhanh chóng má» rá»ng phạm vi, bao phá»§ hầu hết các giải quá»c tế.</p>
<p>Trải qua nhiá»u nÄm phát triá»n, ÄÆ¡n vá» Äã không ngừng cải thiá»n chất lượng dá»ch vụ, tá»i ưu ÄÆ°á»ng truyá»n và bá» sung nhiá»u tÃnh nÄng hữu Ãch thêm cho thà nh viên. Sá»± Äầu tư cùng tâm huyết cá»§a Äá»i ngÅ© Äã giúp trang web trá» thà nh má»t trong những ná»n tảng xem bóng Äá trá»±c tuyến hà ng Äầu hiá»n nay.</p>
<p>Xoi Lac TV ngà y cà ng thu hút Äông Äảo ngưá»i hâm má», khẳng Äá»nh vá» thế trong lÄ©nh vá»±c phát sóng <a href="/"><strong>trá»±c tiếp bóng Äá</strong></a> trên thá» trưá»ng. Lá»ch sá» hình thà nh trang web chÃnh là minh chứng cho sá»± ná» lá»±c không ngừng cá»§a Äá»i ngÅ© sáng láºp, vì váºy bạn có thá» hoà n toà n yên tâm khi trải nghiá»m tại Äây.</p>
<figure class="wp-block-image"><img decoding="async" src="https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/gioi-thieu-xoilac-tv.jpg" alt=""/></figure>
<p>Lá»ch sá» hình thà nh trang web Xoilac TV ná»i báºt</p>
<h3 class="wp-block-heading" id="tam-nhin-phat-trien">Tầm nhìn phát triá»n trong tương lai cá»§a trang web</h3>
<p>Không chá» dừng lại á» viá»c phát sóng các tráºn Äấu bóng Äá như hiá»n tại, XoilacTV Äặt ra tầm nhìn phát triá»n mạnh mẽ hÆ¡n trong tương lai. Trang web hưá»ng Äến viá»c trá» thà nh ná»n tảng phát trá»±c tiếp thá» thao hà ng Äầu trên thá» trưá»ng, nhanh chóng má» rá»ng phạm vi ra nhiá»u bá» môn khác.</p>
<p>Ngoà i ra, ÄÆ¡n vá» cÅ©ng táºp trung nâng cao trải nghiá»m ngưá»i dùng thông qua viá»c cải tiến công nghá» truyá»n phát, áp dụng các phần má»m AI và o phân tÃch tráºn Äấu và nâng cấp giao diá»n thân thiá»n hÆ¡n. Äây cÅ©ng là má»t cách Äá» há»i viên có thá»i gian giải trà trá»n vẹn tại Äó.</p>
<h2 class="wp-block-heading" id="cac-uu-diem-cua-xoilac-tv">Các ưu Äiá»m cuá»n hút cá»§a trang trá»±c tiếp bóng Äá Xoilac TV</h2>
<p>Kênh trá»±c tiếp bóng Äá <a href="/"><strong>Xoilac TV</strong></a> hiá»n Äang ÄÆ°á»£c nhiá»u thà nh viên yêu thÃch và trải nghiá»m tham gia má»i ngà y. Hãy cùng Äiá»m qua các ưu Äiá»m thú vá» mà bạn có thá» táºn hưá»ng.</p>
<h3 class="wp-block-heading" id="phat-song-da-dang">Phát sóng Äa dạng các giải Äấu</h3>
<p>Má»t trong những yếu tá» khiến XoilacTV trá» nên Äặc biá»t trên thá» trưá»ng chÃnh là khả nÄng phát sóng Äa dạng các giải Äấu. Từ các giải Äấu hà ng Äầu thế giá»i Äến các giải thuá»c khu vá»±c, ngưá»i xem Äá»u có thá» dá»
dà ng theo dõi ngay trên ná»n tảng nà y.</p>
<p>Ngoà i bóng Äá, ÄÆ¡n vá» còn hưá»ng Äến viá»c phát sóng nhiá»u môn thá» thao khác, giúp Äa dạng hóa trải nghiá»m cho ngưá»i dùng khi tham gia. Viá»c cáºp nháºt Äầy Äá»§ các giải Äấu lá»n nhá» giúp ÄÆ¡n vá» trá» thà nh má»t ná»n tảng truc tiep bong da không thá» bá» qua.</p>
<p>Nhá» và o sá»± phong phú vá» ná»i dung, ÄÆ¡n vá» luôn Äáp ứng má»i nhu cầu cá»§a ngưá»i hâm má» bóng Äá trên toà n thế giá»i. Äây chÃnh là Äiá»m mạnh ná»i báºt nhất thu hút Äông Äảo ngưá»i xem.</p>
<figure class="wp-block-image"><img decoding="async" src="https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/da-dang-giai-dau.jpg" alt=""/></figure>
<p>Phát sóng Äa dạng nhiá»u giải Äấu lá»n hà ng Äầu quá»c tế</p>
<h3 class="wp-block-heading" id="duong-truyen-muot-ma">Äảm bảo ÄÆ°á»ng truyá»n mượt mà khi xem bóng Äá</h3>
<p>Không gì khó chá»u hÆ¡n khi Äang xem bóng Äá mà gặp tình trạng giáºt lag, Äiá»u nà y khiến thà nh viên cảm thấy nhà m chán. XoilacTV hiá»u rõ Äiá»u nà y và Äã áp dụng công nghá» ÄÆ°á»ng truyá»n tiên tiến, Äảm bảo internet luôn á»n Äá»nh và mượt mà ngay cả khi sá» lượng ngưá»i truy cáºp lá»n.</p>
<p>Ngoà i ra, trang web còn cho phép ngưá»i dùng lá»±a chá»n nhiá»u chất lượng video khác nhau nhằm Äảm bảo phù hợp vá»i từng loại ÄÆ°á»ng truyá»n internet trên thiết bá» cá»§a bạn. Äiá»u nà y giúp khán giả có thá» xem bóng Äá má»t cách trá»n vẹn nhất.</p>
<h3 class="wp-block-heading" id="am-thanh-hinh-anh-sac-net">Ãm thanh và hình ảnh sắc nét, sá»ng Äá»ng</h3>
<p>Chất lượng âm thanh và hình ảnh là yếu tá» vô cùng quan trá»ng quyết Äá»nh trải nghiá»m xem bóng Äá cá»§a ngưá»i dùng. Hiá»n nay, XoilacTV Äang sá» dụng công nghá» mã hóa video hiá»n Äại, từ Äó giúp các tráºn Äấu có hình ảnh sắc nét, âm thanh trung thá»±c, tạo cảm giác sá»ng Äá»ng như Äang theo dõi trá»±c tiếp trên sân váºn Äá»ng.</p>
<p>Từ Äá» phân giải HD cho Äến Full HD và 4K, trang web Xoilac TV luôn tá»i ưu hóa Äá» Äem lại hình ảnh chất lượng nhất cho há»i viên. Nhá» váºy, ngưá»i xem có thá» táºn hưá»ng từng pha bóng má»t cách rõ nét và chân thá»±c nhất, giúp bạn hiá»u rõ hÆ¡n vá» lượt Äá»i Äầu ngà y hôm Äó.</p>
<figure class="wp-block-image"><img decoding="async" src="https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/truc-tiep-bong-da-chat-luong-cao.jpg" alt=""/></figure>
<p>Hình ảnh và âm thanh trải nghiá»m thú vá» nhất</p>
<h3 class="wp-block-heading" id="binh-luan-vien-chuyen-nghiep">Trải nghiá»m xem bóng cùng các bình luáºn viên chuyên nghiá»p</h3>
<p>Không chá» có hình ảnh sắc nét và âm thanh sá»ng Äá»ng, Xoilac TV còn thu hút ngưá»i xem nhá» Äá»i ngÅ© bình luáºn viên chuyên nghiá»p. Những BLV tại Äây Äá»u là ngưá»i già u kinh nghiá»m, từ Äó sẽ giúp tráºn Äấu trá» nên hấp dẫn hÆ¡n vá»i các phân tÃch chiến thuáºt và nháºn Äá»nh chuyên sâu.</p>
<p>Các bình luáºn viên cá»§a Xoilac TV không chá» cung cấp thông tin vá» tráºn Äấu mà còn tạo không khà sôi Äá»ng, Äiá»u nà y giúp ngưá»i xem cảm thấy hà o hứng hÆ¡n tại từng lượt Äá»i Äầu gay cấn. Äây là Äiá»m cá»ng lá»n giúp trang web ngà y cà ng thu hút nhiá»u ngưá»i hâm má» theo dõi.</p>
<h3 class="wp-block-heading" id="nhan-dinh-soi-keo">Nắm bắt các bà i nháºn Äá»nh phân tÃch soi kèo chuẩn</h3>
<p>Bên cạnh viá»c phát sóng trá»±c tiếp, Xoilac TV hiá»n còn cung cấp các bà i phân tÃch, nháºn Äá»nh kèo từ chuyên gia hà ng Äầu. Những thông tin nà y là cÆ¡ sá» quan trá»ng giúp ngưá»i hâm má» có cái nhìn sâu sắc hÆ¡n vá» tráºn Äấu và có cÆ¡ sá» Äá» dá»± Äoán kết quả chÃnh xác hÆ¡n.</p>
<p>Má»i bà i soi kèo tại trang web Äá»u ÄÆ°á»£c cáºp nháºt dá»±a trên dữ liá»u thá»±c tế, từ Äó giúp ngưá»i chÆ¡i nắm bắt thông tin má»t cách chÃnh xác và ká»p thá»i. Äây là Äiá»m mạnh giúp Xoilac TV trá» thà nh ná»n tảng uy tÃn trong lÄ©nh vá»±c nháºn Äá»nh bóng Äá cho má»i ngưá»i tham khảo.</p>
<figure class="wp-block-image"><img decoding="async" src="https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/blv-chuyen-nghiep.jpg" alt=""/></figure>
<p>Cung cấp bà i nháºn Äá»nh soi kèo tá»ng hợp</p>
<h2 class="wp-block-heading" id="cac-tinh-nang-cua-xoilac-tv">Äiá»m danh các tÃnh nÄng cá»§a trang trá»±c tiếp bóng Äá Xoilac TV</h2>
<p>Äây là Äá»a chá» uy tÃn hà ng Äầu trên thá» trưá»ng cung cấp cho há»i viên dá»ch vụ xem bóng Äá trá»±c tiếp ngay tại nhà mà không tá»n nhiá»u công sức. Hãy cùng tìm hiá»u má»t và i tÃnh nÄng phá» biến và ná»i báºt trên trang.</p>
<h3 class="wp-block-heading" id="truc-tiep-cac-giai-dau">Trá»±c tiếp các giải bóng chuyên nghiá»p hà ng Äầu</h3>
<p>Xoilac TV luôn mang Äến cho ngưá»i hâm má» trải nghiá»m xem trá»±c tiếp bóng Äá chất lượng cao vá»i các giải Äấu chuyên nghiá»p hà ng Äầu thế giá»i. Tại Äây, bạn có thá» theo dõi từ những giải Äấu như Ngoại hạng Anh, La Liga, Serie A, Bundesliga, Champions League Äến các giải Äấu khu vá»±c như AFF Cup, V-League hay Asian Cup.</p>
<p>Há» thá»ng server mạnh mẽ cá»§a Xoilac TV cÅ©ng Äảm bảo hình ảnh rõ nét, tá»c Äá» ÄÆ°á»ng truyá»n mượt mà , Äiá»u nà y giúp mang Äến trải nghiá»m xem bóng tá»i ưu. Vá»i kho ná»i dung phong phú và cáºp nháºt liên tục, ÄÆ¡n vá» là Äiá»m Äến lý tưá»ng cho má»i tÃn Äá» yêu thÃch bá» môn bóng Äá.</p>
<figure class="wp-block-image"><img decoding="async" src="https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/truc-tiep-giai-dau-hang-dau.jpg" alt=""/></figure>
<p>Truyá»n hình trá»±c tiếp các giải Äấu lá»n nhất</p>
<h3 class="wp-block-heading" id="cap-nhat-lich-thi-dau">Cáºp nháºt lá»ch thi Äấu liên tục từng thá»i Äiá»m cho má»i giải</h3>
<p>Äá» giúp ngưá»i hâm má» dá»
dà ng theo dõi các tráºn Äấu yêu thÃch, trang web Xoilac TV hiá»n Äang cung cấp bảng lá»ch thi Äấu chi tiết cho từng giải. Má»i thông tin quan trá»ng như thá»i gian, Äá»a Äiá»m, Äá»i hình ra sân Äá»u ÄÆ°á»£c cáºp nháºt chÃnh xác và ká»p thá»i giúp bạn không bá» lỡ.</p>
<p>Không chá» váºy, há» thá»ng lá»ch thi Äấu cá»§a trang web còn có tÃnh nÄng nhắc nhá» thông minh cho ngưá»i dùng không bá» lỡ các tráºn hấp dẫn. Bạn có thá» Äặt lá»ch Äá» nháºn thông báo vá» thiết bá» cá»§a mình trưá»c má»i tráºn Äấu quan trá»ng, từ Äó giúp bản thân không bá» bá» qua bất kỳ tráºn cầu nà o.</p>
<h3 class="wp-block-heading" id="bang-xep-hang">Cung cấp bảng xếp hạng các Äá»i bóng trong từng giải</h3>
<p>Bên cạnh viá»c theo dõi trá»±c tiếp các tráºn Äấu, ngưá»i hâm má» còn có thá» cáºp nháºt bảng xếp hạng các Äá»i bóng ngay trên trang web Xoilac TV. Tất cả các thông tin như Äiá»m sá», sá» tráºn thắng, hòa, thua, hiá»u sá» bà n thắng bại cuá»i cùng trong tráºn Äá»u ÄÆ°á»£c cáºp nháºt liên tục theo thá»i gian thá»±c.</p>
<p>Äiá»u nà y giúp thà nh viên có thá» nắm bắt phong Äá» cá»§a từng Äá»i bóng má»t cách rõ rà ng, từ Äó có cái nhìn tá»ng quan hÆ¡n vá» cục diá»n giải Äấu. Bảng xếp hạng tại trang web cÅ©ng ÄÆ°á»£c thiết kế khoa há»c, Äiá»u nà y giúp ngưá»i dùng dá»
dà ng theo dõi chá» sá» quan trá»ng trong giải cá»§a Äá»i bóng mình yêu thÃch.</p>
<p>Viá»c cung cấp bảng xếp hạng các Äá»i bóng trong từng giải không chá» giúp ngưá»i hâm má» cáºp nháºt thông tin nhanh chóng mà còn giúp há» phân tÃch sâu hÆ¡n vá» diá»
n biến giải Äấu. ChÃnh vì thế, Äây chắc chắn sẽ là tÃnh nÄng mà thà nh viên không nên bá» qua.</p>
<h3 class="wp-block-heading" id="nhan-dinh-ket-qua">Nháºn Äá»nh kết quả từ các chuyên gia hà ng Äầu</h3>
<p>Má»t trong những Äiá»m hấp dẫn nhất cá»§a trang web Xoilac TV là chuyên mục nháºn Äá»nh kết quả tráºn Äấu. ÄÆ¡n vá» hiá»n Äang quy tụ nhiá»u chuyên gia bóng Äá hà ng Äầu, cung cấp những phân tÃch chuyên sâu, Äánh giá phong Äá» cá»§a từng Äá»i bóng trưá»c má»i tráºn Äấu Äá» dá»± Äoán vá» tá»· sá» cuá»i cùng.</p>
<p>Các bà i nháºn Äá»nh nà y không chá» dá»±a trên thá»ng kê sá» liá»u mà còn ÄÆ°á»£c cáºp nháºt từ các nguá»n tin uy tÃn, từ Äó giúp ngưá»i hâm má» có cái nhìn chÃnh xác hÆ¡n vá» thế tráºn. Äiá»u nà y Äặc biá»t hữu Ãch Äá»i vá»i những ai yêu thÃch hình thức cá cược trá»±c tiếp, giúp há» có thêm cÆ¡ sá» Äá» ÄÆ°a ra quyết Äá»nh Äúng Äắn nhanh chóng.</p>
<figure class="wp-block-image"><img decoding="async" src="https://www.lowertownbluesfestival.com/wp-content/uploads/2025/05/nhan-dinh-tu-chuyen-gia.jpg" alt=""/></figure>
<p>Nháºn Äá»nh kết quả từ chuyên gia chuẩn xác nhất</p>
<h3 class="wp-block-heading" id="tin-tuc-bong-da">Cung cấp các tin tức nóng há»i trong bá» môn bóng Äá</h3>
<p>Không chá» là má»t trang web phát sóng trá»±c tiếp, Xoilac TV còn là nÆ¡i cáºp nháºt nhanh chóng các tin tức bóng Äá nóng há»i giúp bạn có cái nhìn tá»ng quan hÆ¡n. Má»i diá»
n biến quan trá»ng như chuyá»n nhượng cầu thá»§, thay Äá»i huấn luyá»n viên, tình hình chấn thương Äá»u ÄÆ°á»£c ÄÄng tải ká»p thá»i trên trang.</p>
<p>Há» thá»ng tin tức cá»§a Xoilac TV luôn ÄÆ°á»£c cáºp nháºt liên tục theo từng giá», giúp ngưá»i hâm má» luôn nắm bắt ÄÆ°á»£c những thông tin má»i nhất trong là ng bóng Äá thế giá»i. Các bà i viết Äá»u Äảm bảo trình bà y mạch lạc, dá»
hiá»u giúp bạn nắm bắt ná»i dung nhanh chóng.</p>
<h2 class="wp-block-heading" id="ket-luan">Kết luáºn</h2>
<p>Vá»i hà ng loạt ưu Äiá»m vượt trá»i, Xoilac TV Äang khẳng Äá»nh vá» thế là má»t trong những ná»n tảng xem bóng Äá trá»±c tuyến hà ng Äầu thá» trưá»ng. Nếu bạn là ngưá»i yêu bóng Äá và muá»n táºn hưá»ng những tráºn cầu Äá»nh cao, hãy theo dõi ngay tại Äây Äá» có trải nghiá»m thú vá» trá»n vẹn nhất.</p>
</div>
</div>
</div>
</div>
</div>
</section>
</main>
<!-- Footer -->
<!-- <footer class="footer">
<div class="container">
<div class="footer__content">
<p style="font-size: 14px">
Bản quyá»n bá»i
<a href="#"><span class="text-primary">CakhiaTV</span></a> - All
rights reserved
</p>
</div>
</div>
</footer> -->
<footer style="background-color: #111; color: #fff; text-align: center; padding: 30px 15px;">
<p class="footer-descript">
<a href="/"><strong style="color: #0CCC4C;">Xoilac</strong></a> TV trá»±c tiếp bóng Äá hôm nay miá»
n phÃ, xem bóng Äá trá»±c tuyến Xôi Lạc TV tá»c Äá» cao cùng Äá»i ngÅ© BLV XoilacTV chuyên nghiá»p á» các giải Ngoại Hạng Anh, La Liga, Euro, World Cup, Cúp C1 Châu Ãu,... cùng nhiá»u tÃnh nÄng hữu Ãch như lá»ch thi Äấu, bảng xếp hạng, kết quả bóng Äá, nháºn Äá»nh.
</p>
<div class="footer-logo">
<img src="/wp-content/uploads/2025/05/xoilactv_logo.png" alt="Xoilac TV" style="vertical-align: middle; height: 120px;">
</div>
<div id="aj9X2zKQ" style="text-align:center"></div>
<nav style="margin: 20px 0;">
<a href="/gioi-thieu" class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">Vá» CHÃNG TÃI</a>
<a href="/chinh-sach-bao-mat"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">CHÃNH SÃCH</a>
<a href="/dieu-khoan-su-dung"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">ÄIá»U KHOẢN</a>
<a href="/lien-he"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">LIÃN Há»</a>
<a href="/ban-quyen"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">BẢN QUYá»N</a>
<a href="/mien-tru-trach-nhiem"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">MIá»N TRỪ TRÃCH NHIá»M</a>
<a href="/tuyen-dung"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">TUYá»N DỤNG</a>
<a href="#"class="footer-nav-text" style="color: #0CCC4C; margin: 0 10px; font-weight: bold;">SITEMAP</a>
</nav>
<p class="footer-text">Doanh nghiá»p: Xoilac TV</p>
<p class="footer-text">Chá»u trách nhiá»m ná»i dung: <a href="/author/tranngochung"><span style="color: #0CCC4C;">Trần Ngá»c Hùng</span></a></p>
<p class="footer-text">Sá» Äiá»n thoại: 08162483766</p>
<p class="footer-text">Email: [email protected]</p>
<p class="footer-text">Äá»a chá»: <a href="https://maps.app.goo.gl/d1mj5ENBGZDCcvH19" target="_blank" rel="nofollow"><span style="color: #0CCC4C;">6A P. Quán Sứ, Hà ng Bông, Hoà n Kiếm, Hà Ná»i, Viá»t Nam, 100000</span></a></p>
<p class="footer-text">Hoạt Äá»ng: 00:00â23:59 (hằng ngà y)</p>
<p style="margin-top: 15px;">Hashtag: #xoilac #xoilactv #tructiepbongdaxoilac #xembongdatructuyen</p>
<div style="margin-top: 15px;">
<a href="#"><img src="/wp-content/uploads/2025/04/icon-facebook.webp" alt="Facebook" style="width: 24px; margin: 0 5px;"></a>
<a href="https://x.com/xoilacphongkham" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/twitter_x-logo-freelogovectors.net_.png" alt="Twitter" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.twitch.tv/xoilacphongkham/about" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/pngimg.com-twitch_PNG28.png" alt="Twitch" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.youtube.com/@xoilacphongkham" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/Youtube_logo.png" alt="Youtube" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.reddit.com/user/xoilacphongkham/" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/reddit-logo-1.png" alt="Reddit" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.pinterest.com/xoilacphongkham" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/pngimg.com-pinterest_PNG63.png" alt="Pinterest" style="width: 24px; margin: 0 5px;"></a>
<a href="https://www.tumblr.com/xoilacphongkham" rel="nofollow" target="_blank"><img src="/wp-content/uploads/2025/04/free-tumblr-logo-icon-2434-thumb.png" alt="Tumblr" style="width: 24px; margin: 0 5px;"></a>
</div>
</footer>
<button onclick="scrollToTop()" id="scrollTopBtn" title="Go to top">
<svg viewBox="0 0 24 24">
<path
d="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z"
></path>
</svg>
</button>
<script src="https://cdn.xoilaclivettbdad.tv/wp-content/themes/cakhiatv/assets/js/main.js"></script>
</body>
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('/sw.js')
.then(function (reg) { /*console.log('[SW] â
Registered, scope:', reg.scope);*/ })
.catch(function (err) { /*console.warn('[SW] Registration failed:', err);*/ });
});
}
</script>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/cakhiatv\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script src="https://xoilaclivettbdad.tv/js/websocket-client.js"></script>
<style>
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.loading-spinner {
animation: spin 1s linear infinite;
}
#match-list {
position: relative;
}
#match-list>div[style*="display: flex"] {
width: 100% !important;
max-width: 100% !important;
}
</style>
<script>
// âââ LocalStorage Cache (giá»ng colatv40.live) ââââââââââââââââ
const LS_MATCHES_KEY = 'colatv_matches_v1';
const LS_MATCHES_TTL = 10 * 60 * 1000; // 10 phút
function loadMatchesFromCache() {
try {
const raw = localStorage.getItem(LS_MATCHES_KEY);
if (!raw) return null;
const { data, ts } = JSON.parse(raw);
if (!data || !Array.isArray(data) || data.length === 0) return null;
if (Date.now() - ts > LS_MATCHES_TTL) return null;
return data;
} catch { return null; }
}
function saveMatchesToCache(matches) {
try {
if (!matches || matches.length === 0) return;
localStorage.setItem(LS_MATCHES_KEY, JSON.stringify({ data: matches, ts: Date.now() }));
} catch { /* localStorage full, bá» qua */ }
}
// âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
// Tá»i ưu: Cache DOM selectors Äá» tránh query lại
const filterCountCache = {
countAllType: null,
countAll: null,
countElements: {},
noBlvElement: null,
liveElement: null,
hotElement: null,
todayElement: null,
tomorrowElement: null,
initialized: false
};
function initFilterCountCache() {
if (filterCountCache.initialized) return;
filterCountCache.countAllType = document.getElementById('count-all-type');
filterCountCache.countAll = document.getElementById('count-all');
filterCountCache.noBlvElement = document.getElementById('noblv-live');
filterCountCache.liveElement = document.getElementById('count-live');
filterCountCache.hotElement = document.getElementById('count-hot');
filterCountCache.todayElement = document.getElementById('count-today');
filterCountCache.tomorrowElement = document.getElementById('count-tomorrow');
['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
filterCountCache.countElements[sport] = document.getElementById(`count-${sport}`);
});
filterCountCache.initialized = true;
}
// Hà m Äếm sá» lượng tráºn Äấu theo bá» lá»c - Tá»i ưu vá»i cached selectors
function updateFilterCounts(visibleMatchCards, allMatchCards) {
initFilterCountCache();
if (filterCountCache.countAllType) {
filterCountCache.countAllType.textContent = allMatchCards.length;
}
if (filterCountCache.countAll) {
filterCountCache.countAll.textContent = visibleMatchCards.length;
}
['football', 'basketball', 'tennis', 'volleyball'].forEach(sport => {
const countElement = filterCountCache.countElements[sport];
if (countElement) {
const count = Array.from(allMatchCards).filter(card => card.dataset.sport === sport).length;
countElement.textContent = count;
}
});
if (filterCountCache.noBlvElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
filterCountCache.noBlvElement.textContent = noBlvCount;
}
if (filterCountCache.liveElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
const liveCount = Array.from(visibleMatchCards).filter(card => card.dataset.live === 'true').length - noBlvCount;
filterCountCache.liveElement.textContent = liveCount;
}
if (filterCountCache.hotElement) {
const noBlvCount = Array.from(visibleMatchCards).filter(card => card.dataset.blv === 'false').length;
const hotCount = Array.from(visibleMatchCards).filter(card => card.dataset.hot === 'true').length - noBlvCount;
filterCountCache.hotElement.textContent = hotCount;
}
const today = new Date().toISOString().split('T')[0];
const tomorrow = new Date(Date.now() + 86400000).toISOString().split('T')[0];
if (filterCountCache.todayElement) {
const todayCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === today).length;
filterCountCache.todayElement.textContent = todayCount;
}
if (filterCountCache.tomorrowElement) {
const tomorrowCount = Array.from(visibleMatchCards).filter(card => card.dataset.date === tomorrow).length;
filterCountCache.tomorrowElement.textContent = tomorrowCount;
}
}
// Hà m chuyá»n Äá»i ID môn thá» thao thà nh tên
function sportName(sportId) {
const sports = {
1: 'football',
2: 'basketball',
};
return sports[sportId] || 'unknown';
}
// Hà m xỠlý timestamp
function fixtime(timestamp) {
return isNaN(timestamp) ? new Date(timestamp).getTime() : timestamp;
}
// Hà m Äá»nh dạng ngà y giá»
function formatDate(timestamp, format) {
const date = new Date(timestamp * 1000);
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0');
const year = date.getFullYear();
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
if (format === 'd/m') return `${day}/${month}`;
if (format === 'Y-m-d') return `${year}-${month}-${day}`;
if (format === 'H:i') return `${hours}:${minutes}`;
return date;
}
// Hà m lấy domain API random Äá» tránh Cloudflare rate limit
function getApiDomain() {
const domains = ['api.gvapi.cc'];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
// Hà m lấy domain API random cho video-home (pinned-home)
function getVideoHomeApiDomain() {
const domains = ['video-home.gvapi.cc'];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
// Hà m hiá»n thá» loading
function showLoading() {
const matchList = getMatchList();
if (!matchList) return;
// Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung
matchList.innerHTML = `
<div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center; box-sizing: border-box;">
<div class="loading-spinner" style="display: block; width: 50px; height: 50px; border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; animation: spin 1s linear infinite; margin: 0 auto;"></div>
<p style="margin-top: 20px; color: #666; font-size: 16px; text-align: center; width: 100%;">Äang tải dữ liá»u...</p>
</div>
`;
}
// Hà m hiá»n thá» lá»i vá»i các button Äá» xuất
function showErrorWithSuggestions() {
const matchList = getMatchList();
if (!matchList) return;
const suggestionLinks = [
{ name: 'iotditr.com', url: 'https://iotditr.com' },
{ name: 'cntsiend.com', url: 'https://cntsiend.com' },
{ name: 'euwygrb.com', url: 'https://euwygrb.com' },
{ name: 'ppoemlg.com', url: 'https://ppoemlg.com' },
{ name: 'eyhtldu.com', url: 'https://eyhtldu.com' }
];
const buttonsHtml = suggestionLinks.map(link =>
`<a href="${link.url}" target="_blank" rel="nofollow" style="display: inline-block; margin: 8px; padding: 12px 24px; background-color: #3498db; color: white; text-decoration: none; border-radius: 5px; font-weight: bold; transition: background-color 0.3s; cursor: pointer;">${link.name}</a>`
).join('');
// Hiá»n thá» trá»±c tiếp trong match-list, thay thế toà n bá» ná»i dung
matchList.innerHTML = `
<div style="text-align: center; padding: 60px 20px; width: 100%; min-height: 400px; display: flex; flex-direction: column; justify-content: center; align-items: center;">
<div style="margin-bottom: 20px;">
<svg width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="#e74c3c" stroke-width="2" style="margin: 0 auto; display: block;">
<circle cx="12" cy="12" r="10"></circle>
<line x1="12" y1="8" x2="12" y2="12"></line>
<line x1="12" y1="16" x2="12.01" y2="16"></line>
</svg>
</div>
<h3 style="color: #e74c3c; margin-bottom: 15px; font-size: 24px; font-weight: bold;">Há» thá»ng gặp sá»± cá»</h3>
<p style="color: #666; margin-bottom: 30px; font-size: 16px; max-width: 500px;">Bạn có thá» chá»n kênh khác:</p>
<div style="display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; width: 100%; max-width: 800px;">
${buttonsHtml}
</div>
</div>
`;
}
// Hà m fetch vá»i timeout
function fetchWithTimeout(url, timeout = 10000) {
return Promise.race([
fetch(url),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Request timeout')), timeout)
)
]);
}
// Hà m lấy dữ liá»u tráºn Äấu từ API và render
async function refreshMatches() {
const matchList = getMatchList();
if (!matchList) {
console.error('Không tìm thấy phần tỠmatch-list');
return;
}
// Chá» hiá»n thá» loading nếu chưa có data từ cache
if (!matchList.querySelector('.match-card')) {
showLoading();
}
try {
const apiBase = getApiDomain();
const response = await fetchWithTimeout(apiBase + '/api/matches?t=' + new Date().getTime(), 10000);
if (!response.ok) {
throw new Error('Lá»i khi lấy dữ liá»u API: ' + response.status);
}
const datas = await response.json();
if (!datas.data || typeof datas.data !== 'object') {
throw new Error('Cấu trúc dữ liá»u API không hợp lá»');
}
const newMatches = [];
const matchesByGroup = {}; // Nhóm matches theo competitionName
for (const [key, data] of Object.entries(datas.data)) {
// Bảo vỠnếu anchorAppointmentVoList không phải array
const anchorList = Array.isArray(data.anchorAppointmentVoList) ? data.anchorAppointmentVoList : [];
//if (!anchorList.length) continue;
// Bá» các tráºn "Live streaming"
if (anchorList[0]?.nickName === 'Live streaming') continue;
// Bảo vá» tá» sá»
const homeScoreArr = Array.isArray(data.homeScore) ? data.homeScore : [];
const awayScoreArr = Array.isArray(data.awayScore) ? data.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
// Nếu match có house_id khác null, thêm ?houseId=... và o slug
let slug = key;
if (data.house_id && data.house_id !== null) {
slug = `${key}?houseId=${data.house_id}`;
}
const competitionName = data.competitionName || 'NBA';
const matchData = {
id: 2,
slug: slug,
sport: sportName(data.sportId),
live: data.matchStatus === 2,
hot: true,
blv: anchorList[0]?.nickName !== 'Live streaming',
date: formatDate(fixtime(data.matchTime), 'd/m'),
datesearch: formatDate(fixtime(data.matchTime), 'Y-m-d'),
hour: formatDate(fixtime(data.matchTime), 'H:i'),
competitionName: competitionName,
teams: [
data.homeTeamName || 'Team C',
data.awayTeamName || 'Team D'
],
score: `${homeScore}:${awayScore}`,
videoUrl: data.videoUrl || 'https://live2.example.com',
animationUrl: data.animationUrl || 'https://animation.example.com',
data: data
};
newMatches.push(matchData);
// Nhóm matches theo competitionName
if (!matchesByGroup[competitionName]) {
matchesByGroup[competitionName] = [];
}
matchesByGroup[competitionName].push(matchData);
}
// Gá»i hà m render vá»i danh sách tráºn Äấu má»i
renderAllMatches(newMatches);
filterMatches('parent', newMatches);
saveMatchesToCache(newMatches); //
} catch (error) {
console.error('Lá»i khi là m má»i tráºn Äấu:', error);
// Äã loại bá» showErrorWithSuggestions() Äá» không ghi Äè giao diá»n SSR nếu API thất bại á» lần gá»i Äầu tiên.
// Há» thá»ng sẽ âm thầm giữ nguyên giao diá»n SSR và Äợi Socket cáºp nháºt.
}
}
function createMatchCard(match) {
// Bảo vá» dữ liá»u, tránh crash nếu cache cÅ© thiếu data
if (!match || !match.data) return '';
// Bảo vỠanchorAppointmentVoList
const anchorList = Array.isArray(match.data.anchorAppointmentVoList)
? match.data.anchorAppointmentVoList
: [];
// XỠlý slug an toà n
const slugStr = match.slug || '';
const baseSlug = slugStr.includes('?') ? slugStr.split('?')[0] : slugStr;
const nicknames = anchorList.map(item => {
const itemHouseId = item.houseId || '';
if (itemHouseId !== '') {
const separator = baseSlug.includes('?') ? '&' : '?';
return `<a href="https://xoilaclivettbdad.tv/truc-tiep/${baseSlug}${separator}houseId=${itemHouseId}" rel="nofollow">${item.nickName}</a>`;
} else {
return `<a href="https://xoilaclivettbdad.tv/truc-tiep/${slugStr}" rel="nofollow">${item.nickName}</a>`;
}
});
const nicknameString = nicknames.join(' | ');
// Bảo vá» tá» sá» (dùng lại match.score nếu muá»n)
const homeScoreArr = Array.isArray(match.data.homeScore) ? match.data.homeScore : [];
const awayScoreArr = Array.isArray(match.data.awayScore) ? match.data.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
return `
<div class="match-card" data-id="${match.id}" data-sport="${match.sport}" data-live="${match.live}" data-blv="${match.blv}" data-hot="${match.hot}" data-date="${match.datesearch}">
<div class="match-card__body">
<a href="https://xoilaclivettbdad.tv/truc-tiep/${match.slug}" class="link-match" rel="nofollow"></a>
<div class="match-card__header">
<div class="match-card__league">
<span>${match.data.competitionName}</span>
</div>
<div class="match-card__status">
${match.data.matchStatus == 1
? '<div class="match-card__status text-warning text-uppercase">CHƯA BẮT ÄẦU</div>'
: match.data.matchStatus == 2
? '<div class="match-card__status streaming">ÄANG TRá»°C TIẾP</div>'
: match.data.matchStatus == 3
? '<span class="btn btn--warning text-uppercase">Tạm ngừng phát sóng</span>'
: match.data.matchStatus == 4
? '<span class="btn btn--danger text-uppercase">Cấm phát sóng vÄ©nh viá»
n</span>'
: '<span class="btn btn--secondary text-uppercase">Không xác Äá»nh</span>'
}
</div>
<div class="match-card__time"><span class="match-time">${match.hour} - ${match.date}</span></div>
</div>
<div class="match-card__teams">
<div class="team home">
<img src="${match.data.homeTeamLogo}" alt="${match.data.homeTeamName}" class="team__logo">
<span class="team__name">${match.data.homeTeamName}</span>
</div>
<div class="match-card__score">${homeScore} - ${awayScore}</div>
<div class="team">
<img src="${match.data.awayTeamLogo}" alt="${match.data.awayTeamName}" class="team__logo">
<span class="team__name">${match.data.awayTeamName}</span>
</div>
</div>
<div class="match-card__info">
<div class="match-card__stats">
<div class="match-card__stats-content">
${nicknameString}
</div>
</div>
<div class="match-card__odds">
<a href="https://xoilaclivettbdad.tv/truc-tiep/${match.slug}" class="btn btn--primary" rel="nofollow">
<span>XEM NGAY</span>
</a>
</div>
</div>
</div>
</div>
`;
}
// Khá»i tạo bá» lá»c
let currentFilters = {
sport: 'all',
live: false,
blv: false,
hot: false,
commentator: false,
date: 'all',
league: 'all'
};
// Tá»i ưu: Preload video metadata Äá» tÄng tá»c Äá» load khi click và o match
const videoPreloadCache = new Map(); // Cache preloaded videos
function preloadVideoMetadata(videoUrl) {
if (!videoUrl || videoPreloadCache.has(videoUrl)) {
return; // Äã preload rá»i
}
// Mark as preloading
videoPreloadCache.set(videoUrl, { status: 'loading', timestamp: Date.now() });
// Preload bằng cách tạo video element và load metadata
const video = document.createElement('video');
video.preload = 'metadata'; // ChỠload metadata, không load toà n bỠvideo
video.muted = true;
video.playsInline = true;
video.style.display = 'none';
video.addEventListener('loadedmetadata', function () {
videoPreloadCache.set(videoUrl, { status: 'loaded', timestamp: Date.now() });
document.body.removeChild(video);
});
video.addEventListener('error', function () {
videoPreloadCache.set(videoUrl, { status: 'error', timestamp: Date.now() });
if (document.body.contains(video)) {
document.body.removeChild(video);
}
});
video.src = videoUrl;
document.body.appendChild(video);
// Cleanup cache sau 5 phút
setTimeout(() => {
videoPreloadCache.delete(videoUrl);
}, 5 * 60 * 1000);
}
// Tá»i ưu: Cache match-list selector
let matchListCache = null;
function getMatchList() {
if (!matchListCache) {
matchListCache = document.getElementById('match-list');
}
return matchListCache;
}
// Hà m render toà n bá» tráºn Äấu
function renderAllMatches(matches) {
const matchList = getMatchList();
if (!matchList) {
console.error('Không tìm thấy phần tỠmatch-list');
return;
}
// Xóa danh sách cũ
matchList.innerHTML = '';
// Render danh sách má»i
matches.forEach(match => {
if (!match || !match.data) return; // Bá» qua match lá»i
const cardHTML = createMatchCard(match);
if (!cardHTML) return; // Bá» qua nếu không tạo ÄÆ°á»£c thẻ
const tempDiv = document.createElement('div');
tempDiv.innerHTML = cardHTML.trim();
const cardElement = tempDiv.firstChild;
if (!cardElement) return;
// Ẩn các tráºn không có bình luáºn viên
/*if (cardElement.getAttribute('data-blv') === 'false') {
cardElement.classList.add('d-none');
}*/
// Tá»i ưu: Preload video metadata khi hover và o match card
if (match.data && match.data.videoUrl) {
let preloadTimeout = null;
cardElement.addEventListener('mouseenter', function () {
// Debounce: chá» preload sau 500ms hover
preloadTimeout = setTimeout(() => {
preloadVideoMetadata(match.data.videoUrl);
}, 500);
});
cardElement.addEventListener('mouseleave', function () {
if (preloadTimeout) {
clearTimeout(preloadTimeout);
preloadTimeout = null;
}
});
}
matchList.appendChild(cardElement);
});
// Cáºp nháºt bá» Äếm
const visibleMatches = document.querySelectorAll('.match-card:not(.d-none)');
updateFilterCounts(visibleMatches, document.querySelectorAll('.match-card'));
}
// Hà m lá»c tráºn Äấu
function filterMatches(type, matches) {
const allCards = document.querySelectorAll('.match-card');
// Lá»c theo môn thá» thao
const sportFiltered = Array.from(allCards).filter(card => {
const sport = card.dataset.sport;
return currentFilters.sport === 'all' || sport === currentFilters.sport;
});
let finalFiltered = sportFiltered;
// Ãp dụng các bá» lá»c khác
if (currentFilters.live) {
finalFiltered = finalFiltered.filter(card => card.dataset.live === 'true' && card.dataset.blv === 'true');
} else if (currentFilters.blv) {
finalFiltered = finalFiltered.filter(card => card.dataset.blv === 'false');
} else if (currentFilters.hot) {
finalFiltered = finalFiltered.filter(card => card.dataset.hot === 'true' && card.dataset.blv === 'true');
} else if (currentFilters.date !== 'all') {
finalFiltered = finalFiltered.filter(card => card.dataset.date === currentFilters.date && card.dataset.blv === 'true');
}
// Hiá»n thá»/ẩn các thẻ
allCards.forEach(card => {
card.classList.toggle('d-none', !finalFiltered.includes(card));
});
// Cáºp nháºt bá» Äếm
if (type === 'parent') {
updateFilterCounts(sportFiltered, allCards);
} else {
updateFilterCounts(finalFiltered, allCards);
}
}
// Gắn sá»± kiá»n cho nút lá»c môn thá» thao
document.querySelectorAll('.sports-filter__button[data-sport]').forEach(button => {
button.addEventListener('click', () => {
currentFilters.sport = button.getAttribute('data-sport');
filterMatches('parent');
});
});
// Gắn sá»± kiá»n cho nút lá»c con
document.querySelectorAll('.sports-filter__button_child').forEach(btn => {
btn.addEventListener('click', function () {
const filterType = this.getAttribute('data-filter');
const value = this.getAttribute('data-value');
if (filterType === 'date') {
currentFilters.date = value;
currentFilters.live = false;
currentFilters.hot = false;
currentFilters.blv = false;
} else if (filterType === 'live') {
currentFilters.live = true;
currentFilters.date = 'all';
currentFilters.hot = false;
currentFilters.blv = false;
} else if (filterType === 'hot') {
currentFilters.hot = true;
currentFilters.date = 'all';
currentFilters.live = false;
currentFilters.blv = false;
} else if (filterType === 'child_all') {
currentFilters.live = false;
currentFilters.hot = false;
currentFilters.blv = false;
currentFilters.date = 'all';
}
document.querySelectorAll('.sports-filter__button_child').forEach(b => b.classList.remove('active'));
this.classList.add('active');
filterMatches('child');
});
});
// Gắn sá»± kiá»n cho toggle livescore
const liveToggle = document.getElementById('livescoreToggle');
if (liveToggle) {
liveToggle.addEventListener('change', () => {
currentFilters.live = liveToggle.checked;
filterMatches('parent');
});
}
// ===== WEBSOCKET INTEGRATION =====
let wsClient = null;
let matchesWebSocketConnected = false;
let fallbackPollingInterval = null;
// Function Äá» transform WebSocket data format
function transformWebSocketMatches(data) {
const newMatches = [];
for (const [key, matchData] of Object.entries(data)) {
// Logic tương tự như trong refreshMatches()
const anchorList = Array.isArray(matchData.anchorAppointmentVoList)
? matchData.anchorAppointmentVoList
: [];
if (anchorList[0]?.nickName === 'Live streaming') continue;
const homeScoreArr = Array.isArray(matchData.homeScore) ? matchData.homeScore : [];
const awayScoreArr = Array.isArray(matchData.awayScore) ? matchData.awayScore : [];
const homeScore = homeScoreArr.length ? homeScoreArr[0] : 0;
const awayScore = awayScoreArr.length ? awayScoreArr[0] : 0;
let slug = key;
if (matchData.house_id && matchData.house_id !== null) {
slug = `${key}?houseId=${matchData.house_id}`;
}
const competitionName = matchData.competitionName || 'NBA';
const matchDataObj = {
id: 2,
slug: slug,
sport: sportName(matchData.sportId),
live: matchData.matchStatus === 2,
hot: true,
blv: anchorList[0]?.nickName !== 'Live streaming',
date: formatDate(fixtime(matchData.matchTime), 'd/m'),
datesearch: formatDate(fixtime(matchData.matchTime), 'Y-m-d'),
hour: formatDate(fixtime(matchData.matchTime), 'H:i'),
competitionName: competitionName,
teams: [
matchData.homeTeamName || 'Team C',
matchData.awayTeamName || 'Team D'
],
score: `${homeScore}:${awayScore}`,
videoUrl: matchData.videoUrl || 'https://live2.example.com',
animationUrl: matchData.animationUrl || 'https://animation.example.com',
data: matchData
};
newMatches.push(matchDataObj);
}
return newMatches;
}
// Function Äá» init WebSocket
function initMatchesWebSocket() {
// WebSocket URL - có thỠconfig từ PHP hoặc hardcode
// Nếu có server-socket service, dùng URL Äó
// Format: wss://server.gvapi.cc hoặc ws://localhost:3320
const wsUrl = 'wss://server.ws-xyz.com/ws'; // Thay bằng URL thực tế của bạn
// Check nếu RealtimeWebSocketClient Äã ÄÆ°á»£c load
if (typeof RealtimeWebSocketClient === 'undefined') {
console.warn('[Homepage] RealtimeWebSocketClient not loaded, falling back to polling');
startFallbackPolling();
return;
}
wsClient = new RealtimeWebSocketClient(wsUrl);
// Subscribe to matches updates
wsClient.subscribe('matches:updated', (data) => {
//console.log('[Homepage] Received matches update from WebSocket');
if (data.code === '0000' && data.data) {
// Transform data Äá» tương thÃch vá»i renderAllMatches()
const transformedMatches = transformWebSocketMatches(data.data);
renderAllMatches(transformedMatches);
filterMatches('parent', transformedMatches);
saveMatchesToCache(transformedMatches); //
} else if (data.data && typeof data.data === 'object') {
// Nếu data trực tiếp là object (không có code)
const transformedMatches = transformWebSocketMatches(data.data);
renderAllMatches(transformedMatches);
filterMatches('parent', transformedMatches);
saveMatchesToCache(transformedMatches); //
}
});
// Handle connection events
wsClient.subscribe('connected', () => {
//console.log('[Homepage] WebSocket connected');
matchesWebSocketConnected = true;
// Stop fallback polling nếu Äang chạy
if (fallbackPollingInterval) {
clearInterval(fallbackPollingInterval);
fallbackPollingInterval = null;
}
});
wsClient.subscribe('disconnected', () => {
//console.log('[Homepage] WebSocket disconnected, falling back to polling');
matchesWebSocketConnected = false;
startFallbackPolling();
});
wsClient.subscribe('error', (error) => {
console.error('[Homepage] WebSocket error:', error);
matchesWebSocketConnected = false;
startFallbackPolling();
});
wsClient.connect();
}
// Fallback polling nếu WebSocket fail
function startFallbackPolling() {
if (fallbackPollingInterval) return; // Already running
//('[Homepage] Starting fallback polling');
fallbackPollingInterval = setInterval(() => {
if (!matchesWebSocketConnected) {
refreshMatches(); // Use existing function
} else {
// WebSocket reconnected, stop polling
clearInterval(fallbackPollingInterval);
fallbackPollingInterval = null;
}
}, 120000); // 2 minutes như cũ
}
// Nếu SSR Äã render HTML, ta không cần nạp từ localStorage hay fetch API lần Äầu nữa (tránh nháy mà n hình)
const ssrCardsCount = document.querySelectorAll('.match-card').length;
if (ssrCardsCount === 0) {
// Thá» load từ cache trưá»c nếu không có SSR
const cachedMatches = loadMatchesFromCache();
if (cachedMatches && cachedMatches.length > 0) {
try {
renderAllMatches(cachedMatches);
filterMatches('parent', cachedMatches);
} catch (error) {
console.error('[Cache Render Error]', error);
}
}
// Fetch fresh data từ API (cáºp nháºt + ghi Äè cache)
refreshMatches();
}
// Thá» WebSocket trưá»c, fallback to polling nếu fail
// Delay má»t chút Äá» Äảm bảo RealtimeWebSocketClient Äã ÄÆ°á»£c load
setTimeout(() => {
initMatchesWebSocket();
}, 500);
// Cleanup khi page unload
window.addEventListener('beforeunload', () => {
if (wsClient) {
wsClient.disconnect();
}
if (fallbackPollingInterval) {
clearInterval(fallbackPollingInterval);
}
});
</script>
<style>
.home-banner-slider {
width: 100%;
margin: 15px 0;
border-radius: 8px;
overflow: hidden;
position: relative;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
display: none;
/* Hidden by default until loaded */
z-index: 10;
}
.home-banner-track {
display: flex;
transition: transform 0.5s ease-in-out;
height: 100%;
}
.home-banner-slide {
min-width: 100%;
display: block;
text-decoration: none;
}
.home-banner-slide img {
width: 100%;
height: auto;
display: block;
object-fit: cover;
}
.home-banner-dots {
position: absolute;
bottom: 10px;
left: 0;
right: 0;
display: flex;
justify-content: center;
gap: 6px;
}
.home-banner-dot {
width: 8px;
height: 8px;
background: rgba(255, 255, 255, 0.5);
border-radius: 50%;
cursor: pointer;
transition: background 0.3s;
}
.home-banner-dot.active {
background: white;
transform: scale(1.2);
}
</style>
<script>
document.addEventListener('DOMContentLoaded', async function () {
try {
// Fetch settings
const res = await fetch('https://api.gvapi.cc/api/settings');
const data = await res.json();
if (data.success && data.home_banners && data.home_banners.length > 0) {
const banners = data.home_banners.sort((a, b) => a.order - b.order);
// Create slider container
const sliderContainer = document.createElement('div');
sliderContainer.className = 'home-banner-slider';
const track = document.createElement('div');
track.className = 'home-banner-track';
const dotsContainer = document.createElement('div');
dotsContainer.className = 'home-banner-dots';
banners.forEach((banner, index) => {
// Slide
const slide = document.createElement('a');
slide.className = 'home-banner-slide';
slide.href = banner.link_url && banner.link_url !== '#' ? banner.link_url : 'javascript:void(0)';
slide.target = banner.link_url && banner.link_url !== '#' ? '_blank' : '_self';
const img = document.createElement('img');
img.src = banner.image_url;
img.alt = banner.name || 'Banner';
slide.appendChild(img);
track.appendChild(slide);
// Dot
const dot = document.createElement('div');
dot.className = 'home-banner-dot';
if (index === 0) dot.classList.add('active');
dot.addEventListener('click', () => {
goToSlide(index);
});
dotsContainer.appendChild(dot);
});
sliderContainer.appendChild(track);
if (banners.length > 1) {
sliderContainer.appendChild(dotsContainer);
}
// Inject into DOM (after h1 in hero content)
const h1 = document.querySelector('.hero__content h1');
if (h1) {
h1.insertAdjacentElement('afterend', sliderContainer);
sliderContainer.style.display = 'block';
// Slider Logic
let currentIndex = 0;
let autoPlayInterval;
const totalSlides = banners.length;
function goToSlide(index) {
if (totalSlides <= 1) return;
currentIndex = index;
track.style.transform = `translateX(-${currentIndex * 100}%)`;
// Update dots
Array.from(dotsContainer.children).forEach((d, i) => {
if (i === currentIndex) d.classList.add('active');
else d.classList.remove('active');
});
resetAutoPlay();
}
function nextSlide() {
let next = currentIndex + 1;
if (next >= totalSlides) next = 0;
goToSlide(next);
}
function resetAutoPlay() {
clearInterval(autoPlayInterval);
autoPlayInterval = setInterval(nextSlide, 3000);
}
if (totalSlides > 1) {
resetAutoPlay();
}
}
}
} catch (err) {
console.error('Lá»i load home banners:', err);
}
});
</script>
<style>
@media (min-width: 481px) and (max-width: 767px) {
.match-card__status {
max-width: 120px;
font-size: 12px;
}
}
@media (min-width: 576px) and (max-width: 767px) {
.match-card__league {
max-width: 100px;
}
}
@media (min-width: 481px) and (max-width: 575px) {
.match-card__header {
flex-direction: row !important;
}
.match-card__time {
max-width: 100px !important;
}
}
.top-live-box {
width: 100%;
height: auto;
display: flex;
gap: 8px;
}
.top-live-box .left {
width: 100%;
min-height: 564px;
background-color: #000;
border-radius: 4px;
overflow: hidden;
}
.top-live-box .live-list {
width: 240px;
flex-shrink: 0;
}
.top-live-box .live-list .live-item {
width: 100%;
height: 144px;
margin-bottom: 6px;
cursor: pointer;
border-radius: 4px;
transition: all .1s ease-in-out;
overflow: hidden;
border: 2px solid transparent;
position: relative;
}
.top-live-box .live-list .live-item .anchor-item {
width: 100%;
height: 100%;
}
.el-image img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.btn-view-truc-tiep {
position: absolute;
top: 70%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 5;
background: #f2152d;
padding: 20px;
border-radius: 30px;
cursor: pointer;
text-align: center;
}
.btn-view-truc-tiep:hover {
opacity: 0.8;
}
.video-player {
position: relative;
}
.top-live-box .live-list .live-item.active {
border: 2px solid #ff0202;
}
.overlay-click {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
display: block;
}
/* Responsive */
@media screen and (max-width: 1024px) {
.top-live-box {
flex-direction: column;
}
.top-live-box .left {
width: 100%;
min-height: 400px;
}
.top-live-box .live-list {
display: none !important;
width: 100%;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 6px;
margin-top: 12px;
}
.top-live-box .live-list .live-item {
width: calc(50% - 6px);
height: 120px;
}
}
@media screen and (max-width: 768px) {
.top-live-box .left {
min-height: unset;
}
.btn-view-truc-tiep {
padding: 10px 10px;
font-size: 12px;
}
.top-live-box .live-list .live-item {
width: calc(50% - 3px);
height: 100px;
}
}
@media screen and (max-width: 480px) {
.top-live-box .live-list .live-item {
width: calc(50% - 3px);
height: 100px;
}
.btn-view-truc-tiep {
padding: 8px 14px;
font-size: 13px;
}
.match-card__body {
gap: 0.6rem;
}
}
</style>
<script src="//unpkg.byted-static.com/xgplayer/3.0.0-next.1/dist/index.min.js"></script>
<script src="//unpkg.com/[email protected]/dist/index.min.js"></script>
<link rel="stylesheet" href="//unpkg.byted-static.com/xgplayer/3.0.0-alpha.100/dist/xgplayer.min.css" />
<script type="text/javascript">
// Hà m lấy domain API random cho video-home (pinned-home)
function getVideoHomeApiDomain() {
const domains = [
'video-home.gvapi.cc'
];
// Random chá»n má»t domain
const index = Math.floor(Math.random() * domains.length);
const selected = domains[index];
return 'https://' + selected;
}
document.addEventListener('DOMContentLoaded', function () {
const apiBase = getVideoHomeApiDomain();
const STORAGE_KEY = 'pinnedMatchesCache';
const heroSection = document.querySelector('section.hero');
if (!heroSection) {
console.error('Hero section not found.');
return;
}
const skeletonHtml = `
<div class="top-live-box container skeleton-loading" id="pinned-matches-container">
<style>
.skeleton-box {
display: inline-block;
height: 100%;
width: 100%;
position: relative;
overflow: hidden;
background-color: #2a2a2a;
border-radius: 8px;
}
.skeleton-box::after {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
transform: translateX(-100%);
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0) 0,
rgba(255, 255, 255, 0.05) 20%,
rgba(255, 255, 255, 0.2) 60%,
rgba(255, 255, 255, 0)
);
animation: shimmer 2s infinite;
content: '';
}
@keyframes shimmer { 100% { transform: translateX(100%); } }
.skeleton-loading .left { aspect-ratio: 16/9; background: #1a1a1a; padding: 10px; border-radius: 8px;}
.skeleton-loading .live-list { display: flex; gap: 10px; margin-top: 10px; }
.skeleton-loading .live-item { flex: 1; aspect-ratio: 1/1; background: #1a1a1a; border-radius: 8px; overflow: hidden; }
</style>
<div class="left">
<div class="skeleton-box" style="min-height: 300px;"></div>
</div>
<div class="live-list">
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
<div class="live-item"><div class="skeleton-box"></div></div>
</div>
</div>
`;
function renderMatches(matches) {
const anchors = matches.slice(0, 4).map((match, index) => ({
streamUrl: match.playStreamAddress2,
image: match.houseImage,
name: match.nickName,
slug: match.slugKey + '?houseId=' + match.houseId
}));
if (anchors.length === 0) return;
const streamUrl = anchors[0].streamUrl;
const liveBoxHtml = `
<div class="top-live-box container" id="pinned-matches-container">
<div class="left">
<div class="video-container">
<div class="video-player">
<div id="mse" style="width: 100%;"></div>
<a href="/truc-tiep/${anchors[0].slug}" class="overlay-click" id="btn-view-link" rel="nofollow"></a>
<span class="btn-view-truc-tiep" rel="nofollow">Và o phòng live Äang phát sóng</span>
</div>
</div>
</div>
<div class="live-list">
${anchors.map((anchor, index) => `
<div class="live-item ${index === 0 ? 'active' : ''} live-living-item" data-index="${index}">
<div class="anchor-item">
<div class="placeholder img">
<img src="${anchor.image}" alt="${anchor.name}" style="object-fit: cover;">
</div>
</div>
</div>
`).join('')}
</div>
</div>
`;
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) {
existingContainer.outerHTML = liveBoxHtml;
} else {
heroSection.insertAdjacentHTML('afterend', liveBoxHtml);
}
if (window.Player && window.HlsPlayer) {
new Player({
plugins: [window.HlsPlayer],
id: "mse",
ignores: ["time", "progress"],
autoplayMuted: true,
autoplay: true,
playsinline: true,
isLive: true,
fluid: true,
pip: true,
muted: true,
url: streamUrl
});
}
const liveItems = document.querySelectorAll('#pinned-matches-container .live-item');
const viewLink = document.getElementById('btn-view-link');
liveItems.forEach(item => {
item.addEventListener('click', () => {
const index = parseInt(item.getAttribute('data-index'));
liveItems.forEach(i => i.classList.remove('active'));
item.classList.add('active');
if (window.Player && window.HlsPlayer) {
new Player({
plugins: [window.HlsPlayer],
id: "mse",
ignores: ["time", "progress"],
autoplayMuted: true,
autoplay: true,
playsinline: true,
isLive: true,
fluid: true,
pip: true,
muted: true,
url: anchors[index].streamUrl
});
}
if (viewLink) {
viewLink.href = '/truc-tiep/' + anchors[index].slug;
}
});
});
}
let hasLocalData = false;
try {
const cached = localStorage.getItem(STORAGE_KEY);
if (cached) {
const parsed = JSON.parse(cached);
if (parsed && parsed.length > 0) {
renderMatches(parsed);
hasLocalData = true;
}
}
} catch (e) {
console.error('Error parsing localStorage:', e);
}
if (!hasLocalData) {
heroSection.insertAdjacentHTML('afterend', skeletonHtml);
}
fetch('https://video-home.gvapi.cc/api/pinned-home?t=' + new Date().getTime())
.then(response => {
if (!response.ok) throw new Error('API Response not ok: ' + response.status);
return response.json();
})
.then(data => {
const matches = data.pinnedMatches;
if (!matches || matches.length < 1) {
localStorage.removeItem(STORAGE_KEY);
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) existingContainer.remove();
return;
}
localStorage.setItem(STORAGE_KEY, JSON.stringify(matches));
renderMatches(matches);
})
.catch(error => {
console.error('Error fetching API data:', error);
if (!hasLocalData) {
const existingContainer = document.getElementById('pinned-matches-container');
if (existingContainer) existingContainer.remove();
}
});
});
</script>
<style>
.aligncenter {
margin: 0 auto;
}
.wp-caption {
max-width: 100%;
}
footer .container {
grid-template-columns: 1fr;
}
</style>
<script>
const mini = document.querySelector('.video-player.is-floating.floating-draggable');
const margin = 8; // cách mép
function clampFloatingVideo() {
if (!mini) return;
const rect = mini.getBoundingClientRect();
let x = rect.left;
let y = rect.top;
const vw = window.innerWidth;
const vh = window.innerHeight;
const minX = margin;
const minY = margin; // nếu muá»n chừa notch: + safeTop
const maxX = vw - rect.width - margin;
const maxY = vh - rect.height - margin;
if (x < minX) x = minX;
if (x > maxX) x = maxX;
if (y < minY) y = minY;
if (y > maxY) y = maxY;
mini.style.left = x + 'px';
mini.style.top = y + 'px';
}
// chạy lại má»i khi viewport thay Äá»i
window.addEventListener('scroll', clampFloatingVideo);
window.addEventListener('resize', clampFloatingVideo);
window.addEventListener('orientationchange', clampFloatingVideo);
// iOS Safari thanh URL co giãn â nên dùng thêm:
if (window.visualViewport) {
visualViewport.addEventListener('resize', clampFloatingVideo);
visualViewport.addEventListener('scroll', clampFloatingVideo);
}
</script>
<script>
// === Catfish Banner Global: lấy từ API /api/catfish-banners (giá»ng React CatfishBanners.jsx) ===
(function () {
var apiUrl = 'https://api.gvapi.cc/api/catfish-banners';
fetch(apiUrl)
.then(function (res) { return res.ok ? res.json() : null; })
.then(function (data) {
if (!data || !data.success || !data.data || !data.data.length) return;
// === Video catfish overlay (nếu có trong trang watch) ===
var catfishLink = data.data[0].link_url || '';
if (catfishLink) {
var overlayTop = document.querySelector('.video-catfish-overlay-top');
var overlayBottom = document.querySelector('.video-catfish-overlay');
if (overlayTop) {
overlayTop.href = catfishLink;
overlayTop.style.display = 'block';
}
if (overlayBottom) {
overlayBottom.href = catfishLink;
overlayBottom.style.display = 'block';
}
}
// === Tạo container catfish-banner-global (fixed bottom, giá»ng React) ===
var wrapper = document.createElement('div');
wrapper.className = 'catfish-banner-global';
wrapper.style.cssText = 'position:fixed;bottom:0;left:0;right:0;z-index:9999;display:flex;flex-direction:column;align-items:center;pointer-events:none;width:50%;margin:0 auto;';
// Nút Äóng
var closeBtn = document.createElement('button');
closeBtn.className = 'catfish-banner-close';
closeBtn.innerHTML = 'â';
closeBtn.setAttribute('aria-label', 'Äóng quảng cáo');
closeBtn.style.cssText = 'position:absolute;top:-24px;right:4px;width:24px;height:24px;background:rgba(0,0,0,0.7);color:#fff;border:none;border-radius:50%;font-size:14px;line-height:24px;text-align:center;cursor:pointer;pointer-events:auto;z-index:10000;padding:0;';
closeBtn.addEventListener('click', function () { wrapper.remove(); });
wrapper.appendChild(closeBtn);
// Render banners
data.data.forEach(function (banner) {
var a = document.createElement('a');
a.className = 'catfish-banner-global-item';
a.href = banner.link_url || '#';
a.target = '_blank';
a.rel = 'nofollow noopener noreferrer';
a.style.cssText = 'display:block;width:100%;pointer-events:auto;line-height:0;cursor:pointer;';
var img = document.createElement('img');
img.src = banner.image_url;
img.alt = banner.name || 'Banner';
img.style.cssText = 'width:100%;height:auto;display:block;object-fit:contain;';
a.appendChild(img);
wrapper.appendChild(a);
});
document.body.appendChild(wrapper);
// Mobile: full width
var mq = window.matchMedia('(max-width: 768px)');
function applyMobile(e) { wrapper.style.width = e.matches ? '100%' : '50%'; }
applyMobile(mq);
mq.addListener(applyMobile);
})
.catch(function (e) { console.warn('Catfish banner load failed:', e); });
})();
</script>
<script>
// === FIX: Chặn smooth-scroll handlers can thiá»p và o catfish overlay ===
(function () {
document.addEventListener('click', function (e) {
var overlay = e.target.closest('.video-catfish-overlay, .video-catfish-overlay-top');
if (!overlay) return;
var href = overlay.getAttribute('href');
if (href && href !== '#' && !href.startsWith('#')) {
e.stopImmediatePropagation();
}
}, true);
})();
</script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
while (walker.nextNode()) {
const node = walker.currentNode;
if (node.nodeValue.match(/vô Äá»ch quá»c gia/i)) {
node.nodeValue = node.nodeValue.replace(/vô Äá»ch quá»c gia/gi, "VÄQG");
}
}
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function () {
function updateLinks() {
document.querySelectorAll('.home-banner-slide').forEach(function(el) {
el.href = 'https://refvsbg.com/';
el.target = '_blank';
});
}
// Banner hiá»n có
updateLinks();
// Banner render sau bằng JS/API
new MutationObserver(updateLinks).observe(document.body, {
childList: true,
subtree: true
});
});
</script>
</html>
<!-- | xoilaclivettbdad.tv | 2026-10-20 14:48:34 -->
| # |
Url |
Url |
Source |
Date |
| 1 |
https://xoilaclivettbdad.tv/ |
|
2026-10-21 03:37:40 |
| 2 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:40 |
| 3 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:39 |
| 4 |
https://www.texarkanatwins.com/%25… |
|
2026-10-21 03:37:39 |
| 5 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:39 |
| 6 |
https://oke.zone/profile.php?id=55… |
|
2026-10-21 03:37:38 |
| 7 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:38 |
| 8 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:37 |
| 9 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:36 |
| 10 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:36 |
| 11 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:36 |
| 12 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-21 03:37:35 |
| 13 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:35 |
| 14 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:34 |
| 15 |
https://www.texarkanatwins.com/%25… |
|
2026-10-21 03:37:34 |
| 16 |
https://www.texarkanatwins.com/%25… |
|
2026-10-21 03:37:33 |
| 17 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:33 |
| 18 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-21 03:37:32 |
| 19 |
https://www.texarkanatwins.com/%25… |
|
2026-10-21 03:37:32 |
| 20 |
https://www.texarkanatwins.com/&qu… |
|
2026-10-21 03:37:32 |