views:

270

answers:

3

Below I use the id of a clicked item to tell my function which <div> to animate.

However it never seems to animate....

Basically you click and <img> and it uses the ID of that image previewItem to tell what <div> to animate. '#p + previewItem'

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"&gt;&lt;/script&gt;
<script type="text/javascript" src="jquery.easing.1.2.js" ></script> 

<script type="text/javascript">
<!--

    $(document).ready(function()
    {
        var previewItem;

        $(this).click(function(event) {
            //get the ID of the clicked area
            previewItem = event.target.id;

            //alert("#p" + previewItem);
            $("#p" + previewItem).animate({left:"50%"},{duration: 3000,easing: easeOutBounce});

            //alert(previewItem);
        });
    });

    // wrap as a jQuery plugin and pass jQuery in to our anoymous function
    (function ($) {
        $.fn.cross = function (options) {
            return this.each(function (i) { 
                // cache the copy of jQuery(this) - the start image
                var $$ = $(this);

                // get the target from the backgroundImage + regexp
                var target = $$.css('backgroundImage').replace(/^url|[\(\)'"]/g, '');

                // nice long chain: wrap img element in span
                $$.wrap('<span style="position: relative;"></span>')
                    // change selector to parent - i.e. newly created span
                    .parent()
                    // prepend a new image inside the span
                    .prepend('<img>')
                    // change the selector to the newly created image
                    .find(':first-child')
                    // set the image to the target
                    .attr('src', target);

                // the CSS styling of the start image needs to be handled
                // differently for different browsers
                if ($.browser.msie || $.browser.mozilla) {
                    $$.css({
                        'position' : 'absolute', 
                        'left' : 0,
                        'background' : '',
                        'top' : this.offsetTop
                    });
                } else if ($.browser.opera && $.browser.version < 9.5) {
                    // Browser sniffing is bad - however opera < 9.5 has a render bug 
                    // so this is required to get around it we can't apply the 'top' : 0 
                    // separately because Mozilla strips the style set originally somehow...                    
                    $$.css({
                        'position' : 'absolute', 
                        'left' : 0,
                        'background' : '',
                        'top' : "0"
                    });
                } else { // Safari
                    $$.css({
                        'position' : 'absolute', 
                        'left' : 0,
                        'background' : ''
                    });
                }

                // similar effect as single image technique, except using .animate 
                // which will handle the fading up from the right opacity for us
                $$.hover(function () {
                    $$.stop().animate({
                        opacity: 0
                    }, 250);
                }, function () {
                    $$.stop().animate({
                        opacity: 1
                    }, 2000);
                });
            });
        };

    })(jQuery);

    // note that this uses the .bind('load') on the window object, rather than $(document).ready() 
    // because .ready() fires before the images have loaded, but we need to fire *after* because
    // our code relies on the dimensions of the images already in place.
    $(window).bind('load', function () {
        $('img.fade').cross();
    });

//-->
</script>
A: 

In this part of the code:

 $(document).ready(function()
{
    var previewItem;

    $(this).click(function(event) 
    {
        //get the ID of the clicked area
            previewItem = event.target.id;

            //alert("#p" + previewItem);
            $("#p" + previewItem).animate({left:"50%"},{duration: 3000,easing: easeOutBounce});

            //alert(previewItem);
    });
});

the $(this) call is not the divs. If you want to know if ANY div on the page is clicked you can try:

  $(document).ready(function()
{
    var previewItem;

    $("div").click(function(event) 
    {
        //get the ID of the clicked area
            previewItem = event.target.id;

            //alert("#p" + previewItem);
            $("#p" + previewItem).animate({left:"50%"},{duration: 3000,easing: easeOutBounce});

            //alert(previewItem);
    });
});

Then any div will fire the event.

Vincent Ramdhanie
Hrmmm. But the .click works. I am not animating the <divs> clicked. You click <img id="1"> and it animates <div id="p1">
ian
And the alert(previewItem) outputs what you want? Have you tried using the jQuery.live function? It might be because you are adding content with jQuery. Bind should work... but give .live a go.
Steven
yea the //commented out alerts all work and return correct values. trie with a .live function but no result.
ian
are you able to manipulate the $("#p" + previewItem) in any other ways?
Steven
A: 

I'm no jQuery guru, but shouldn't you at least have $('div').click(function(event)?

I also put an alert('hellooo') inside my script, to se if it ever triggers.

Hmm.... you say you put .bind on Window because you need all images to be loaded. I really though the $(document).ready was used for this.

Ready means that all things has loaded, and now you can do stuff with it?

Steven
ok.... now how where you able to highlight the code snippets? I just want to know how, so I can do it later :)
Steven
Apparently a document can be loaded but not all the images. Thus the .bind...
ian
You select the text and click the code button or put single quotes tilde key around the text
ian
+1  A: 

While the other answers are also correct, if you're using the jquery easing plugin (found at http://gsgd.co.uk/sandbox/jquery/easing/), you should take note that the easing option is a string.

So your call would be:

$("#p" + previewItem).animate({left:"50%"},{duration: 3000,easing: 'easeOutBounce'});
Alex Sexton
I new it would be something like this... Thanks!
ian