Well, no one has answered but for future reference, I've settled on
using callbacks. I'm not sure if this is the most efficient way, so
someone should correct me if so?
a la:
$(element).effect(parameter, function() { secondeffect });
where secondeffect will trigger AFTER effect rather than
simultaneously.
On Sep 4, 5:26 am, alan <[EMAIL PROTECTED]> wrote:
> 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
> athttp://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);
>
> }