/**
* Tool Tips
* par Jay Salvat - http://blog.jaysalvat.com/
*
* Article:
* http://blog.jaysalvat.com/articles/creez-votre-propre-plugin-jquery-infobulles.php
*/
(function($) {
$.fn.toolTips = function(settings) {
options = {
click: true,
offsetX: 400,
offsetY: 400,
delay: 500,
baseLine: 'top'
};
var options = $.extend(options, settings);
return this.each(function(){
var $$ = $(this);
var aTitle = $$.attr('title') || '';
var aHref = $$.attr('href') || '';
var aRel = $$.attr('rel') || '';
var aToolTip = $("
");
var aCaption = '';
var aImage;
var timer;
var offsetX = 10;
var offsetY = 20;
// Quand le curseur survole un élément
$$.mouseover(function(e) {
// Supprime le Title pour éviter le tooltip par défaut du navigateur
$$.attr('title', '');
// Si un Title est présent, on fait un block pour la légende
if (aTitle) {
aCaption = ''+ aTitle +'
';
}
// Si un attribut Rel est présent dans le lien et qu'il mene a une image
// on passe en mode Vignette
if (aRel.match(/\.(png|jpg|jpeg|gif)$/)) {
aImage = $('
');
aToolTip = $(''+ aCaption +'
');
// Si le lien est un lien vers une image
// on passe en mode Prévisualisation
} else if (aHref.match(/\.(png|jpg|jpeg|gif)$/)) {
aImage = $('
');
aToolTip = $(''+ aCaption +'
');
// Sinon on pas en mode Texte
} else if (aTitle) {
aToolTip = $(""+ aTitle +"
");
}
// Le toolTip précédemment créé est ajouté au Body et masqué
aToolTip.appendTo("body").hide().css({ position:'absolute', top:0, left:0 });
// On attend le chargement de l'image éventuellement contenue
// dans le toolTip pour ajuster le placement selon la hauteur finale
if ((aImage)) {
aImage.load(function() {
aImage.prependTo(aToolTip);
offsetX = options.offsetX;
if (options.baseLine == 'bottom') {
offsetY = options.offsetY - aToolTip.height();
} else if (options.baseLine == 'middle') {
offsetY = options.offsetY - (aToolTip.height() / 2);
}
// Place le toolTip aux coordonnées voulues
aToolTip.css({
left: parseInt(aToolTip.css('left')) + offsetX + "px",
top: parseInt(aToolTip.css('top')) + offsetY + "px"
});
});
}
// On déplace le toolTip en meme temps que la souris
$$.mousemove(function(e) {
aToolTip.css({
left: e.pageX + offsetX + "px",
top: e.pageY + offsetY + "px"
});
});
// On attend quelques fractions de seconde avant d'afficher le toolTip
timer = setTimeout( function() { aToolTip.show() }, options.delay);
})
// Quand le curseur ne survole plus un élément
$$.mouseout(function(e) {
clearTimeout(timer);
// On remet le Title en place
$$.attr("title", aTitle);
// On supprime le suivi de déplacement
$$.unbind("mousemove");
// On supprime le toolTip
aToolTip.remove();
});
// Bloque éventuellement le click sur le lien
$$.click(function() {
return options.click;
});
});
};
})(jQuery);