jquery modification, ease to hide/show and my syntax sucks

261 views Asked by At

Finally got a scrolling menu in for the customer, and now the want it to be a show() hide() situation. I don't understand jquery enough to do anything other than use it like legos yet.

My first thought was, "this will be easy" I'll just change the animation to a show or hide. So I tried:

if (idx > current) {
    $current.show()
    $next.hide()
}
elseif { ... }

Anyone have any quick pointers? This is the original code:

$(function() {

    //caching
    //next and prev buttons
    var $cn_next    = $('#cn_next');
    var $cn_prev    = $('#cn_prev');
    //wrapper of the left items
    var $cn_list     = $('#cn_list');
    var $pages        = $cn_list.find('.cn_page');
    //how many pages
    var cnt_pages    = $pages.length;
    //the default page is the first one
    var page        = 1;
    //list of news (left items)
    var $items         = $cn_list.find('.cn_item');
    //the current item being viewed (right side)
    var $cn_preview = $('#cn_preview');
    //index of the item being viewed. 
    //the default is the first one
    var current        = 1;

    /*
    for each item we store its index relative to all the document.
    we bind a click event that slides up or down the current item
    and slides up or down the clicked one. 
    Moving up or down will depend if the clicked item is after or
    before the current one
    */
    $items.each(function(i){
        var $item = $(this);
        $item.data('idx',i+1);

        $item.bind('click',function(){
            var $this = $(this);
            $cn_list.find('.selected').removeClass('selected');
            $this.addClass('selected');
            var idx      = $(this).data('idx');
            var $current = $cn_preview.find('.cn_content:nth-child('+current+')');
            var $next    = $cn_preview.find('.cn_content:nth-child('+idx+')');

            /* ITEM SCROLLING */

            /* DOWN THE LIST */
            if(idx > current){
                $current.stop().animate({'top':'-1000px'},600,'linear',function(){
                    $(this).css({'top':'1000px'});
                });
                $next.css({'top':'1000px'}).stop().animate({'top':'5px'},600,'linear');
            }  
            /* UP THE LIST */
            else if(idx < current){
                $current.stop().animate({'top':'1000px'},600,'linear',function(){
                    $(this).css({'top':'1000px'});
                });
                $next.css({'top':'-1000px'}).stop().animate({'top':'5px'},600,'linear');
            }
            current = idx;
        });
    });

});
1

There are 1 answers

0
HandiworkNYC.com On BEST ANSWER

Here's a pointer: Using "var" over and over again is repetitive and unnecessary.

var $cn_next = $('#cn_next'),
    $cn_prev = $('#cn_prev'),
    $cn_list = $('#cn_list'),
    $pages = $cn_list.find('.cn_page'),
    cnt_pages = $pages.length,
    page = 1,
    $items = $cn_list.find('.cn_item'),
    $cn_preview = $('#cn_preview'),
    current = 1;