Historical Landmark
About This Attraction
The Japanese Covered Bridge in Hoi An is an iconic historical landmark, showcasing the unique blend of Japanese and Vietnamese architecture. Built in the early 17th century by the Japanese community in Hoi An, the bridge originally served as a means of connecting two parts of the town. It features a roofed structure, which provides shelter from the sun and rain, making it a practical walkway for pedestrians. The bridge is adorned with intricate carvings and sculptures, including statues of dogs and monkeys, representing the years they were built and completed.
Visitors should note that while there is no entrance fee to walk across the bridge, contributions are appreciated to help with its maintenance. The Japanese Covered Bridge opening hours are generally from early morning until late evening, allowing ample time for exploration during a visit to Hoi An. Its location in the ancient town makes it easily accessible on foot or by bicycle from most accommodations. This historic site remains one of Hoi Ans most photographed spots, attracting tourists and locals alike who appreciate its cultural significance.
Location Details
Address
Nguyen Thi Minh Khai, Minh An, Hoi An, Quang Nam, Vietnam
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
Free with Hoi An Old Town ticket
Child
Free with Hoi An Old Town ticket
Student
Free with Hoi An Old Town ticket
Senior
Free with Hoi An Old Town ticket
Opening Hours & Booking
Open
Days
Daily
Hours
24 hours
Seasonality
Year-round
Booking
Booking Required?
No
Nearby Attractions
Ancient Town in Hoi An is a UNESCO World Heritage Site located in Vietnam. It…
Learn More
Tra Que Vegetable Village is a small farming community located just outside Hoi An, Vietnam.…
Learn More
An Bang Beach in Hoi An, Vietnam, is a popular destination known for its long…
Learn More
The Perfume River in Hue, Vietnam is a significant waterway that flows through the city,…
Learn More
The Imperial City in Hue is a fascinating historical site in Vietnam, known for its…
Learn More
Thien Mu Pagoda, located in the city of Hue, Vietnam, is an iconic Buddhist temple…
Learn More
Vinpearl Safari in Phu Quoc is Vietnams first and largest semi-wildlife conservation park. It covers…
Learn More
Tad Fane Waterfall is located in the Bolaven Plateau near Pakse, Laos. Known for its…
Learn More
The Bolaven Plateau in Pakse, Laos, is a popular destination known for its cool climate…
Learn More
Wat Phou is an ancient Khmer temple complex located in southern Laos, near the town…
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';
}
});
});
}
});