FROM CACHE - jp_header
このコミュニティはピアツーピアサポートに移行しました。Shopify サポートは今後、このコミュニティへのサービスを提供いたしません。これからもぜひ、他のマーチャントやパートナーとつながり、サポートし合い、経験を共有してください。 当社の行動規範に違反する行動や削除を希望するコンテンツがありましたら、引き続きご報告ください

jQueryでLiquidの変数を使いたい

jQueryでLiquidの変数を使いたい

yuukitanaka
新規メンバー
4 0 0

こちらのURLを参考に、マウスオーバーでの画面切り替え機能の導入を進めています。

 

https://osyu-web.com/jquery/mouseover-imagechange/

 

そのまま使用すると、テーマからセクションブロックを複数作成した際、クラス名.subimageや.mainimagが一意でないため、マウスオーバーすると他のブロックの画像まで切り替わります。

クラス名(.subimageや.mainimag)にLiquidでblock.idを足すと一意なクラス名になるため、下記のようにコードを追加しましたが、マウスオーバーしても画像が切り替わりません。

 

事前にassignで変数を割り当て、jQueryのvar blockID...で読み出し、各class名に足しています。

大まかな流れは間違っていないのではと思うのですが、ご助力いただけないでしょうか。

 

 

 

 

{% assign liquidblockID = block.id %}

<script>

var blockID = {{ liquidblockID }};
$(function(){
$('.subimage li').hover(function(){
//オーバーしたliのインデックスを取得
var index = $('.subimage--'+blockID li').index(this);
//オーバーした画像URLを取得
var imageurl = $('.subimage--'+blockID' li').eq(index).find('img').attr('src');
//ulのクラス名を取得(空白で分割)
className = $(this).parent().attr('class').split(" ");
//元のメイン画像を保存しておく
defaultImage = $('img.mainimage--'+blockID'.'+className[1]).attr('src');
$('img.mainimage--'+blockID'.'+className[1]).attr('src',imageurl);
},function(){
$('img.mainimage--'+blockID'.'+className[1]).attr('src',defaultImage);
});
});
</script>

<div class="box_around">
<div class="main_image_box">
<img src="{{ block.settings.image | img_url: '400x' }}" alt="{{ block.settings.image.alt }}" class="lazyload mainimage--{{ block.id }}">
</div>				
</div><!-- .box_around end -->

<div class="box_around2">
<!-- ***** サムネイル ***** -->
<div class="detail">
<ul class="subimage--{{ block.id }}">
  <li><img src="{{ block.settings.image | img_url: '400x' }}" alt="{{ block.settings.image.alt }}"></li>
  <li><img src="{{ block.settings.image2 | img_url: '400x' }}" alt="{{ block.settings.image.alt }}"></li>
  <li><img src="{{ block.settings.image3 | img_url: '400x' }}" alt="{{ block.settings.image.alt }}"></li>
</ul>
</div><!-- .detail end -->
</div><!-- .box_around end -->

 

1件の返信1

yuukitanaka
新規メンバー
4 0 0

自己解決しました。結果的にjQueryでLiquidの変数を使うことなくやりたいことは実現できました。

 

 

          <script>
            $(function(){
                $('.subimage li').hover(function(){
                    //オーバーしたliのインデックスを取得
                    var index = $('.subimage li').index(this);
                    //オーバーした画像URLを取得
                    var imageurl = $('.subimage li').eq(index).find('img').attr('src');
                    //ulのクラス名を取得(空白で分割)
                    className = $(this).parent().attr('class').split(" ");
                    //元のメイン画像を保存しておく
                    defaultImage = $('img.mainimage.'+className[1]).attr('src');
                    $('img.mainimage1.'+className[1]).attr('src',imageurl);
                },function(){
                    $('img.mainimage1.'+className[1]).attr('src',defaultImage);
                });
            });
          </script>

            
                <div class="box_around">
                  <div class="main_image_box">
                    <img src="{{ block.settings.image | img_url: '400x' }}" alt="{{ block.settings.image.alt }}" class="lazyload mainimage1 img-{{block.id}}">
                  </div>				
                </div><!-- .box_around end -->

                <div class="box_around2">
                  <!-- ***** サムネイル ***** -->
                  <div class="detail">
                    <ul class="subimage img-{{block.id}}">
                      <li><img src="{{ block.settings.image | img_url: '400x' }}" alt="{{ block.settings.image.alt }}"></li>
                      <li><img src="{{ block.settings.image2 | img_url: '400x' }}" alt="{{ block.settings.image.alt }}"></li>
                      <li><img src="{{ block.settings.image3 | img_url: '400x' }}" alt="{{ block.settings.image.alt }}"></li>
                    </ul>
                  </div><!-- .detail end -->
                </div><!-- .box_around end -->