/*! * SimpleBanner v10. ~ Copyright (c) 2013 Hangun's World, http://hangunsworld.com/blog/ * Released under MIT license, http://hangunsworld.com/license.txt */ $(function(){ initSimpleBanner(); }); /** * initializes SimpleBanners */ function initSimpleBanner(){ var wrap; var W; var H; var lis; var li; var nav_wrap; var nav_ul; var cnt; var i; var itv; var type; var nav_type; $(".simple_banner_wrap").each(function(idx){ // init variables wrap = $(this); wrap.data("index", idx); wrap.data("current", 0); wrap.data("mouseenter", false); W = wrap.width(); H = wrap.height(); switch(wrap.data("type")){ case "hslide": case "vslide": case "alpha": type = wrap.data("type"); break; default: wrap.data("type", "alpha"); type = "alpha"; break; } switch(wrap.data("nav-type")){ case "numeral": case "bullet": case "prev_next": nav_type = wrap.data("nav-type"); break; default: wrap.data("nav-type", "bullet"); nav_type = "bullet"; break; } if(isNaN(wrap.data("interval"))){ wrap.data("interval", 5000); } lis = wrap.find("ul li"); cnt = lis.length; wrap.data("total", cnt); // init banners if(type == "hslide"){ lis.each(function(idx, itm){ li = $(itm); li.css("left", W * idx + "px"); }); }else if(type == "vslide"){ lis.each(function(idx, itm){ li = $(itm); li.css("top", H * idx + "px"); }); }else{ lis.each(function(idx, itm){ li = $(itm); if(idx == 0){ li.css({zIndex:1, opacity:1}); }else{ li.css("opacity", 0); } }); } // init navigation wrap.append(''); nav_wrap = wrap.find(".nav_wrap"); nav_ul = wrap.find(".nav_wrap ul"); switch(nav_type){ case "numeral": case "bullet": for(i=0; i'+(i+1)+''); } nav_ul.find("li").bind("click", sbNavClickListener); nav_ul.find("li").eq(0).addClass("on"); break; case "prev_next": nav_ul.append('
  • '); nav_ul.append('
  • '); nav_ul.find("li").bind("click", sbNavClickListener); break; } // rest timer i = idx; itv = wrap.data("interval"); setTimeout("sbAnimateBannerTimer("+i+")", itv); // init events wrap.bind("mouseenter", sbMouseEnterListener); wrap.bind("mouseleave", sbMouseLeaveListener); }); } /** * mouse enter listener * kill timer on mouse enter */ function sbMouseEnterListener(e){ var wrap = $(e.currentTarget); wrap.data("mouseenter", true); if(wrap.data("stid")){ clearTimeout(wrap.data("stid")); } } /** * mouse leave listener * reset timer on mouse leave */ function sbMouseLeaveListener(e){ var wrap = $(e.currentTarget); wrap.data("mouseenter", false); var n = wrap.data("index"); var itv = wrap.data("interval"); wrap.data("stid", setTimeout("sbAnimateBannerTimer("+n+")", itv)); } /** * timer callback function */ function sbAnimateBannerTimer(idx){ var wrap = $(".simple_banner_wrap").eq(idx); //console.log("timeout", idx, wrap.data("current"), wrap.data("total"), wrap.data("stid")); var c = wrap.data("current") + 1; if(c >= wrap.data("total")){ c = 0; } sbAnimateBanner(wrap, c); } /** * navigation click listener */ function sbNavClickListener(e){ var n; var nav = $(e.target); var wrap = nav.parents(".simple_banner_wrap"); switch(wrap.data("nav-type")){ case "numeral": case "bullet": n = nav.html() - 1; break; case "prev_next": var total = wrap.data("total"); n = wrap.data("current"); if(nav.html() == "<"){ n--; if(n < 0){ n = total - 1; } }else{ n++; if(n >= total){ n = 0; } } break; } sbAnimateBanner(wrap, n); } /** * animates banners */ function sbAnimateBanner(wrap, cur){ // kill timer if(wrap.data("stid")){ clearTimeout(wrap.data("stid")); } // init variables wrap.data("current", cur); var type = wrap.data("type"); var W = wrap.width(); var H = wrap.height(); var wrap_ul = wrap.children("ul"); var wrap_lis = wrap_ul.children(); var nav_li; // animate banner if(type == "hslide"){ wrap_ul.stop(true); wrap_ul.animate({left:-W*cur+"px"}, 200); }else if(type == "vslide"){ wrap_ul.stop(true); wrap_ul.animate({top:-H*cur+"px"}, 200); }else{ var li; wrap_lis.each(function(idx, itm){ li = $(itm); li.stop(true); if(idx == cur){ li.css("z-index", 1); li.animate({opacity:1}, 200); }else{ li.css("z-index", 0); li.animate({opacity:0}, 200); } }); } // update navigation switch(wrap.data("nav-type")){ case "numeral": case "bullet": wrap.find(".nav_wrap ul li").each(function(idx, itm){ nav_li = $(itm); if(idx == cur){ nav_li.addClass("on"); }else{ nav_li.removeClass("on"); } }); break; //case "prev_next": // do nothing //break; } // reset timer if(wrap.data("mouseenter") == false){ var n = wrap.data("index"); var itv = wrap.data("interval"); wrap.data("stid", setTimeout("sbAnimateBannerTimer("+n+")", itv)); } }