טיולים ואתגרים טיולים ואתגרים טיולי איכות, טיולים אתגריים בישראל טיולים ואתגרים - הבית של הטיולים שלך

טיולים ואתגרים

החברה המובילה בישראל לטיולים מיוחדים וטיולים בהתאמה אישית


parallax background

חפש טיולים באתר

Generic filters
באיזה חודש מטיילים?


הטיולים הבאים:






הטיולים המיוחדים שלנו לחו"ל:


מבין לקוחותינו:



parallax background

נשמח להתאים עבורכם את הטיול המושלם!

    שם: (חובה)

    טלפון:

    כתובת המייל: (חובה)



    לקוחות מספרים


    x
    סייען נגישות
    הגדלת גופן
    הקטנת גופן
    גופן קריא
    גווני אפור
    גווני מונוכרום
    איפוס צבעים
    הקטנת תצוגה
    הגדלת תצוגה
    איפוס תצוגה

    אתר מונגש

    אנו רואים חשיבות עליונה בהנגשת אתר האינטרנט שלנו לאנשים עם מוגבלויות, וכך לאפשר לכלל האוכלוסיה להשתמש באתרנו בקלות ובנוחות. באתר זה בוצעו מגוון פעולות להנגשת האתר, הכוללות בין השאר התקנת רכיב נגישות ייעודי.

    סייגי נגישות

    למרות מאמצנו להנגיש את כלל הדפים באתר באופן מלא, יתכן ויתגלו חלקים באתר שאינם נגישים. במידה ואינם מסוגלים לגלוש באתר באופן אופטימלי, אנה צרו איתנו קשר

    רכיב נגישות

    באתר זה הותקן רכיב נגישות מתקדם, מבית all internet - בניית אתרים.רכיב זה מסייע בהנגשת האתר עבור אנשים בעלי מוגבלויות.

    // Use jQuery's ready function for better compatibility with WordPress themes jQuery(document).ready(function($) { const bus = document.getElementById('animated-bus'); const stationInfoDisplay = document.getElementById('station-info'); const currentStationName = document.getElementById('current-station-name'); const currentStationTime = document.getElementById('current-station-time'); const tableBody = document.querySelector('#bus-stops-table tbody'); const busAnimationArea = document.querySelector('.bus-animation-area'); // The container for animation // Check if critical elements exist before proceeding if (!bus || !stationInfoDisplay || !currentStationName || !currentStationTime || !tableBody || !busAnimationArea) { console.error("אחד או יותר מהאלמנטים החיוניים לאנימציית האוטובוס לא נמצאו. האנימציה לא תפעל."); // Optionally, hide the animation area if elements are missing if (busAnimationArea) { busAnimationArea.style.display = 'none'; } return; // Stop execution if elements are missing } // Extract stations from the HTML table const stations = Array.from(tableBody.querySelectorAll('tr')).map(row => { return { time: row.dataset.time, name: row.dataset.station, mapLink: row.querySelector('a') ? row.querySelector('a').href : 'אין קישור' }; }); // If no stations are found, hide the animation area and log an error if (stations.length === 0) { console.warn("לא נמצאו תחנות בטבלת ההסעה. אנימציית האוטובוס לא תפעל."); busAnimationArea.style.display = 'none'; return; } const stopDuration = 3000; // 3 seconds stop at each station const travelDuration = 2000; // 2 seconds travel between stops let currentStationIndex = 0; let animationFrameId; let timeoutId; // To clear the setTimeout for stopping let isBusMoving = false; // Define a fixed stop point for the bus on the screen let stopPointX; const stopMargin = 0.2; // Stop at 20% from the left edge of the animation area function calculateStopPoint() { const busAnimationAreaWidth = busAnimationArea.offsetWidth; const busWidth = bus.offsetWidth; stopPointX = busAnimationAreaWidth * stopMargin; // Ensure the bus doesn't go off screen right if the area is too small stopPointX = Math.min(stopPointX, busAnimationAreaWidth - busWidth - 20); // Adjust padding from right } function updateStationInfo(station) { currentStationName.textContent = station.name; currentStationTime.textContent = `שעה: ${station.time}`; stationInfoDisplay.style.display = 'block'; // Show info box // Position station info relative to the bus stop point stationInfoDisplay.style.left = `${stopPointX + bus.offsetWidth / 2 - stationInfoDisplay.offsetWidth / 2}px`; // Center above bus } function hideStationInfo() { stationInfoDisplay.style.display = 'none'; // Hide info box } function animateBusMovement(startX, targetX, duration) { return new Promise(resolve => { let startTime = null; function animate(timestamp) { if (!startTime) startTime = timestamp; const elapsed = timestamp - startTime; const progress = Math.min(elapsed / duration, 1); const easedProgress = 0.5 - 0.5 * Math.cos(progress * Math.PI); // Ease-in-out const currentX = startX + (targetX - startX) * easedProgress; bus.style.transform = `translateX(${currentX}px)`; if (progress < 1) { animationFrameId = requestAnimationFrame(animate); } else { bus.style.transform = `translateX(${targetX}px)`; // Ensure exact final position resolve(); } } animationFrameId = requestAnimationFrame(animate); }); } async function startBusSequence() { if (isBusMoving) return; isBusMoving = true; hideStationInfo(); // Hide info box while moving const currentStation = stations[currentStationIndex]; // Highlight the current row in the table const allRows = tableBody.querySelectorAll('tr'); allRows.forEach((row, idx) => { if (idx === currentStationIndex) { row.classList.add('bg-yellow-200', 'font-bold'); // Highlight current station // Scroll to row only if it's not already in view const rect = row.getBoundingClientRect(); const isVisible = (rect.top >= 0) && (rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)); if (!isVisible) { row.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); // Scroll to row } } else { row.classList.remove('bg-yellow-200', 'font-bold'); // Remove highlight from others } }); // Get current bus position relative to its container let currentBusX = bus.getBoundingClientRect().left - busAnimationArea.getBoundingClientRect().left; // Special handling for first station or looping back to start if (currentStationIndex === 0 && (currentBusX > busAnimationArea.offsetWidth || currentBusX < -bus.offsetWidth)) { bus.style.transform = `translateX(${-bus.offsetWidth}px)`; // Reset to off-screen left currentBusX = -bus.offsetWidth; } // Animate bus to the target station position (stopPointX) await animateBusMovement(currentBusX, stopPointX, travelDuration); // Display info and pause at station updateStationInfo(currentStation); await new Promise(resolve => { timeoutId = setTimeout(resolve, stopDuration); }); currentStationIndex++; // Move to next station if (currentStationIndex < stations.length) { // If there are more stations, continue the sequence startBusSequence(); } else { // All stations visited, move bus off-screen right await animateBusMovement(stopPointX, busAnimationArea.offsetWidth + bus.offsetWidth, travelDuration); // Reset for next loop currentStationIndex = 0; bus.style.transform = `translateX(${-bus.offsetWidth}px)`; // Reset bus to off-screen left isBusMoving = false; // Allow sequence to restart startBusSequence(); // Start the loop again } } // Initial setup calculateStopPoint(); // Calculate positions on load bus.style.transform = `translateX(${-bus.offsetWidth}px)`; // Start off-screen left startBusSequence(); // Start the animation loop // Handle window resize to adjust bus positions window.addEventListener('resize', () => { // Recalculate stop positions and restart animation on resize for correct positioning cancelAnimationFrame(animationFrameId); clearTimeout(timeoutId); isBusMoving = false; // Allow sequence to restart currentStationIndex = 0; // Reset to start from the beginning bus.style.transform = `translateX(${-bus.offsetWidth}px)`; // Reset position calculateStopPoint(); // Recalculate positions startBusSequence(); }); });