/* * jQuery Clipregion Plugin - Current * http://www.amountaintop.com/projects/clipregion/ * * To use, download this file to your server, save as keynav.js, * and add this HTML into the ... of your web page: * * * Copyright (c) 2006 Mike Hostetler * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php */ $.clipregion = new Object(); $.fn.clipregion = function(o) { $.clipregion.o = o; return this.each(function () { $.clipregion.init(this,$.clipregion.o); }); } $.clipregion.getVisible = function() { var c = $.clipregion; var l = new Array(); // return $(c.crId).find("li").gt(c.getIdx).lt(c.itemsToShow); } $.clipregion.init = function (crId,o) { var c = $.clipregion; c.crId = crId; /** * Options */ c.itemHeight = o.itemHeight ? o.itemHeight : 100; c.itemWidth = o.itemWidth ? o.itemWidth : 100; c.totalItems = o.totalItems ? o.totalItems : $('ul > li',c.crId).size(); c.itemsToShow = o.itemsToShow ? o.itemsToShow : 3; c.itemStep = o.itemStep ? o.itemStep : false; c.horiz = o.direction == 'vertical' ? false : true; c.debug = o.debug == true ? true : false; c.loadNext = o.loadNext ? o.loadNext : null; c.loadPrev = o.loadPrev ? o.loadPrev : null; /** * Helpers */ c.crList = $('ul:first',$(c.crId)).get(0); if(c.horiz) c.itemSize = c.itemWidth; else c.itemSize = c.itemHeight; if(c.totalItems > 0) { c.resize(); } c.setPos(0); } $.clipregion.resize = function() { var c = $.clipregion; /** * Enforce necessary styles */ if(!c.debug) $(c.crId).css({'overflow':'hidden'}); $(c.crList).css({ 'position':'relative', 'z-index':1, 'margin':'0px', 'padding':'0px', 'border':'0px' }); if(c.horiz) { var listW = c.totalItems*c.itemWidth; var listH = c.itemHeight; var clipW = c.itemWidth*c.itemsToShow; var clipH = c.itemHeight; } else { var listW = c.itemWidth; var listH = c.totalItems*c.itemHeight; var clipW = c.itemWidth; var clipH = c.itemHeight*c.itemsToShow; } $(c.crList).css({ 'width':(listW+100)+"px", 'height':listH+'px' }); $(c.crId).css({ 'width':clipW+'px', 'height':clipH+'px' }); $(c.crId).find("li").each(function() { var c = $.clipregion; this.style.styleFloat = 'left'; this.style.cssFloat = 'left'; $(this).css({ 'list-style':'none', 'overslow':'hidden', 'width':c.itemWidth+"px", 'height':c.itemHeight+'px', 'padding':'0px', 'margin':'0px', 'border':'0px' }); }); } $.clipregion.setPos = function (v) { var c = $.clipregion; v = $.intval(v); if(c.horiz) { $(c.crList).css("left",v*-1+"px"); } else { $(c.crList).css("top",v*-1+"px"); } } $.clipregion.getPos = function() { var c = $.clipregion; if(c.horiz) { return $.intval($.css(c.crList,"left")) * -1; } else { return $.intval($.css(c.crList,"top")) * -1; } } $.clipregion.getIdx = function() { var c = $.clipregion; var pos = c.getPos(); return (Math.round(pos/c.itemSize)); } $.clipregion.setIdx = function(idx) { var c = $.clipregion; c.setPos((idx*c.itemSize)+c.itemSize); } $.clipregion.next = function() { var c = $.clipregion; var pos = c.getPos(); if(c.itemStep) { //Ensure current position is stepping on itemsize var newPos = (Math.round(pos/c.itemSize) * c.itemSize) + c.itemSize; } else { var newPos = pos + c.itemSize; } var end = (c.totalItems*c.itemSize) - (c.itemsToShow*c.itemSize); if(newPos > end) newPos = end; if(c.loadNext != null) c.loadNext(newPos); c.setPos(newPos); } $.clipregion.prev = function() { var c = $.clipregion; var pos = c.getPos(); if(c.itemStep) { //Ensure current position is stepping on itemsize var newPos = (Math.round(pos/c.itemSize) * c.itemSize) - c.itemSize; } else { var newPos = pos - c.itemSize; } if(newPos < 0) newPos = 0; if(c.loadPrev != null) c.loadPrev(newPos); c.setPos(newPos); } $.intval = function(v) { v = parseInt(v); return isNaN(v) ? 0 : v; };