Hello,
I posted earlier about a gallery for portfolio purposes. After being
unable to find anything particularly suitable, I wanted to write my
own but am having a few issues.

I hope to release this gallery as a well documented and easy to use
plugin for people with similar needs (very customizable and simple
gallery in terms of divs that will be updated, reads from xml,
preloader etc). Of course, it is far from complete, and as I am pretty
new to jquery and not the most proficient javascript coder, I hope
people can give me feedback too!

Here are my issues:

1) I have previous and next buttons, but I want them disabled until
the image they load is finished its effect (fadeIn)

2) I've built a basic preloader that loads images on either 'side' of
the current image, I don't know how efficiently it is done or if it
could be done better, but sometimes clicking too fast will cause the
fadeIn to go (with no image loaded) then the image suddenly appears.
** Is there a more surefire way to hold off the fadeIn until the image
is fully loaded? ** (they are preloaded as an array of Image()
objects)

3) it seems like after fading in, some objects jump down a pixel or
two which is okay i suppose but annoying - am I doing something wrong?

An initial version in testing with some dummy data can be seen at
http://prod.waffl.ca

Thank you so much in advance!

Code is as follows:

/*
wafflgallery.js v0.1a
September 4, 2007
[EMAIL PROTECTED] // http://www.waffl.ca

Please wait until this is completed before using! Once I am done, you
can feel free to modify and redistribute it as you like as long as you
keep this commented header intact and unmodified.
*/

curPos = 0;

function loadGallery(xmlPath, imageContainerId1, imageCaptionId1,
imageControlBox1, imagePrevButtonId1, imageNextButtonId1)
{
        /* Load the xml */
        $.ajax({
                type: "GET",
                url: xmlPath,
                dataType: "xml",
                success: function(xmlData)
                {
                        xmlDataSet = xmlData;
                        resultSetLength = $("item",xmlDataSet).length - 1;

                        preloadImg = new Array(resultSetLength);

                        /* load everything into global variables */
                        imageContainerId = imageContainerId1;
                        imageCaptionId = imageCaptionId1;
                        imageControlBox = imageControlBox1;
                        imagePrevButtonId = imagePrevButtonId1;
                        imageNextButtonId = imageNextButtonId1;

                        /* Set up the prev/next buttons */
                        $(imagePrevButtonId).click(function()
                        {
                                curPos--;
                                preload();
                                updateGallery();
                        });

                        $(imageNextButtonId).click(function()
                        {
                                curPos++;
                                preload();
                                updateGallery();
                        });

                        /* SlideIn and Load the first image & caption without 
an effect */
                        
$(imageContainerId).fadeIn(1000).SlideInUp(1000,null,'easeout');
                        $(imageContainerId + " img").attr({"src": 
getCurrentImage(), "alt":
getCurrentTags()});
                        $(imageCaptionId).html(getCurrentCaption());
                        $(imageControlBox).fadeIn(5000);
                        preload();
                },

                error: function()
                {
                        $(imageContainerId).html("wafflgallery - error loading 
" +
xmlPath);
                }
        });
}

/* returns the current image */
function getCurrentImage(specPos) {
        if (specPos)
                return $("imageLocation:eq(" + specPos + ")",xmlDataSet).text();
        else
                return $("imageLocation:eq(" + curPos + ")",xmlDataSet).text();
}

/* returns the current title */
function getCurrentTitle() {
        return $("title:eq(" + curPos + ")",xmlDataSet).text();
}

/* returns the current caption */
function getCurrentCaption() {
        return "<a href=" + getCurrentLink() + " alt=" + getCurrentTitle() +
">" + getCurrentTitle() + "</a> // " + $("year:eq(" + curPos +
")",xmlDataSet).text();
}

/* returns the current tags */
function getCurrentTags() {
        return $("tags:eq(" + curPos + ")",xmlDataSet).text();
}

/* returns the current link */
function getCurrentLink() {
        return $("link:eq(" + curPos + ")",xmlDataSet).text();
}


function preload() {
        if ((curPos == 0 && !preloadImg[resultSetLength]) || (curPos ==
resultSetLength && !preloadImg[0])) {
                preloadImg[resultSetLength] = new Image();
                preloadImg[resultSetLength].src = 
getCurrentImage(resultSetLength);
                preloadImg[1] = new Image();
                preloadImg[1].src = getCurrentImage(1);
        }
        else if (!preloadImg[curPos - 1] || !preloadImg[curPos + 1]) {
                preloadImg[curPos - 1] = new Image();
                preloadImg[curPos - 1].src = getCurrentImage(parseInt(curPos - 
1));
                preloadImg[curPos + 1] = new Image();
                preloadImg[curPos + 1].src = getCurrentImage(parseInt(curPos + 
1));
        }
}

/* updates the divs with the specific effect */
function updateGallery()
{
        if (curPos > resultSetLength)
                curPos = 0;
        else if (curPos < 0)
                curPos = resultSetLength;

        /* update with effect*/
        $(imageContainerId + "
img").attr("src",getCurrentImage()).fadeIn(1000);
        $(imageCaptionId).html(getCurrentCaption()).fadeIn(1000);
}

Reply via email to