Island
About This Attraction
Besar Island, part of the Perhentian Islands in Malaysia, offers visitors a serene escape with its crystal-clear waters and sandy beaches. The island, accessible by boat from the mainland, is known for its vibrant marine life, making it a popular spot for snorkeling and swimming. Accommodation options range from budget-friendly chalets to more upscale resorts, catering to various preferences. Although there are no official Besar Island opening hours, ferry services operate during daylight hours, typically starting in the morning and ending in the late afternoon.
In addition to water activities, Besar Island provides several hiking trails through lush forests, offering visitors a chance to explore the natural surroundings. Dining options on the island include local seafood restaurants and international cuisine, ensuring a diverse culinary experience. Visitors are encouraged to bring essential supplies as shopping options are limited. Overall, Besar Island is an ideal destination for those looking to unwind in natural beauty while enjoying basic amenities.
Location Details
Address
Perhentian Islands, Terengganu, Malaysia
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
Free
Child
Free
Student
Free
Senior
Free
Opening Hours & Booking
Open
Days
Daily
Hours
24 hours
Seasonality
March to October
Booking
Booking Required?
No
Nearby Attractions
St. Pauls Hill in Melaka is a historic site that offers visitors a glimpse into…
Learn More
Jonker Street, located in the heart of Melakas Chinatown, is famous for its lively night…
Learn More
The Melaka River Cruise is a popular attraction in the historical city of Melaka, Malaysia.…
Learn More
A Famosa is a historical Portuguese fortress located in Melaka, Malaysia. Built in 1511, it…
Learn More
Kecil Island is part of the Perhentian Islands located in Malaysia, famous for its beautiful…
Learn More
Turtle Sanctuary Beach in the Perhentian Islands is a serene destination known for its conservation…
Learn More
Taiping Lake Gardens, located in the town of Taiping in Perak, Malaysia, is one of…
Learn More
Taiping Zoo, located in Taiping, Malaysia, is one of the oldest zoos in the country,…
Learn More
The Perak Museum in Taiping is the oldest museum in Malaysia, established in 1883. It…
Learn More
Perhentian Marine Park, located on the Perhentian Islands in Malaysia, is a protected area renowned…
Learn More
";
}
// 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';
}
});
});
}
});