1

フォト ギャラリーがページの更新時にしか読み込まれないという問題があります。運がないことを除けば、修正は非常に簡単だと思います..append()関数がロードされた後に関数を呼び出す必要があると思います。

フォト ギャラリーは非常に複雑です。4 つのコンポーネントがあります。

  1. 3 つの異なる xml ファイルから取得した画像を div で追加します。
  2. 画像 div には css が与えられ、モザイク jquery プラグインからのオーバーレイが提供されます。
  3. 画像は、特定の写真を表示および非表示にする isotope jquery プラグインによってグループに配置されます。
  4. 画像をクリックすると、fancybox jquery プラグインが使用されます。

まず、3 つの異なる xml フィードからページに読み込まれた画像を追加します。このコードは正常に機能し、ページに表示されない場合でも画像が追加されます (div とサイズの検査を使用します)。

コードを追加

$(document).ready(function(){
    $.ajax({
        type: "GET",
        url:'/gallery/apartment/PhotoGallery.xml',  // Add your url to your photo gallery xml feed
        dataType: 'xml',
        success: xmlParser1
    });

    // don't touch anything under me
    function xmlParser1(xml) {
        $(xml).find("img").each(function () {                       
        $(".apartment-images").append('<div class="mosaic-block third fade"><a href="/gallery/apartment/' + $(this).attr('src') + '" class="mosaic-overlay fancybox" data-fancybox-group="gallery" title="' + $(this).attr('alt') + '"></a><div class="mosaic-backdrop"><img src="/gallery/apartment/' + $(this).attr('src') + '?Action=thumbnail&Width=500&Height=375&algorithm=fill_proportional" alt="' + $(this).attr('alt') + '" /></div></div></div>');
        });
    // don't touch anything above me
    }

$.ajax({
        type: "GET",
        url:'/gallery/views/PhotoGallery.xml',  // Add your url to your photo gallery xml feed
        dataType: 'xml',
        success: xmlParser2
    });

    // don't touch anything under me
    function xmlParser2(xml) {
        $(xml).find("img").each(function () {                       
        $(".the-views-images").append('<div class="mosaic-block third fade"><a href="/gallery/views/' + $(this).attr('src') + '" class="mosaic-overlay fancybox" data-fancybox-group="gallery" title="' + $(this).attr('alt') + '"></a><div class="mosaic-backdrop"><img src="/gallery/views/' + $(this).attr('src') + '?Action=thumbnail&Width=500&Height=375&algorithm=fill_proportional" alt="' + $(this).attr('alt') + '" /></div></div></div>');
        });
    // don't touch anything above me
    }

    $.ajax({
        type: "GET",
        url:'/gallery/moana/PhotoGallery.xml',  // Add your url to your photo gallery xml feed
        dataType: 'xml',
        success: xmlParser3
    });

    // don't touch anything under me
    function xmlParser3(xml) {
        $(xml).find("img").each(function () {                       
        $(".moana-images").append('<div class="mosaic-block third fade"><a href="/gallery/moana/' + $(this).attr('src') + '" class="mosaic-overlay fancybox" data-fancybox-group="gallery" title="' + $(this).attr('alt') + '"></a><div class="mosaic-backdrop"><img src="/gallery/moana/' + $(this).attr('src') + '?Action=thumbnail&Width=500&Height=375&algorithm=fill_proportional" alt="' + $(this).attr('alt') + '" /></div></div></div>');
        });
    // don't touch anything above me
    }
});

次に、main.js ファイル内に 3 つのコードがあり (これらは js ファイル内の関数を参照していると思います)、画像に jQuery 機能を提供します。

モザイク機能

mosaic : function(){
                    $('.fade').mosaic();
                }, // mosaic

同位体機能

isotype: function() {

                    $(window).load(function(){
                            if($('#thumb-gallery').size() === 0){return;}

            var $container = $('#thumb-gallery');
            $container.isotope({
                masonry: {
                    columnWidth: 1 //was 26
                },
                sortBy: 'number',
                getSortData: {
                    number: function($elem) {
                        var number = $elem.hasClass('element') ? $elem.find('.number').text() : $elem.attr('data-number');
                        return parseInt(number, 10);
                    },
                    alphabetical: function($elem) {
                        var name = $elem.find('.name'),
                            itemText = name.length ? name : $elem;
                        return itemText.text();
                    }
                }
            });
            var $optionSets = $('.meta.option-set'),
                $optionLinks = $optionSets.find('a');

                    $optionLinks.click(function() {
                        var $this = $(this);
                        // don't proceed if already selected
                        if ($this.hasClass('selected')) {
                            return false;
                        }
                        var $optionSet = $this.parents('.option-set');
                        $optionSet.find('.selected').removeClass('selected');
                        $this.addClass('selected');
                        // make option object dynamically, i.e. { filter: '.my-filter-class' }
                        var options = {},
                            key = $optionSet.attr('data-option-key'),
                            value = $this.attr('data-option-value');
                        // parse 'false' as false boolean
                        value = value === 'false' ? false : value;
                        options[key] = value;
                        if (key === 'layoutMode' && typeof changeLayoutMode === 'function') {
                            // changes in layout modes need extra logic
                            changeLayoutMode($this, options)
                        } else {
                            // otherwise, apply new options
                            $container.isotope(options);
                        }
                        return false;
                    });

                    }); // window.load()


        } // isotope()

ファンシーボックス機能

fancyBox : function(){
$('.fancybox').fancybox();
                }

これらの各参照関数は次のとおりです。

最初の読み込みとページの更新時にのみ正しく読み込まれるライブ ギャラリーをここで表示できます。

Web サイトの他のリンクをクリックした後、またはブラウザの [戻る] ボタンを使用した後に読み込まれません。

起こっているように見えるのは、画像の前に #thumb-gallery の高さが読み込まれるため、高さが小さすぎて画像が表示されないことです。左側のメニューをクリックすると、高さが更新され、ギャラリーが正常に機能します。変更される 2 つの値は、#thumb-image の高さです。

**PAGE LOAD:**  
<div class="four-fifths right last thumb-gallery super-list variable-sizes isotope" id="thumb-gallery" style="position: relative; overflow: hidden; height: 98px;">


**PAGE REFRESH:**  
<div class="four-fifths right last thumb-gallery super-list variable-sizes isotope" id="thumb-gallery" style="position: relative; overflow: hidden; height: 1359px;">

注: 高さはブラウザ ウィンドウによって異なります。

また、.isotope-item -webkit-transform: translate3d(0px, 0px, 0px); ページを更新しない限り、各画像グループで正しく読み込まれません。通常のページ読み込みでは、すべての画像グループが互いの上に配置されますが、ページの更新時には -webkit-transform: translate3d(0px 123px 0px) があり、垂直方向に間隔が空けられます。

これはすべて、append 関数の最後に呼び出されるモザイク、アイソトープ、またはファンシーボックス関数 (すべての関数ではないにしても) の 1 つに帰着すると思います。そうすれば、他の処理が行われる前に画像が読み込まれて追加されます。ただし、これを行う方法がわかりません。

さらに情報が必要な場合は、迅速に対応します。

ライブページ: moanabeach.businesscatalyst.com/gallery

前もって感謝します。

注: jquery ファイル (main、isotope、mosaic、fancybox) は作成していないため、main.js と他のファイルとの接続についてはわかりません。テンプレートが付属していました。私が変更した唯一のコードは追加コードです。

試み:

  • document.ready と window.load およびさまざまな関数をいじってみましょう。
  • JavaScriptコードとファイルの位置
4

0 に答える 0