2016-07-06 6 views
3

画面が768px未満の場合は、製品ギャラリーのナビゲーションサムネイルを水平位置に移動する必要があります。Magento2 gallery afterLoadコールバック

このためには、ギャラリーが完全に読み込まれた後にトリガーされるコールバックに接続する必要があります。ギャラリーウィジェットがx-magento-initメソッドを介して初期化されるときにこれを行う方法を

<script type="text/x-magento-init"> 
    { 
     "[data-gallery-role=gallery-placeholder]": { 
      "mage/gallery/gallery": { 
       ... 

      } 
     } 
    } 
</script> 

私が追加してみました:

<script type="text/javascript"> 
    require(['jquery', 'mage/gallery/gallery'], function($, gallery){ 
     console.log($('[data-gallery-role=gallery-placeholder]').data('gallery')); 
    }); 
</script> 

をそして、それはundefinedを出力します。しかし、コンソールから(ギャラリーがロードされた後に)同じものを呼び出すと、fotorama APIメソッドを呼び出すことができるギャラリーオブジェクトが含まれています。

ギャラリーの初期化後に.data('gallery')オブジェクトを取得するにはどうすればよいですか?

多くの感謝!

+0

なぜCSSのメディアクエリを使用しないのですか? – madalinivascu

+0

@ madalinivascuこれは非効率的ではないでしょうか? cssはすでにveritcal/horizo​​ntalポジショニングのためにあります。なぜ新しいルールを作成するのですか?それ以外に、彼らはギャラリーの振る舞いを変更するためのjavascriptメソッドを提供しています。私はそれらにアクセスする方法を学ぶ必要があり、その後は単なるコード行にすぎません。 –

答えて

7

fotorama apiオブジェクトの追加後にトリガーされるgallery:loadedイベントを使用して解決策が見つかりました。オプションはそのステップの後にリセットされるためgallery:loadedイベントにapi.updateOptions()

<script type="text/javascript"> 
    require(['jquery', 'mage/gallery/gallery'], function($, gallery){ 
     $('[data-gallery-role=gallery-placeholder]').on('gallery:loaded', function() { 
      if($(window).width() < 768){ 
       $(this).on('fotorama:ready', function(){ 
        var api = $(this).data('gallery'); 
        if(api.fotorama.options.navdir == 'vertical'){ 
         api.fotorama.options.navdir = 'horizontal'; 
         api.fotorama.resize(); 
        } 
       }); 
      } 
     }); 
    }); 
</script> 

更新オプションは何もしません。だから私はfotorama:readyイベントにフックしなければならなかった。