River Cruise
About This Attraction
The Melaka River Cruise is a popular attraction in the historical city of Melaka, Malaysia. It offers a scenic 45-minute boat ride along the Melaka River, providing views of the citys colonial architecture and vibrant murals. The cruise covers a distance of approximately 9 kilometers and includes informative commentary about the landmarks visible from the water. Visitors can enjoy this experience both during the day and at night, when colorful lights illuminate the riverbanks.
Melaka River Cruise opening hours typically start from 9:00 AM to 11:30 PM daily, allowing flexibility for various schedules. Tickets are available at the jetty near the Dutch Square or online for convenience. The cruise is suitable for all ages, making it an ideal activity for families, couples, and solo travelers alike. Nearby attractions include Jonker Street and A Famosa Fort, which visitors can explore before or after their river journey.
Location Details
Address
Jalan Persisiran Bunga Raya, 75100 Melaka, Malaysia
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
25 MYR
Child
15 MYR
Student
20 MYR
Senior
20 MYR
Opening Hours & Booking
Open
Days
Monday to Sunday
Hours
9:00 AM to 11:30 PM
Seasonality
All year round
Booking
Booking Required?
No
Nearby Attractions
Jonker Street, located in the heart of Melakas Chinatown, is famous for its lively night…
Learn More
St. Pauls Hill in Melaka is a historic site that offers visitors a glimpse into…
Learn More
Besar Island, part of the Perhentian Islands in Malaysia, offers visitors a serene escape with…
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';
}
});
});
}
});