別のアプローチはどうですか?... を使用する代わりに、イベントを各サムネイルにバインドし、コンテナー
内の大きな画像を置き換え.replace()
ます。.each()
click
#panel
$("#thumbs img").each(function (i) {
$(this).click(function () {
var imgPanel = '<a href="http://bloc-nc.com/projects/images/gateway/gateway' + (i + 1) + '_zoom.png" class="zoom" tabindex="' + (i + 1) + '"><img src="http://bloc-nc.com/projects/images/gateway/gateway' + (i + 1) + '_large.png" id="largeImage" /></a>';
$("#panel").html(imgPanel);
}); // click
}); // each
ズーム画像 (タグ内) と大きな画像 (タグ内)の両方の数imgPanel
を実際に置き換える変数を作成していることに注意してください。(i+1)
href
<a>
src
<img>
<div id="panel">
次に、クリックされたサムネイルに応じて、コンテナーのコンテンツが置き換えられます。
一方、$("a.zoom").fancybox();
fancybox を でリンクにバインドするのは簡単class="zoom"
ですが、fancybox v1.3.4 を使用しており、そのバージョンは動的に追加された要素をサポートしていません。参照用にこの投稿を参照してください。
したがって、これらの動的要素をサポートするには、fancybox を別の方法で初期化する必要があります (大きな画像を置き換えるたびに、リンクを.zoom
動的に変更します) 。
このスクリプトはトリックを行う必要があります:
$(".gallery").delegate("#panel", "focusin", function () {
$("a.zoom").fancybox();
});
v1.7.x より前のバージョンの jQuery を使用しているため、参照の投稿では as の.delegate()
代わりに使用していることに注意してください。.on()
というわけで、まとめて
$(document).ready(function () {
$("#thumbs img").each(function (i) {
$(this).click(function () {
var imgPanel = '<a href="http://bloc-nc.com/projects/images/gateway/gateway' + (i + 1) + '_zoom.png" class="zoom" tabindex="' + (i + 1) + '"><img src="http://bloc-nc.com/projects/images/gateway/gateway' + (i + 1) + '_large.png" id="largeImage" /></a>';
$("#panel").html(imgPanel);
}); // click
}); // each
// initialize fancybox for dynamically added elements
$(".gallery").delegate("#panel", "focusin", function () {
$("a.zoom").fancybox();
});
}); // ready
JSFIDDLEを参照してください