����JFIF��`�`�����Viewing File: /home/u820193700/domains/throtllr.in/public_html/assets/js/360viewer.js
function init360Viewer(containerId, imageUrls) {
    const container = document.getElementById(containerId);
    if (!container || !imageUrls || imageUrls.length === 0) return;

    const totalFrames = imageUrls.length;
    let currentFrame = 0;
    let isDragging = false;
    let startX = 0;

    const imageElement = container.querySelector('#viewer-image');
    const bgImageElement = container.querySelector('#viewer-bg-image');
    const loader = container.querySelector('#viewer-loader');
    const btnAuto = document.getElementById('btn-auto-rotate');
    
    let autoRotateInterval = null;

    let loadedCount = 0;
    const preloadedImages = [];

    // Preload images
    imageUrls.forEach((url, index) => {
        const img = new Image();
        img.src = url;
        img.onload = () => {
            loadedCount++;
            if (loadedCount === totalFrames) {
                // All loaded
                loader.style.display = 'none';
                imageElement.style.display = 'block';
                if (bgImageElement) {
                    bgImageElement.style.display = 'block';
                    bgImageElement.src = preloadedImages[0].src;
                }
                imageElement.src = preloadedImages[0].src;
            }
        };
        preloadedImages[index] = img;
    });

    function updateFrame(deltaX) {
        // Sensitivity control (lower is more sensitive)
        const sensitivity = 5;
        const frameShift = Math.floor(deltaX / sensitivity);
        
        if (frameShift !== 0) {
            currentFrame = (currentFrame - frameShift) % totalFrames;
            if (currentFrame < 0) currentFrame += totalFrames;
            imageElement.src = preloadedImages[currentFrame].src;
            if (bgImageElement) bgImageElement.src = preloadedImages[currentFrame].src;
            startX = startX + (frameShift * sensitivity); // Partial reset for smooth drag
        }
    }

    // Mouse Events
    container.addEventListener('mousedown', (e) => {
        e.preventDefault(); // Prevent default image drag
        isDragging = true;
        startX = e.clientX;
        stopAutoRotate();
        container.style.cursor = 'grabbing';
    });

    window.addEventListener('mouseup', () => {
        isDragging = false;
        container.style.cursor = 'grab';
    });

    window.addEventListener('mousemove', (e) => {
        if (!isDragging) return;
        const deltaX = e.clientX - startX;
        updateFrame(deltaX);
    });

    // Touch Events
    container.addEventListener('touchstart', (e) => {
        isDragging = true;
        startX = e.touches[0].clientX;
        stopAutoRotate();
    });

    window.addEventListener('touchend', () => {
        isDragging = false;
    });

    window.addEventListener('touchmove', (e) => {
        if (!isDragging) return;
        e.preventDefault(); // Prevent scrolling while dragging the bike
        const deltaX = e.touches[0].clientX - startX;
        updateFrame(deltaX);
    }, { passive: false });

    // Auto Rotate
    function startAutoRotate() {
        stopAutoRotate();
        autoRotateInterval = setInterval(() => {
            currentFrame = (currentFrame + 1) % totalFrames;
            imageElement.src = preloadedImages[currentFrame].src;
            if (bgImageElement) bgImageElement.src = preloadedImages[currentFrame].src;
        }, 100); // 10 fps
    }

    function stopAutoRotate() {
        if (autoRotateInterval) {
            clearInterval(autoRotateInterval);
            autoRotateInterval = null;
        }
    }

    if (btnAuto) {
        btnAuto.addEventListener('click', () => {
            if (autoRotateInterval) {
                stopAutoRotate();
                btnAuto.innerHTML = '<i class="fas fa-play"></i>';
            } else {
                startAutoRotate();
                btnAuto.innerHTML = '<i class="fas fa-pause"></i>';
            }
        });
    }
}
Back to Directory �������}�!1AQa"q2���#B��R��$3br� %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�������������������������������������������������������������������������������� ������w�!1AQaq"2�B���� #3R�br� $4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz������������������������������������������������������������������������ ��?��_��+��?��(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(���(�����