i'm modified jcarousellite to have indicators that are updated based on
position of the element. it works as desired when i set visibility to 1 but
when i use fractions (2.75) it perform the function correctly. 

can anyone help point me to the problem with my code? thanks

this is the function to update indicators:
                        function update_navigation(curr){
                                var     kids = $(o.panel);
                                var cloneVal = (o.circular) ? 2 : 0;
                                var pos = (kids.size()-cloneVal <= curr) ? 
(curr > kids.size()-cloneVal)
? 2 : kids.size()-cloneVal : curr;
                                pos = (pos == 0) ? kids.size()-cloneVal : pos;

                                var     indicatorImages =       
$(o.btnIndicator);
                                var sectionLinks = $("#sectionlinks a");

                                for(k = 0; k < indicatorImages.size(); k++){
                                        if(pos == k+1){
                                                
$(indicatorImages[k]).attr("class", 'on');
                                        } else {
                                                
$(indicatorImages[k]).attr("class", 'off');
                                        }
                                }
                                
                                for(k = 0; k < sectionLinks.size(); k++){
                                        if(pos == k+1){
                                                
$(sectionLinks[k]).attr("class", 'selected');
                                        } else {
                                                
$(sectionLinks[k]).attr("class", 'off');
                                        }
                                }
                        };


this is the full js file:
(function($) { // Compliant with jquery.noConflict()
    $.fn.jCarouselLite = function(o) {
        o = $.extend({
            btnPrev: null,
            btnNext: null,
                                                btnRegExp: null,
                                                btnNavTarget: null,
            btnGo: null,
                                                btnIndicator: "ul.nav-carousel 
li",
            mouseWheel: false,
            auto: true,
                                                pauseOnHover: true,
                        
                                                disableClass: "disabled",
            speed: 3000,
            easing: null,

            vertical: false,
            circular: true,
            visible: 2.75,
            start: 0,
            scroll: 1,
                                                autoTimer: true,
            rows: 1, //ADDED: Property to allow multiple rows

            beforeStart: null,
            afterEnd: null,

                                                carousel: "div.content-body 
div.carousel",
                                                panel: "div.cell-wrapper",
                                                labels: false,
                
                                                createNav: false,
                                                btnNavContainer: '<ul 
class="nav-carousel"></ul>',
                                                btnNavTarget: 'ul.nav-carousel',
                                                btnPrevHtml: '<li class="prev"> 
# previous </li>',
                                                btnNextHtml: '<li class="next"> 
# next </li>'

        }, o || {});


        return this.each(function() { // Returns the element collection.
Chainable.

            var running = false, animCss = o.vertical ? "top" : "left",
sizeCss = o.vertical ? "height" : "width";
            var div = $(this), ol = $(o.carousel), tLi = $(o.panel,
o.carousel), tl = tLi.size(), v = o.visible;
            var rowCss = o.vertical ? "width" : "height"; //ADDED: rowCss is
used to set the height/width of the viewport based on how many rows are
showing
                        var isMouseOver = false;

                        // added: only perform if li > 1
            if(o.circular && tl > 1) { 
                                
ol.prepend(tLi.slice(tl-v-1+1).clone()).append(tLi.slice(0,v).clone());
                                o.start += v;
                        }
        
                        if(o.createNav){
                                create_navigation();
                        }
                        update_navigation(1);

            var li = $(o.panel, o.carousel), itemLength = li.size(), curr =
o.start;
            div.css("visibility", "visible");
                        
                        if(tl > 1){
                                hideAndShowFlashContent(li, 1);
                        }
                        
            li.css({ overflow: "hidden", float: o.vertical ? "none" : "left"
});
            ol.css({ margin: "0", padding: "0", position: "relative",
"list-style-type": "none", "z-index": "1" });
            div.css({ overflow: "hidden", position: "relative", "z-index":
"2", left: "0px" });

            var liSize = o.vertical ? height(li) : width(li); // Full li
size(incl margin)-Used for animation
            var liRowSize = o.vertical ? width(li) : height(li); //ADDED:
size of the li's row
            var olSize = ((liSize * itemLength) / o.rows) + (liSize / 1.5);
// size of full ul(total length, not just for the visible items)
            var divSize = liSize * v; // size of entire div(total length for
just the visible items)
            var rowSize = liRowSize * o.rows; //ADDED: gets the size in
pixels of the height/width of the viewport

            li.css({ width: li.width(), height: li.height() });
            ol.css(sizeCss, olSize + "px").css(animCss, -(curr * liSize));

                        /*div.css(sizeCss, divSize + "px");*/ // Width of the 
DIV. length of
visible images
                        ol.css(rowCss, rowSize + "px"); //ADDED: Height of the 
DIV; MODIFIED:
height of ol instead of div

                        li.mouseover(function(){ isMouseOver = true; });        
                li.mouseout(function(){ isMouseOver = false; });

                        //ADDED: special consideration for vertical carousels 
with multiple
rows
                        if (o.vertical && o.rows > 1) {
                                ol.children().filter(function(index) {
                                        return ((index + 1) % o.rows > 0);
                                }).css({ float: "left", width: "" });
                        }

                        if(o.btnPrev){
                                $(o.btnPrev).mouseover(function(){ isMouseOver 
= true; });
                                $(o.btnPrev).mouseout(function(){ isMouseOver = 
false; });            
                                $(o.btnPrev).livequery("click",function() {
                                        return go(curr-o.scroll);
                                });
                        }

                        if(o.btnNext){
                                $(o.btnNext).mouseover(function(){ isMouseOver 
= true; });
                                $(o.btnNext).mouseout(function(){ isMouseOver = 
false; });        
                                $(o.btnNext).livequery("click",function() {
                                        return go(curr+o.scroll);
                                });
                        }
                        
                        if(o.btnGo) {
                                $.each(o.btnGo, function(i, val) {
                                        $(val).click(function() {
                                                return go(o.circular ? 
o.visible+i : i+1);
                                        });
                                });
                        }

                        if (o.mouseWheel && div.mousewheel) {
                                div.mousewheel(function(e, d) {
                                        return d > 0 ? go(curr - o.scroll) : 
go(curr + o.scroll);
                                });
                        }

                        if(o.auto){    
                                setInterval(function() {
                                        if(o.pauseOnHover && isMouseOver) 
return;                    
                                        go(curr+o.scroll);
                                }, o.auto+o.speed);
                        }

            function vis() {
                return li.slice(curr).slice(0, v);
            };

            function go(to) {
                if (!running) {

                    if (o.beforeStart)
                        o.beforeStart.call(this, vis());

                    if (o.circular) { // If circular we are in first or
last, then goto the other end
                                                // console.debug(to,curr);
                        if (to <= o.start - v - 1) { // If first, then goto
last
                            ol.css(animCss, -((itemLength - (v * 2)) *
liSize) + "px");
                                                        // If "scroll" > 1, 
then the "to" might not be equal to the
condition; it can be lesser depending on the number of elements.
                                                        curr = to == o.start - 
v - 1 ? itemLength - (v * 2) - 1 : itemLength
- (v * 2) - o.scroll;
                        } else if (to >= itemLength - v + 1) { // If last,
then goto first
                            ol.css(animCss, -((v) * liSize) + "px");
                            // If "scroll" > 1, then the "to" might not be
equal to the condition; it can be greater depending on the number of
elements.
                            curr = to == itemLength - v + 1 ? v + 1 : v +
o.scroll;
                        } else curr = to;
                    } else {
                                                // If non-circular and to 
points to first or last, we just return.
                        //ADDED: This determines when to stop scrolling when
more than 1 row is viewable
                        if (to < 0 || to > ((itemLength - v) / o.rows))
return;
                        else curr = to;
                    }  // If neither overrides it, the curr will still be
"to" and we can proceed.

                    running = true;

                    ol.animate(
                    animCss == "left" ? { left: -(curr * liSize)} : { top:
-(curr * liSize) }, o.speed, o.easing,
                    function() {
                        if (o.afterEnd)
                            o.afterEnd.call(this, vis());
                        running = false;
                    }
                );

                                hideAndShowFlashContent(li, curr);
                                update_navigation((o.circular) ? 0+curr : 
1+curr);

                                if(o.labels){
                                        update_lables(curr);
                                }

                // Disable buttons when the carousel reaches the last/first,
and enable when not
                if (!o.circular) {
                        $(o.btnPrev + "," + o.btnNext).removeClass("disabled");
                    //ADDED: This determines when to add the disabled class
to the link when more than 1 row is viewable                    
                                        $( (curr - o.scroll < 0 && o.btnPrev) 
|| (curr + o.scroll >
((itemLength - v) / o.rows) && o.btnNext) || [] ).addClass(o.disableClass);
                        }

                }
                return false;
            };

                        function hideAndShowFlashContent(liElements,curr){
                                $(liElements).each(function(i){
                                        if(i != curr){
                                                
$(this).children().children("object").each(function(){
                                                        $(this).css({
                                                                visibility: 
"hidden",
                                                                position: 
"relative",
                                                                zIndex: 0
                                                        });
                                                });
                                                
if($(this).children().children("object").size() > 0){
                                                        var videoPlayer = 
$(this).children().children("object");
                                                        
//videoPlayer.runCommand(["Video Player 1", "togglePlay", false,
'off']);
                                                }
                                        } else {
                                                
$(this).children().children("object").each(function(){
                                                        $(this).css({ 
visibility: "visible" }); 
                                                        
$(this).children("embed").css({
                                                                position: 
"relative",
                                                                zIndex: 0
                                                        });
                                                });
                                        }
                                });
                        }
                        
                        function update_lables(curr){
                                var     kids = $(o.carousel).children();
                                var nextPos = curr+1;
                                var prevPos = curr;
                                
                                var nextREPLACE =
$(kids[nextPos]).children().children("caption").html();
                                var prevREPLACE =
$(kids[prevPos]).children().children("caption").html();

                                var re = new RegExp(o.btnRegExp, "g");
                                        
                                var btnNextHtmlNew = 
$(o.btnNext).parent().html().replace(re,
nextREPLACE);
                                var btnPrevHtmlNew = 
$(o.btnPrev).parent().html().replace(re,
prevREPLACE);

                                $(o.btnNext).parent().html(btnNextHtmlNew);
                                $(o.btnPrev).parent().html(btnPrevHtmlNew);
                        }
                        
                        
                        function create_navigation(){
                                if ($(o.carousel).size() > 0) {
                                        // build links
                                        $(o.carousel).each(function(i){ 
                                                if($(this).children().size() > 
1) {
                                                        
$(this).parent().append(o.btnNavContainer); 
                                                        var carouselNavDiv = 
$(this).parent().children(o.btnNavTarget);                 
                                                        
$(carouselNavDiv).append(o.btnPrevHtml); 
                                                        
$(this).children().each(function(j){
                                                                panelNum = j;
                                                                linkNum = 
(j+1);   
                        $(carouselNavDiv).append('<li class="indicator"> # 
'+linkNum+'
</li>');   
                                                        });                 
                                                        
$(carouselNavDiv).append(o.btnNextHtml);     
                                                }
                                        });
                                }
                        }
                        
                        
                        // Clean up and abstract this code. @todo
                        function update_navigation(curr){
                                var     kids = $(o.panel);
                                var cloneVal = (o.circular) ? 2 : 0;
                                var pos = (kids.size()-cloneVal <= curr) ? 
(curr > kids.size()-cloneVal)
? 2 : kids.size()-cloneVal : curr;
                                pos = (pos == 0) ? kids.size()-cloneVal : pos;

                                var     indicatorImages =       
$(o.btnIndicator);
                                var sectionLinks = $("#sectionlinks a");

                                for(k = 0; k < indicatorImages.size(); k++){
                                        if(pos == k+1){
                                                
$(indicatorImages[k]).attr("class", 'on');
                                        } else {
                                                
$(indicatorImages[k]).attr("class", 'off');
                                        }
                                }
                                
                                for(k = 0; k < sectionLinks.size(); k++){
                                        if(pos == k+1){
                                                
$(sectionLinks[k]).attr("class", 'selected');
                                        } else {
                                                
$(sectionLinks[k]).attr("class", 'off');
                                        }
                                }
                        };

        });
    };

        function css(el, prop) {
                return parseInt($.css(el[0], prop))     || 0;
        };
        
        function width(el) {
                return  el[0].offsetWidth +     css(el, 'marginLeft') + css(el, 
'marginRight');
        };
        
        function height(el)     {
                return el[0].offsetHeight +     css(el, 'marginTop') + css(el,
'marginBottom');
        };

})(jQuery);


-- 
View this message in context: 
http://www.nabble.com/jcarousellite%3A-problem-finding-current-position-when-visibility-is-a-fraction-tp22218028s27240p22218028.html
Sent from the jQuery General Discussion mailing list archive at Nabble.com.

Reply via email to