Musical Architecture
About This Attraction
The Sea Organ in Zadar, Croatia, is an architectural marvel that combines art and nature. Designed by architect Nikola Bašić, this unique musical instrument is built into the citys coastline. It consists of a series of tubes beneath a set of marble steps that produce sounds when hit by the movement of the sea waves. This creates a harmonious blend of music and environment, offering visitors an auditory experience thats both soothing and intriguing.
Visitors can enjoy the Sea Organ at any time, as it operates continuously with no specific opening hours. Located near the citys famous Greeting to the Sun installation, it provides a perfect spot for relaxation while watching a stunning sunset. The site is easily accessible and open to the public, making it a popular destination for both locals and tourists. Whether you are there during the day or night, the Sea Organs melodies offer a unique connection to nature through sound.
Location Details
Address
Istarska obala, 23000 Zadar, Croatia
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
Free
Child
Free
Student
Free
Senior
Free
Opening Hours & Booking
Open
Days
Every day
Hours
24 hours
Seasonality
Year-round
Booking
Booking Required?
No
Nearby Attractions
Zadar Cathedral, officially known as the Cathedral of St. Anastasia, is the largest church in…
Learn More
St. Stephens Cathedral is a prominent historical site located in the heart of Hvar, Croatia.…
Learn More
The Riva Promenade in Split is a popular waterfront area known for its scenic views…
Learn More
St. Marks Cathedral in Korčula is a notable example of Dalmatian architecture and serves as…
Learn More
The Roman Forum in Zadar is a historic site dating back to the 1st century…
Learn More
Marjan Hill is a popular recreational spot in Split, Croatia, offering stunning panoramic views of…
Learn More
The Blue Cave on the island of Vis is a popular natural attraction known for…
Learn More
Diocletians Palace in Split, Croatia, is a historic site built for the Roman Emperor Diocletian…
Learn More
Vis Town is located on the island of Vis in Croatia and is one of…
Learn More
The Pakleni Islands are a picturesque group of islands located off the coast of Hvar,…
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';
}
});
});
}
});