Family Events

Family Events

Parents and young children at an outdoor event.
Date
Date
View As:
View mode selection
The image shows a promotional poster for a theatrical pantomime production titled "Aladdie," presented by "The Gaiety." The title is written in bold, golden lettering with a whimsical font, and the letter "e" at the end of "Aladdie" is highlighted with a tartan fabric pattern. Below the title, it reads "A Family Pantomime" in a smaller, elegant font. The background is a deep purple with a subtle tartan pattern, reinforcing the Scottish theme.
Thursday 18 December - Wednesday 31 December 2025
12pm, 1.30pm & 6.30pm,
18 to £35

Aladdie

Aladdie
Promotional poster for a Halloween event at McKechnie Institute. The text reads “Hallowe’en at McKechnie Institute – Entry is Free.” The background features a dark, vintage-style painting of a man on horseback fleeing from ghostly and demonic figures emerging from a doorway, evoking a spooky, old-fashioned atmosphere.
11 October - 1 November 2025
See listing for times
Free

Halloween at the McKechnie Institute

Halloween at the McKechnie Institute
Bright festive poster with a pink background decorated with white snowflakes. Large playful white text reads “Festive Pottery Painting” with smaller text below saying “at Robert Burns Birthplace Museum.” At the bottom, three cartoon gnomes are illustrated: one in a green hat holding a gingerbread man, one in a blue hat with holly, and one in a red polka-dot hat holding a Christmas tree. The National Trust for Scotland logo appears near the bottom center.
Saturday 6 December 2025
10am, 12:30pm & 3pm
13.18

Festive Pottery Painting

Festive Pottery Painting
An image of the inside of a museum. An image of a magnifying glass is in the corner.
22 January - 15 November 2025
10am - 5pm
Free (normal entry fees apply)

Och Aye Spy - Museum Hunt for Young Explorers

Och Aye Spy – Museum Hunt for Young Explorers
Two small hands pressing down on a piece of clay with a rolling pin on a blue mat. To the left, there is a metal cookie cutter shaped like a reindeer, and to the right, a small piece of clay is rolled into a rough shape. The surface underneath is a wooden table with colorful paint marks.
Saturday 29 November 2025
10am - 12pm
45

Parent and Child Christmas Decoration Workshop

Parent and Child Christmas Decoration Workshop
An image or artwork by Chris Hugh MacKenzie.
Saturday 6 December 2025 - Sunday 1 March 2026
See listing for times
Free

Hold Utopia: Paintings by Chris Hugh MacKenzie

Hold Utopia: Paintings by Chris Hugh MacKenzie
Two girls looking at a rock with a magnifying glass
Open all year
See listing for opening times
Free

The Curious Club at McKechnie Institute

The Curious Club at McKechnie Institute
A warmly lit living room decorated for Christmas, featuring a large Christmas tree adorned with lights and red ornaments, surrounded by wrapped presents. Santa Claus sits in an armchair beside the tree, waving toward the camera. The room has elegant décor, including a fireplace with garlands and candles, framed paintings on the walls, and a large mirror above the mantel.
See listing for dates
11am - 4pm
FREE (standard admission fees apply)

Christmas at Culzean

Christmas at Culzean
Pétanque boules on a gravel court outside.
Open all year
See listing for opening times
Free

Boules at the McKechnie Institute

Boules at the McKechnie Institute
Festive red background with Christmas decorations including candy canes, pine branches, red and gold ornaments, and string lights. White text reads ‘Troon Library’s Wintertainment Celebrations.
Sunday 16 November 2025
12 noon - 4pm
Free

Wintertainment at Troon Library

Wintertainment at Troon Library

Join our newsletter

Get the latest Destination South Ayrshire news and events delivered straight to your inbox…

Sign up for our newsletter

Get the latest Destination South Ayrshire news and events delivered straight to your inbox.

Copyright © 2025 Destination South Ayrshire. Provided by South Ayrshire Council.

Sign up for our newsletter

Get the latest Destination South Ayrshire news and events delivered straight to your inbox…

document.addEventListener('DOMContentLoaded', () => { // Robust selectors for 2025 Elementor (covers Pro, Hello, Astra) const toggle = document.querySelector('.elementor-menu-toggle, .elementor-nav-menu--toggle button, [aria-expanded][role="button"]'); const menu = document.querySelector('.elementor-nav-menu--dropdown, .elementor-nav-menu__container, nav[role="navigation"]'); if (!toggle || !menu) { console.error('ZoomFix: Elements not found. Inspect hamburger/menu HTML.'); return; } console.log('ZoomFix: Found toggle and menu. Testing at 400% zoom...'); let focusables = []; let firstItem, lastItem; let isOpen = false; let tabCountAtEnd = 0; // Detects repeated Tabs to auto-close const MAX_TABS_BEFORE_CLOSE = 2; // Closes after 2 Tabs on last item const updateFocusables = () => { focusables = Array.from(menu.querySelectorAll('a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])')); firstItem = focusables[0]; lastItem = focusables[focusables.length - 1]; console.log('ZoomFix: Updated focusables:', focusables.length); }; // Monitor for menu open/close (handles Elementor's mutations at zoom) const observer = new MutationObserver((mutations) => { const expanded = toggle.getAttribute('aria-expanded') === 'true' || toggle.classList.contains('elementor-active'); if (expanded !== isOpen) { isOpen = expanded; console.log('ZoomFix: Menu state:', isOpen ? 'OPEN' : 'CLOSED'); if (isOpen) { updateFocusables(); setTimeout(() => firstItem?.focus(), 100); // Delay for zoom reflow startFocusPolling(); // Start zoom-safe polling } else { stopFocusPolling(); toggle.focus(); } } }); observer.observe(toggle, { attributes: true, subtree: true }); // Zoom-proof focus trap: Global Tab listener const handleTab = (e) => { if (!isOpen || !focusables.length) return; updateFocusables(); // Re-scan for zoom/DOM changes if (document.activeElement === lastItem && e.key === 'Tab' && !e.shiftKey) { e.preventDefault(); tabCountAtEnd++; console.log('ZoomFix: Tab at end (#', tabCountAtEnd, ')'); if (tabCountAtEnd >= MAX_TABS_BEFORE_CLOSE) { console.log('ZoomFix: Auto-closing after repeated Tabs'); closeMenu(); tabCountAtEnd = 0; } else { firstItem.focus(); // Trap: Loop to start } } else if (document.activeElement === firstItem && e.key === 'Tab' && e.shiftKey) { e.preventDefault(); lastItem.focus(); // Trap: Loop to end } }; // Polling for zoom event loss (runs only when open) let pollInterval; const startFocusPolling = () => { pollInterval = setInterval(() => { if (isOpen && document.activeElement && !menu.contains(document.activeElement)) { console.log('ZoomFix: Focus escaped during zoom—trapping back'); firstItem?.focus(); } }, 50); // 50ms check survives zoom reflow }; const stopFocusPolling = () => clearInterval(pollInterval); const closeMenu = () => { console.log('ZoomFix: Forcing close'); toggle.click(); // Elementor's native close tabCountAtEnd = 0; }; // Attach listeners document.addEventListener('keydown', handleTab); document.addEventListener('keyup', (e) => { if (e.key === 'Escape' && isOpen) closeMenu(); }); // Fallback: Click outside document.addEventListener('click', (e) => { if (isOpen && !menu.contains(e.target) && !toggle.contains(e.target)) closeMenu(); }); // Initial scan updateFocusables(); });