Historic Port City
About This Attraction
Fremantle, located at the mouth of the Swan River in Perth, is known for its well-preserved 19th-century architecture and maritime history. The area offers a variety of attractions, including the Fremantle Markets, which have specific opening hours from Friday to Sunday, providing visitors an opportunity to explore local food and crafts. Additionally, the Western Australian Maritime Museum showcases the regions seafaring heritage, making it a popular spot for tourists interested in history.
Public transport in Fremantle is convenient with frequent train and bus services connecting it to Perth city center. Visitors can also enjoy walking through the streets lined with cafes, shops, and art galleries. Moreover, the famous Fremantle Prison, a UNESCO World Heritage site, offers guided tours that detail its past as a convict establishment. Overall, Fremantle combines historical sites with modern amenities, offering something for everyone.
Location Details
Address
Fremantle, Western Australia, 6160, Australia
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
Free
Child
Free
Student
Free
Senior
Free
Opening Hours & Booking
Open
Days
Monday to Sunday
Hours
24 hours
Seasonality
Year-round
Booking
Booking Required?
No
Nearby Attractions
Kings Park in Perth is one of the largest inner-city parks in the world, spanning…
Learn More
Swan River, located in Perth, Western Australia, is a popular destination for both locals and…
Learn More
Coral Bay Beach in Coral Bay is a serene destination located on the island of…
Learn More
Ningaloo Reef, located off the coast of Coral Bay in Western Australia, is one of…
Learn More
Uluwatu Temple is a significant sea temple located on the southwestern tip of Bali, Indonesia.…
Learn More
Atuh Beach is a stunning location on the southeastern coast of Nusa Penida, an island…
Learn More
Kelingking Beach is a popular tourist destination located on the island of Nusa Penida in…
Learn More
Broken Beach, located on Nusa Penida Island in Indonesia, is a stunning coastal formation known…
Learn More
Angels Billabong is a natural infinity pool located on Nusa Penida Island, Indonesia. This stunning…
Learn More
Tanah Lot is a prominent cultural landmark located on the coast of Bali, Indonesia. Known…
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';
}
});
});
}
});