こんにちは。
javascript初心者です。
運営中のサイトで要望があり、機能を追加することになりましたが、
動作が安定しないため、質問させていただきます。
現在運営しているECサイトの商品画像を、
マウスオーバーで拡大したいとの要望です。
現在の状態は、
メインの画像と、サムネイル(サブの画像)×n枚
という感じになっていて、
サムネイルにマウスオーバーすると、
メイン画像のゾーンの画像が切り替わるという状態になっています。
まずはサムネイルをマウスオーバーで切り替えるところを、
クリックで切り替え、
メイン画像にマウスオーバーで拡大機能を追加するというやり方にしようと思いました。
拡大するためのjsは、
・SergeLand Image Zoomer
を使うことにいたしました。
書いたものがこちらです。
<script src="http://◯◯◯.jp/js/zoomsl-3.0.min.js" type="text/javascript"></script> <div class="detail_wrapper_left"> <div id="product_img"> <img id="product_large_image" class="large" src="@(imageUrl)?@ViewBag.RCC" data-image-source="@imageUrl" alt="" data-large="@(imageUrl)?@ViewBag.RCC" title=""/> </div> <div> @if(descriptionImages.Count() > 0) { foreach(var descImage in descriptionImages) { string imgPath = string.IsNullOrEmpty(descImage.FilePath)? "product/item/images/"+ descImage.ProductId +"/Description/"+ descImage.ViewOrder: descImage.FilePath; imgPath = GenLinkUri(imgPath, "~/"); <img class="thmbnail" src="@(imgPath)?@ViewBag.RCC" alt="" /> }} </div> <script type="text/javascript" defer> $(function(){ $('.thmbnail').bind("click", function(){ $("#product_large_image").attr('src', $(this).attr('src')); $("#product_large_image").imagezoomsl({ zoomrange: [1, 10] }); }, function(){ $("#product_large_image").attr('src', $("#product_large_image").attr('data-image-source')); } ); }); </script>こちらのサイトは、商品画像を商品のIDから引用しているため、
通常であれば◯◯.jpeg等で画像を指定できるところを、
パスが固定ではないため、上記のような書き方になりました。
(おそらく間違っている部分も多いかと思いますが。)
上記の書き方の問題点としては、
・画像が切り替わらない
・ズーム機能は動作するが、サムネイルを切り替えてもズームウインドウ内に表示されない
です。
もしかしたらjavascriptの実行に優先度等があり、
順序がおかしく動作しないのかと予想しております...
詳しい方いらっしゃいましたら力お貸しいただけると幸いです。
どうぞよろしくお願いいたします。
追記
サムネイルも、大きな画像も、同じ画像を使っています。
@(imgPath)?@ViewBag.RCC というのが画像のパスで、
800x800の画像をサムネイルでは縮小表示、
メイン画像でも少しだけ縮小して表示しているものを
スコープ内では800x800のまま表示したいと思っています。
スコープ内の画像は@(imgPath)?@ViewBag.RCCを
そのまま入れれば800x800で表示されることはわかっています。
追記2
js部分を
に書き換えることで、サムネイルをクリックして
メイン画像が変わるようになりました。
ズーム機能も動作しておりますが、
1枚目メイン画像のみしかズームされません。
画像切り替え後マウスオーバーしても、
1枚目のメイン画像がズームされてしまいます。

回答2件
あなたの回答
tips
プレビュー