Showing source for: https://nontonbola.gratis/
Duration: 1.730679s
Server: LiteSpeed
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Nonton Bola Gratis & Info Sepak Bola Terlengkap</title>
<meta name="description" content="Saksikan pertandingan bola gratis dan dapatkan info sepak bola terlengkap dengan klasemen liga, jadwal pertandingan, dan berita terbaru." />
<meta name="keywords" content="nonton bola, sepak bola, jadwal bola, klasemen liga, streaming bola gratis" />
<meta name="robots" content="index, follow" />
<link rel="canonical" href="https://nontonbola.gratis/" />
<link rel="amphtml" href="https://nontonbola.gratis/amp/">
<meta name="google-site-verification" content="MNKSlZZXejYPf9gVyVwFJuRB8x2wE5odz6f2MW28iek" />
<!-- Open Graph untuk preview sosial media -->
<meta property="og:title" content="Nonton Bola Gratis & Info Sepak Bola Terlengkap" />
<meta property="og:description" content="Saksikan pertandingan bola gratis dan dapatkan info sepak bola terlengkap dengan klasemen liga, jadwal pertandingan, dan berita terbaru." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://nontonbola.gratis/" />
<meta property="og:image" content="https://nontonbola.gratis/pngwing.png" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Nonton Bola Gratis & Info Sepak Bola Terlengkap" />
<meta name="twitter:description" content="Saksikan pertandingan bola gratis dan dapatkan info sepak bola terlengkap dengan klasemen liga, jadwal pertandingan, dan berita terbaru." />
<meta name="twitter:image" content="https://nontonbola.gratis/pngwing.png" />
<link rel="icon" href="https://nontonbola.gratis/bola.png" type="image/gif">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 0;
padding: 10px;
background: #eef2f7;
color: #222;
transition: background-color 0.3s, color 0.3s;
display: flex;
flex-direction: column; /* Tambahkan ini */
align-items: center; /* Agar semua anak di tengah */
}
body.dark {
background: #121212;
color: #eee;
}
.container {
max-width: 500px;
width: 100%;
background: white;
padding: 15px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
transition: background-color 0.3s, color 0.3s;
}
body.dark .container {
background: #1e1e1e;
color: #eee;
}
.logo {
text-align: center;
margin-bottom: 10px;
}
.logo img {
max-width: 400px;
}
h1 {
text-align: center;
margin-bottom: 15px;
}
select, button.toggle-dark {
margin: 0 5px 15px 0;
padding: 6px 10px;
font-size: 0.9rem;
border-radius: 4px;
border: 1px solid #aaa;
cursor: pointer;
}
button.toggle-dark {
background: #2980b9;
border: none;
color: white;
}
body.dark button.toggle-dark {
background: #3498db;
}
.league-title {
text-align: center;
font-weight: 600;
margin-bottom: 5px;
font-size: 1.1rem;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 0.75rem;
}
th, td {
padding: 6px;
border: 1px solid #ccc;
text-align: center;
}
th {
background-color: #2980b9;
color: white;
}
body.dark th {
background-color: #2980b9;
}
tr:nth-child(even) {
background-color: #f2f9ff;
}
body.dark tr:nth-child(even) {
background-color: #333;
}
img.logo-team {
width: 14px;
vertical-align: middle;
margin-right: 4px;
}
#schedule-container {
margin-top: 30px;
}
.match {
background: #f9f9f9;
border: 1px solid #ccc;
margin-bottom: 8px;
padding: 8px;
font-size: 0.75rem;
}
body.dark .match {
background: #2a2a2a;
border-color: #444;
}
#countdown {
margin: 10px 0 20px 0;
font-size: 1rem;
font-weight: 600;
text-align: center;
}
.popup-overlay {
position: fixed;
top: 0; left: 0;
width: 100%; height: 100%;
background: rgba(0, 0, 0, 0.7);
display: none;
justify-content: center;
align-items: center;
z-index: 9999;
}
.popup-img {
width: 100%;
max-width: 500px;
border-radius: 12px;
box-shadow: 0 0 15px rgba(0,0,0,0.5);
cursor: pointer;
animation: popupAnim 0.4s ease-in-out;
}
.popup-close {
position: absolute;
top: 30px; right: 35px;
font-size: 32px;
font-weight: bold;
color: white;
cursor: pointer;
}
@keyframes popupAnim {
from { transform: scale(0.8); opacity: 0; }
to { transform: scale(1); opacity: 1; }
}
.logo img {
width: 100%;
max-width: 400px;
height: auto;
}
@media (max-width: 768px) {
.logo img {
max-width: 450px;
}
}
@media (max-width: 480px) {
.logo img {
max-width: 400px;
}
}
#league-standings {
overflow-x: auto; /* buat scroll horizontal kalau konten melebar */
-webkit-overflow-scrolling: touch; /* agar scroll di iOS smooth */
}
</style>
</head>
<body>
<div id="popup-overlay" class="popup-overlay">
<a href="https://nontonbola.gratis/cara-nonton-gratis" target="_blank">
<img src="https://nontonbola.gratis/gifku.gif" alt="nontonbolagratis" class="popup-img" />
</a>
<span class="popup-close" onclick="closePopup()">×</span>
</div>
</div>
<div style="display: flex; justify-content: center; margin-bottom: 15px;">
<a href="https://nontonbola.gratis/cara-nonton-gratis" target="_blank" style="display: inline-block;">
<img src="https://nontonbola.gratis/gifku.gif"
alt="Banner Bola"
style="width: 100%; max-width: 500px; border-radius: 10px;" />
</a>
</div>
<div style="display: flex; justify-content: center; margin-bottom: 15px;">
<a href="https://nontonbola.gratis/cara-daftar" target="_blank" style="display: inline-block;">
<img src="https://nontonbola.gratis/sbogif.gif"
alt="Banner Bola"
style="width: 100%; max-width: 500px; border-radius: 10px;" />
</a>
</div>
<div class="container">
<div class="logo">
<img src="https://nontonbola.gratis/pngwing.png" alt="Logo Bola" />
</div>
<h1>Klasemen Liga & Jadwal Bola</h1>
<div>
<label for="league-select">Pilih Liga: </label>
<select id="league-select">
<option value="PL">Premier League (Inggris)</option>
<option value="PD">La Liga (Spanyol)</option>
<option value="SA">Serie A (Italia)</option>
<option value="BL1">Bundesliga (Jerman)</option>
<option value="FL1">Ligue 1 (Prancis)</option>
</select>
<button class="toggle-dark" id="toggle-dark">Mode Gelap</button>
</div>
<div id="league-standings">
<!-- Klasemen akan dimuat di sini -->
</div>
<div id="schedule-container">
<h2>Jadwal Pertandingan Terbaru</h2>
<div id="countdown">Loading countdown...</div>
<div id="matches-list">
<!-- Jadwal pertandingan dimuat di sini -->
</div>
</div>
</div>
<script>
const leagueSelect = document.getElementById('league-select');
const standingsDiv = document.getElementById('league-standings');
const matchesList = document.getElementById('matches-list');
const countdownEl = document.getElementById('countdown');
const toggleDarkBtn = document.getElementById('toggle-dark');
// Load klasemen sesuai pilihan liga
async function loadStandings(leagueCode) {
standingsDiv.innerHTML = "Loading klasemen...";
try {
const res = await fetch(`api/standings-proxy.php?league=${leagueCode}`);
if(!res.ok) throw new Error("Gagal mengambil data klasemen");
const data = await res.json();
if (!data.standings || data.standings.length === 0) throw new Error("Data klasemen tidak tersedia");
const table = data.standings[0].table;
let html = `
<div class="league-title">${leagueSelect.options[leagueSelect.selectedIndex].text}</div>
<table>
<thead>
<tr>
<th>Pos</th><th>Tim</th><th>P</th><th>M</th><th>S</th><th>K</th><th>GM</th><th>GK</th><th>Selisih</th><th>Poin</th>
</tr>
</thead>
<tbody>
`;
for (const team of table) {
html += `<tr>
<td>${team.position}</td>
<td><img class="logo-team" src="${team.team.crest}" alt="">${team.team.shortName}</td>
<td>${team.playedGames}</td>
<td>${team.won}</td>
<td>${team.draw}</td>
<td>${team.lost}</td>
<td>${team.goalsFor}</td>
<td>${team.goalsAgainst}</td>
<td>${team.goalDifference}</td>
<td>${team.points}</td>
</tr>`;
}
html += `</tbody></table>`;
standingsDiv.innerHTML = html;
} catch(e) {
standingsDiv.innerHTML = `<p style="color:red;">${e.message}</p>`;
}
}
// Load jadwal pertandingan terbaru (ambil 5 pertandingan)
async function loadMatches() {
matchesList.innerHTML = "Loading jadwal...";
try {
const res = await fetch('api/standings-proxy.php?matches=1');
if(!res.ok) throw new Error("Gagal mengambil data pertandingan");
const data = await res.json();
const matches = data.matches.slice(0, 5);
matchesList.innerHTML = "";
for (const match of matches) {
const home = match.homeTeam.shortName || match.homeTeam.name;
const away = match.awayTeam.shortName || match.awayTeam.name;
const date = new Date(match.utcDate);
const dateStr = date.toLocaleString('id-ID');
const div = document.createElement('div');
div.className = "match";
div.textContent = `${home} vs ${away} â ${dateStr}`;
matchesList.appendChild(div);
}
if (matches.length > 0) {
startCountdown(matches[0].utcDate);
} else {
countdownEl.textContent = "Tidak ada pertandingan terbaru";
}
} catch(e) {
matchesList.innerHTML = `<p style="color:red;">${e.message}</p>`;
countdownEl.textContent = "";
}
}
// Countdown menuju pertandingan (tanggal UTC)
let countdownInterval;
function startCountdown(matchUtc) {
clearInterval(countdownInterval);
function updateCountdown() {
const now = new Date();
const matchDate = new Date(matchUtc);
const diff = matchDate - now;
if (diff <= 0) {
countdownEl.textContent = "Pertandingan sudah dimulai!";
clearInterval(countdownInterval);
return;
}
const hours = Math.floor(diff / 1000 / 60 / 60);
const minutes = Math.floor((diff / 1000 / 60) % 60);
const seconds = Math.floor((diff / 1000) % 60);
countdownEl.textContent = `Pertandingan pertama dimulai dalam ${hours}j ${minutes}m ${seconds}d`;
}
updateCountdown();
countdownInterval = setInterval(updateCountdown, 1000);
}
// Toggle dark mode
toggleDarkBtn.addEventListener('click', () => {
document.body.classList.toggle('dark');
});
leagueSelect.addEventListener('change', () => {
loadStandings(leagueSelect.value);
});
// Load default data
loadStandings(leagueSelect.value);
loadMatches();
</script>
<script>
window.onload = function() {
setTimeout(function() {
document.getElementById("popup-overlay").style.display = "flex";
}, 2000); // muncul otomatis setelah 2 detik
window.closePopup = function() {
document.getElementById("popup-overlay").style.display = "none";
};
};
</script>
</body>
</html>
| # |
Url |
Url |
Source |
Date |
| 1 |
https://nontonbola.gratis/ |
|
2026-10-17 21:17:44 |
| 2 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-17 21:17:44 |
| 3 |
https://binarenoptionthiergartenu.… |
|
2026-10-17 21:17:43 |
| 4 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-17 21:17:43 |
| 5 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-17 21:17:42 |
| 6 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-17 21:17:42 |
| 7 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-17 21:17:42 |
| 8 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-17 21:17:42 |
| 9 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-17 21:17:41 |
| 10 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-17 21:17:40 |
| 11 |
https://analnoe.com/user/pencilsca… |
|
2026-10-17 21:17:40 |
| 12 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-17 21:17:40 |
| 13 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-17 21:17:40 |
| 14 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-17 21:17:40 |
| 15 |
https://civicvoice.org.uk/ |
|
2026-10-17 21:17:39 |
| 16 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-17 21:17:39 |
| 17 |
https://www.texarkanatwins.com/%25… |
|
2026-10-17 21:17:39 |
| 18 |
https://coeurdevoyageur.blogspot.c… |
|
2026-10-17 21:17:39 |
| 19 |
https://auth.acog.org/OAuth/SignIn… |
|
2026-10-17 21:17:38 |
| 20 |
https://www.thebolditalic.com/?gi=… |
|
2026-10-17 21:17:38 |