photo_popup.js 4.04 KB
jQuery(function($) {
    /**
     * フォトライブラリ用のpopupのためのHTMLをセット
     */
    $(document).ready(function() {
        const photosCustom = $('.item-page.photos-custom');
        if (photosCustom[0]) {
            let photosCustomHtml = '';
            photosCustomHtml += '<div id="photo-popup">';
            photosCustomHtml += '<img id="photo-popup-img" src="" alt="">';
            photosCustomHtml += '</div>';
            photosCustomHtml += '<a id="photo-popup-close" class="popup-button" href="#">×</a>';
            photosCustomHtml += '<a id="photo-popup-pre" class="popup-button" href="#"><</a>';
            photosCustomHtml += '<a id="photo-popup-next" class="popup-button" href="#">></a>';
            photosCustomHtml += '<div id="photo-popup-under">';
            photosCustomHtml += '</div>';
            photosCustom.append(photosCustomHtml);
        }
    });

    /**
     * ポップアップで表示する画像URLの取得と、popupの制御を行う関数の実行。
     */
    $('.item-page.photos-custom > div p').on('click', function() {
        $('.item-page.photos-custom').addClass('active-popup');
        // popupで表示させる画像URL
        const src = $(this).children('img').attr('src');
        $('#photo-popup-img').attr('src', src);
        // クリックされた画像の親要素の中での順番を取得
        let index = $('.item-page.photos-custom > div p').index(this);
        // 画像のインデックス番号の最大値を取得
        const imagesNum = $('.item-page.photos-custom > div p img').length - 1;
        changePopup(index, imagesNum);
        setPopup();
        $(window).resize(function () {
            setPopup();
        });
    });

    /**
     * ポップアップの大きさの制御
     */
    function setPopup() {
        const winW = $(window).innerWidth();
        const winH = $(window).innerHeight();
        // 画面表示領域のアスペクト比を取得
        const asp = winH / winW;
        if (asp < 0.75) {
            const newW = winH / 75 * 100;
            const style = {'height':winH,'width':newW}
            $('#photo-popup').css(style);
        } else {
            const newH = winW * 0.75 * 0.9;
            const newW = winW * 0.9;
            const style = {'height':newH,'width':newW}
            $('#photo-popup').css(style);
        }
    }

    /**
     * ポップアップの状態の制御
     * ・ 画像の切り替え
     * ・ ポップアップの表示、非表示
     *
     * @param {*} index クリックされた画像の親要素の中での順番
     * @param {*} imagesNum 画像のインデックス番号の最大値を取得
     */
    function changePopup(index, imagesNum) {
        $('#photo-popup-pre').off('click').on('click', function() {
            if (index === 0) {
                index = imagesNum;
                const src = $('.item-page.photos-custom > div p').eq(imagesNum).children('img').attr('src');
                $('#photo-popup-img').attr('src', src);
            } else {
                index--;
                const src = $('.item-page.photos-custom > div p').eq(index).children('img').attr('src');
                $('#photo-popup-img').attr('src', src);
            }
        });
        $('#photo-popup-next').off('click').on('click', function() {
            if (index === imagesNum) {
                index = 0;
                const src = $('.item-page.photos-custom > div p').eq(index).children('img').attr('src');
                $('#photo-popup-img').attr('src', src);
            } else {
                index++;
                const src = $('.item-page.photos-custom > div p').eq(index).children('img').attr('src');
                $('#photo-popup-img').attr('src', src);
            }
        });
        $('#photo-popup-close').off('click').on('click', function() {
            $('.item-page.photos-custom').removeClass('active-popup');
        });
        $('#photo-popup-under').off('click').on('click', function() {
            $('.item-page.photos-custom').removeClass('active-popup');
        });
    }
});