Team:UESTC/js/jquery.jDiaporama.js

From 2013.igem.org

(function($){ $.fn.jDiaporama = function(options) {

var defaults = { auto: true, delay: 3, animationSpeed: "normal", controls: true, status_controls: true, keyboard: true, infos: true, currentimage: true, paused: false, boucles: 0, sens: "right", onrollover: true, random: false };

var options = $.extend(defaults, options);

this.each(function(){

// Si le diaporama comporte plus qu'une image if($("li", diapo).length > 1){

var diapo = $(this); var mouseover = false; var sens = options.sens; var pause = false; var width = 0; var height = 0; var current_slide = 0; var nb_slides = $("li", diapo).length;

diapo.wrap("
");

// Detection et actions des mouseover diapo.parent().mouseenter(function(){ mouseover = true; if(options.onrollover) displayInfos($("li.active", diapo), "show");

if(options.controls) diapo.siblings(".jDiaporama_controls").fadeIn();

}).mouseleave(function(){ mouseover = false; if(options.onrollover) displayInfos($("li.active", diapo), "hide");

if(options.controls) diapo.siblings(".jDiaporama_controls").hide(); });

function init() { // Ajustement de la taille du container width = $("li:first-child img", diapo).width(); height = $("li:first-child img", diapo).height();

diapo.width(width); diapo.height(height); diapo.parent().width(width); diapo.parent().height(height);

if(options.controls) diapo.siblings(".jDiaporama_status").show();

if(options.auto && options.paused) $(".pause", diapo.siblings()).trigger("click");

if(!options.onrollover) displayInfos($("li", diapo), "show");

if(options.controls && options.status_controls) $("#jDiaporama_bullet_"+(parseInt($("li", diapo).index($("li:first-child", diapo)))+1), diapo.siblings()).addClass("active"); }

var inter = "";

if(options.auto && !options.paused) inter = setInterval(function(){displayDiaporama(options)}, (options.delay*1000));

$("li", diapo).hide(); $("li:first-child", diapo).addClass("active").fadeIn(options.animationSpeed, init);

// Pour chaque �l�ment $("li", diapo).each(function(){ elt = $(this);

i = parseInt($("li", diapo).index($(this))+1); $(this).attr("id", "jDiaporama_image_"+i);

// Affichage de la description si renseign? et activ? if(options.infos) { //var is_desc = ($("img", elt).attr("title") != ""); var is_title = ($("img", elt).attr("alt") != "");

//if(is_desc)

//elt.append("

"+$("img", elt).attr("title")+"

");

if(is_title)

elt.append("

"+$("img", elt).attr("alt")+"

");

if(options.currentimage)

elt.append("

"+parseInt($("li", diapo).index(elt)+1)+"/"+diapo.children().length+"

");

} })

// Navigation au clavier if(options.keyboard) $(document).keydown(function(event) { switch(event.keyCode){ case 37 : // Fl�che gauche prev(); break;

case 39 : // Fl�che droite next(); break; } });

// Controls if(options.controls) { if(options.status_controls) { // Etat du diaporama

diapo.after("
");

$("li", diapo).each(function(){ i = parseInt($("li", diapo).index($(this))+1); $(".jDiaporama_status", diapo.parent()).append("<a id='jDiaporama_bullet_"+i+"' href='#'>Image "+i+"</a>"); })

$(".jDiaporama_status", diapo.parent()).css("margin-left", -($(".jDiaporama_status", diapo.parent()).width()/2));

$(".jDiaporama_status a", diapo.parent()).click(function(){ if($("li.active", diapo).attr("id").split("_")[2] != $(this).attr("id").split("_")[2]) nextImage(options, $(this)); return false; }) }

diapo.after("
<a href='#' class='prev'>Prec.</a> " + ((options.auto)?"<a href='#' class='pause'>Pause</a>":"") + " <a href='#' class='next'>Suiv.</a>
");

$(".prev", diapo.siblings()).click(function(){ prev(); return false; });

$(".next", diapo.siblings()).click(function(){ next(); return false; });

$(".pause", diapo.siblings()).click(function(){ if($(this).hasClass("pause")) { $(this).removeClass("pause").addClass("play"); clearInterval(inter); pause = true; } else { $(this).removeClass("play").addClass("pause"); inter = setInterval(function(){displayDiaporama(options)}, (options.delay*1000)); pause = false; }

return false; }); }

function next() { if(options.random) randomImage(); else { if(!$("li.active", diapo).is(":last-child")) elt = $("li.active", diapo).next(); else elt = $("li:first-child", diapo);

nextImage(options, elt); sens = "right"; } }

function prev() { if(options.random) randomImage(); else { if(!$("li.active", diapo).is(":first-child")) elt = $("li.active", diapo).prev(); else elt = $("li:last-child", diapo);

nextImage(options, elt); sens = "left"; } }

function randomImage() { rand = Math.floor(Math.random() * nb_slides)+1; id = $("li.active", diapo).attr("id").split("_")[2];

while(rand == id) { rand = Math.floor(Math.random() * nb_slides)+1; }

nextImage(options, $("li#jDiaporama_image_"+rand, diapo)); }

// Affichage des infos sur l'image courante function displayInfos(elt, display) { var is_desc = ($("img", elt).attr("title") != ""); var is_title = ($("img", elt).attr("alt") != "");

if(is_desc) if(display == "show") $(".desc", elt).slideDown("fast"); else $(".desc", elt).slideUp("fast"); if(is_title) if(display == "show") $(".title", elt).slideDown("fast"); else $(".title", elt).slideUp("fast"); if(options.currentimage) if(display == "show") $(".count", elt).slideDown("fast"); else $(".count", elt).slideUp("fast"); }

// Affiche l'�l�ment suivant function nextImage(options, elt) { clearInterval(inter);

$("li.active", diapo).fadeOut(options.animationSpeed).removeClass("active"); $(".jDiaporama_status a", diapo.parent()).removeClass("active");

id = elt.attr("id").split("_")[2]; $("li#jDiaporama_image_"+id, diapo).addClass("active").fadeIn(options.animationSpeed);

if(options.controls && options.status_controls) $("#jDiaporama_bullet_"+id, diapo.siblings()).addClass("active");

if(options.infos && mouseover && options.onrollover) displayInfos($("li.active", diapo), "show"); else if(!mouseover && options.onrollover) displayInfos($("li.active", diapo), "hide");

if(!pause && options.auto) { if(options.boucles == 0 || (options.boucles > 0 && (diapo.data("current_slide")/diapo.children().length) < options.boucles )) inter = setInterval(function(){displayDiaporama(options)}, (options.delay*1000)); else $(".pause", diapo.siblings()).remove(); } }

function displayDiaporama(options) { current_slide++; diapo.data("current_slide", current_slide);

if(sens == "right") next(); else prev(); }

} });

return this; }; })(jQuery);