Scenic Viewpoint
About This Attraction
John-Suwan Viewpoint is a popular destination on Koh Tao, Thailand, offering stunning panoramic views of the islands natural beauty. Located at the southern tip of Koh Tao, it provides visitors with a vantage point to see both Shark Bay and Chalok Baan Kao Bay. The trail to reach the viewpoint is relatively short, but it includes some steep sections, making appropriate footwear advisable. Visitors should be prepared for a moderate hike that takes approximately 20-30 minutes.
The area is accessible year-round, but its recommended to visit during the dry season for clearer skies and better visibility. There is a small entrance fee that contributes to the maintenance of the trail. John-Suwan Viewpoint travel information can be found at many local tourist centers on Koh Tao. Its an ideal spot for photography enthusiasts and nature lovers who appreciate breathtaking landscapes. Remember to bring water and sun protection to ensure a comfortable visit.
Location Details
Address
Chalok Baan Kao Bay, Koh Tao, Surat Thani, Thailand
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
50 THB
Child
50 THB
Student
50 THB
Senior
50 THB
Opening Hours & Booking
Open
Days
Daily
Hours
6:00 AM - 6:00 PM
Seasonality
Year-round
Booking
Booking Required?
No
Nearby Attractions
Shark Bay, located on the southern coast of Koh Tao in Thailand, is a popular…
Learn More
Mae Haad Pier is the main gateway to Koh Tao, an island in Thailand known…
Learn More
Sairee Beach is the longest and most popular beach on Koh Tao, an island in…
Learn More
Nang Yuan Island is a small, picturesque destination near Koh Tao in Thailand. Known for…
Learn More
Ang Thong Marine Park, located near Koh Samui in Thailand, is a stunning archipelago of…
Learn More
A tranquil beach known for its serene atmosphere and clear waters, ideal for relaxation and…
Tranquil beach with golden sands and clear waters, popular for relaxation and water sports.
Nathon Town is the administrative and commercial center of Koh Samui, known for its local…
Interactive 3D art museum with optical illusions.
A serene beach known for its calm waters and vibrant Fisherman's Village.
";
}
// Initialize modal controls
const initModalControls = function() {
console.log('Initializing modal controls');
const modal = document.getElementById('attraction-modal');
const closeBtn = document.querySelector('.attraction-modal-close');
if (closeBtn) {
closeBtn.addEventListener('click', function() {
modal.style.display = 'none';
document.body.style.overflow = '';
});
}
window.addEventListener('click', function(event) {
if (event.target === modal) {
modal.style.display = 'none';
document.body.style.overflow = '';
}
});
// Make attraction cards clickable
const attractionCards = document.querySelectorAll('.attraction-card');
console.log('Found ' + attractionCards.length + ' attraction cards');
attractionCards.forEach(card => {
card.addEventListener('click', function(e) {
openModalWithCardData(this);
});
});
};
// Function to open modal with card data
const openModalWithCardData = function(card) {
// Get data from hidden div
const data = card.querySelector('.attraction-full-data');
if (!data) {
console.error('No attraction data found in card');
return;
}
const modal = document.getElementById('attraction-modal');
if (!modal) {
console.error('Modal element still not found after creation attempt');
return;
}
// Helper function to safely get element text
function getElementText(selector) {
const element = data.querySelector(selector);
return element ? element.textContent : '';
}
try {
// Basic Info
document.getElementById('attraction-modal-title').textContent = getElementText('.attraction-name');
document.getElementById('attraction-modal-type').textContent = getElementText('.attraction-type-full');
document.getElementById('attraction-modal-description').textContent = getElementText('.attraction-description-full');
// Reset all containers to hidden
['attraction-modal-hours-container', 'attraction-modal-price-container',
'attraction-modal-address-container', 'attraction-modal-image-container'].forEach(id => {
const container = document.getElementById(id);
if (container) container.style.display = 'none';
});
// Rating
const ratingText = getElementText('.attraction-rating-full');
if (ratingText) {
const ratingValue = parseFloat(ratingText);
if (!isNaN(ratingValue)) {
const ratingValueEl = document.getElementById('attraction-modal-rating-value');
const ratingFillEl = document.getElementById('attraction-modal-rating-fill');
if (ratingValueEl) ratingValueEl.textContent = ratingValue.toFixed(1) + '/10';
if (ratingFillEl) ratingFillEl.style.width = (ratingValue * 10) + '%';
}
}
// Show the modal
modal.style.display = 'block';
document.body.style.overflow = 'hidden'; // Prevent background scrolling
console.log('Modal opened successfully');
} catch (error) {
console.error('Error opening modal:', error);
}
};
// Try to create the modal
const created = createModal();
console.log('Modal created:', created);
// If not created (already exists), initialize the controls
if (!created) {
initModalControls();
}
// Also initialize distance toggle
const distanceToggle = document.getElementById('distance-unit-toggle');
if (distanceToggle) {
distanceToggle.addEventListener('change', function() {
const showKm = this.checked;
// Update toggle labels
const labels = document.querySelectorAll('.toggle-label');
if (labels.length >= 2) {
labels[0].style.opacity = showKm ? '0.5' : '1';
labels[1].style.opacity = showKm ? '1' : '0.5';
}
// Update all distance displays
document.querySelectorAll('.nearby-attraction-card').forEach(card => {
const kmEl = card.querySelector('.distance-km');
const miEl = card.querySelector('.distance-mi');
if (kmEl && miEl) {
kmEl.style.display = showKm ? 'inline' : 'none';
miEl.style.display = showKm ? 'none' : 'inline';
}
});
});
}
});