0

lynda.com の jquery チュートリアルを実行して、きちんとした効果とライト ボックスを備えた Java 駆動 (css 形式) の画像ギャラリーをセットアップしました。それは正常に動作します。

私は今、1 つのページに複数のギャラリーを作成し、それぞれに関連する画像のみを表示できるようにしたいと考えています。問題は、すべてのギャラリーが同じ画像を表示するタグ/ID がすべて同じであるためです。(問題の例については、... http://www.chartoonz.com/portfolio/illustration.htmlを参照してください) ご覧のように、基本的な機能は動作します。

あるギャラリーの機能をそのギャラリーに制限し、他のギャラリーをそのままにしておく Java スクリプトを取得するにはどうすればよいですか? 私は、jquery が $(document).ready を実行しているので、レンダリング時に発生するので、一度に 1 つのギャラリーしか実行できないと考えましたが、それはオンロード プレビュー イメージのみを考慮しています。どのサムネイル画像が押されてもすべてが同じことをしないように、ギャラリーを分離するにはどうすればよいですか? できますか?

私が言ったように、ループできると思っていましたが、それで問題が発生しています! すべての gallery_content タグを配列に取り込んでから、配列をループしようとしましたが、うまくいかなかったため、明らかにそうしていません。

問題を明確に表現できたことを願っています。どんな助けでも大歓迎です。これが私の関連するjavascriptです...

// What to do when the document is ready
$(document).ready(function(){


// Capture the thumbnail links

$('.gallery_thumbnails a').click(function(e){



// Disable standard link behavior

e.preventDefault();


// Fade out thumbnails
// Commented out to be in their own function (/**/)
/*
$('.gallery_thumbnails a').removeClass('selected');
$('.gallery_thumbnails a').children().css('opacity', '1');
$(this).addClass('selected');
$(this).children().css('opacity', '.4');
*/

// Add variables to link thumbnail to preview
var photo_caption = $(this).attr('title');
var photo_fullsize = $(this).attr('href');
var photo_preview = photo_fullsize.replace('_fullsize', '_preview');


$('.gallery_caption').slideUp(500);
$('.gallery_preview').fadeOut(500, function(){

// preload
$('.gallery_preload_area').html('<img src="'+photo_preview+'"/>');
$('.gallery_preload_area img').imgpreload(function(){

// Write the HTML into the page
$('.gallery_preview').html('<a class="overlaylink" href="'+photo_fullsize+'"       
title="'+photo_caption+'" style="background-image:url('+photo_preview+');"></a>');

// Update the html for the gallery caption
$('.gallery_caption').html('<p><a class="overlaylink zoom" href="'+photo_fullsize+'"     
title="'+photo_caption+'">View larger</a></p><p>'+photo_caption+'</p>')

$('.gallery_preview').fadeIn(500);
$('.gallery_caption').slideDown(500);

setFancyboxLinks();
updateThumbnails();

});

});

}

// Initialize the gallery on load
var first_photo_caption = $('.gallery_thumbnails a').first().attr('title');
var first_photo_fullsize =$('.gallery_thumbnails a').first().attr('href');
var first_photo_preview = first_photo_fullsize.replace('_fullsize', '_preview');

$('.gallery_caption').slideUp(500);
$('.gallery_preview').fadeOut(500, function(){

// preload
$('.gallery_preload_area').html('<img src="'+first_photo_preview+'"/>');
$('.gallery_preload_area img').imgpreload(function(){

// Write the HTML into the page
$('.gallery_preview').html('<a class="overlaylink" href="'+first_photo_fullsize+'" title= 
"'+first_photo_caption+'" style="background-image:url('+first_photo_preview+');"></a>');

// Update the html for the gallery caption
$('.gallery_caption').html('<p><a class="overlaylink zoom" href="'+first_photo_fullsize+'" 
title="'+first_photo_caption+'">View larger</a></p><p>'+first_photo_caption+'</p>')

$('.gallery_preview').fadeIn(500);
$('.gallery_caption').slideDown(500);

setFancyboxLinks();
updateThumbnails();

});

});
4

1 に答える 1

0

jQuery セレクターでより多くの ID を使用すると、ターゲットとする要素をより具体的にすることができ、ほとんどのブラウザーでコードがより高速に実行されます:-)

次のように、各 "galleryBodyWrapper" div に ID を追加してみてください。

div class="galleryBodyWrapper" id="gallery1">...

次に、次のようにギャラリーごとに個別のセレクターを作成できます。

$('#gallery1 .gallery_thumbnails').click(関数(e){...

もちろん、使用するギャラリーごとに 1 回ずつコードを書き出す必要があります。これを行うより適切な方法は、ギャラリー コードを再利用可能なオブジェクトとしてパッケージ化し、jQuery セレクターをそのコンストラクターに渡すことです。

  chartoonz.ui.initGalleries('div.galleryBodyWrapper');

init メソッドは次のようになります。

    /**
     * セレクターに一致するこのページの各 div のギャラリー オブジェクトを作成します
     *
     * @return void
     */
    initGalleries:関数(セレクター){
        chartoonz.$(セレクター).each(
            関数(intIndex、domEle){
                var galleryDiv = chartoonz.$(domEle);
                chartoonz.ui.galleries[intIndex] = new chartoonz.ui.gallery(galleryDiv);
            });

},

元のコードを次のようにリファクタリングできます (簡単にテストしましたが、HTML で動作するようです)。

//Set up a page namespace
chartoonz = {};
//localise the jQuery object to prevent conflicts
chartoonz.$ = jQuery;

/**
 * Object to contain page UI elements and interactions
 *
 */
chartoonz.ui={
    /**
     * Container for all chartoonz.ui.gallery objects on this page.
     * @var Array 
     */
    galleries:[],


    /**
     * Create a gallery object for each div on this page that matches the selector
     *
     * @return void
     */
    initGalleries:function(selector){

        chartoonz.$(selector).each(
                                   function(intIndex,domEle){
                                       var galleryDiv = chartoonz.$(domEle);
                                       chartoonz.ui.galleries[intIndex] = new chartoonz.ui.gallery(galleryDiv);
                                   });

    },


    /**
     * The gallery object
     */
    gallery:function(context){
        /**
         * container for all of the thumbnails in this gallery
         * @var Array
         */
        this.thumbnails = [];
        /**
         * The caption div for this gallery.
         * @var jQuery
         */
        this.captionEle = chartoonz.$('.gallery_caption',context);
        /**
         * The preview div for this gallery.
         * @var jQuery
         */
        this.previewEle = chartoonz.$('.gallery_preview',context);
        /**
         * The pre-load div for this gallery.
         * @var jQuery
         */
        this.preloadEle = chartoonz.$('.gallery_preload_area',context);
        /**
         * The pre-load image for this gallery.
         * @var jQuery
         */
        this.preloadEleImg = chartoonz.$('img',this.preloadEle);

        //initialise the thumbnails
        var parentGallery = this;
        chartoonz.$('a',context).each(
                                      function(intIndex,domEle){
                                          var obj = chartoonz.$(domEle);

                                          obj.click(function(e){
                                                    // Disable standard link behavior
                                                    e.preventDefault();

                                                    // Add variables to link thumbnail to preview
                                                    var photo_caption = obj.attr('title');
                                                    var photo_fullsize = obj.attr('href');
                                                    var photo_preview = photo_fullsize.replace('_fullsize', '_preview');

                                                    parentGallery.setMain(photo_caption,photo_fullsize,photo_preview);

                                                    });
                                          parentGallery.thumbnails[intIndex] = obj; 

                                      });

        /**
         * Update the html for the  gallery caption
         *
         * @return void
         */
        this.setCaption = function(photo_caption,photo_fullsize){

            this.captionEle.html('<p><a class="overlaylink zoom" href="'+photo_fullsize+'" title="'+photo_caption+'">View larger</a></p><p>'+photo_caption+'</p>')

        }


        /**
         * Set the  html for the preview
         *
         * @return void
         */
        this.setPreview = function(photo_caption,photo_fullsize,photo_preview){

            this.previewEle.html('<a class="overlaylink" href="'+photo_fullsize+'" title= "'+photo_caption+'" style="background-image:url('+photo_preview+');"></a>');  

        }


        /**
         * Set the  main image
         *
         * @return void
         */
        this.setMain = function(photo_caption,photo_fullsize,photo_preview){

            this.captionEle.slideUp(500);
            var parentGallery = this;
            this.previewEle.fadeOut(500, function(){

                                    // preload
                                    parentGallery.preloadEle.html('<img src="'+photo_preview+'"/>');
                                    parentGallery.preloadEleImg.imgpreload(function(){

                                                                           parentGallery.setPreview(photo_caption,photo_fullsize,photo_preview);
                                                                           parentGallery.setCaption(photo_caption,photo_fullsize);

                                                                           parentGallery.previewEle.fadeIn(500);
                                                                           parentGallery.captionEle.slideDown(500);

                                                                           setFancyboxLinks();
                                                                           updateThumbnails();


                                                                           });




                                    });

        }

        //  Initialize the gallery on load
        var first_photo_caption = this.thumbnails[0].attr('title');
        var first_photo_fullsize =this.thumbnails[0].attr('href');
        var first_photo_preview = first_photo_fullsize.replace('_fullsize', '_preview');
        this.setMain(first_photo_caption,first_photo_fullsize,first_photo_preview);   

    }


};


$(document).ready(function(){
                  // Navigation Menu
                  navWrapper();
                  //footerText();
                  followLogos();
                  calculateDate();

                  //This line sets up the galleries
                  chartoonz.ui.initGalleries('div.galleryBodyWrapper');

                  });


// Functions... Your other functions go here as before.

それが役立つことを願っています

_ペッツ

于 2012-07-10T21:39:49.910 に答える