Beach
About This Attraction
Luquillo Beach is a popular destination in Puerto Rico known for its stunning crescent-shaped shoreline and serene ambiance. It offers visitors calm waters, thanks to an offshore reef that protects the beach, making it ideal for swimming and snorkeling. Additionally, there are facilities like restrooms and picnic areas, which enhance the visitor experience. Luquillo Beach opening hours generally start from early morning until late evening, allowing ample time for day-long enjoyment.
The beach is not only famous for its natural beauty but also for the variety of food kiosks offering local cuisine nearby. These kiosks provide an opportunity to enjoy traditional Puerto Rican dishes after a day at the beach. Parking is available, although it can get crowded during weekends and holidays. The combination of beautiful scenery and convenient amenities makes Luquillo Beach a favored spot for both locals and tourists alike.
Location Details
Address
Playa Luquillo, Luquillo, Puerto Rico
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
Free
Child
Free
Student
Free
Senior
Free
Opening Hours & Booking
Open
Days
Monday to Sunday
Hours
9:00 AM to 5:00 PM
Seasonality
Year-round
Booking
Booking Required?
No
Nearby Attractions
El Yunque National Forest in Luquillo, Puerto Rico, is the only tropical rainforest in the…
Learn More
Condado Beach in San Juan is a popular destination for both locals and tourists. It…
Learn More
Old San Juan is a historic district in Puerto Ricos capital, San Juan. Known for…
Learn More
San Juan Cathedral, also known as Catedral Metropolitana Basílica de San Juan Bautista, is one…
Learn More
Castillo San Felipe del Morro, commonly known as El Morro, is a historic fortress located…
Learn More
The Malecón in Santo Domingo is a popular oceanfront avenue stretching along the Caribbean Sea.…
Learn More
Alcázar de Colón, located in Santo Domingo, Dominican Republic, is a historical landmark with significant…
Learn More
Zona Colonial in Santo Domingo is a historic neighborhood that is known for its colonial…
Learn More
The National Palace in Santo Domingo is an important government building and the official workplace…
Learn More
Baconao Park in Santiago de Cuba is a UNESCO Biosphere Reserve known for its natural…
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';
}
});
});
}
});