//style-my-tootltips by malihu (http://manos.malihu.gr) //plugin home http://manos.malihu.gr/style-my-tooltips-jquery-plugin (function($) { var methods = { init: function(options) { var defaults = { tip_follows_cursor: false, //tooltip follows cursor: boolean tip_delay_time: 700, //tooltip delay before displaying: milliseconds tip_fade_speed: 300, //tooltip fade in/out speed: milliseconds attribute: "title" //tooltip text come from this attribute }, options = $.extend(defaults, options); if ($("#s-m-t-tooltip").length === 0) { $("body").append("
"); } var smtTooltip = $("#s-m-t-tooltip"); smtTooltip.css({ "position": "absolute", "display": "none" }).data("smt-z-index", smtTooltip.css("z-index")).children("div").css({ "width": "100%", "height": "100%" }); function smtGetCursorCoords(event) { var smtCursorCoordsX = event.pageX, smtCursorCoordsY = event.pageY; smtTooltip.style_my_tooltips("position", { smtCursorCoordsX: smtCursorCoordsX, smtCursorCoordsY: smtCursorCoordsY }); } $(document).on("mouseout mousedown click", ".smt-current-element", function() { var $this = $(this); clearTimeout(smtTooltip_delay); smtTooltip.style_my_tooltips("hide", { speed: $this.data("smt-fade-speed") }); $(document).unbind("mousemove"); $this.removeClass("smt-current-element"); if ($this.attr(options.attribute) === "") { $this.attr(options.attribute, $this.data("smt-title")); } }); return this["on"]("mouseover", function(event) { var $this = $(this), title = $this.attr(options.attribute); $this.addClass("smt-current-element").data({ "smt-title": title, "smt-fade-speed": options.tip_fade_speed }).attr(options.attribute, ""); smtTooltip.style_my_tooltips("update", { title: title, speed: options.tip_fade_speed, delay: options.tip_delay_time, tip_follows_cursor: options.tip_follows_cursor }); $(document).bind("mousemove", function(event) { smtGetCursorCoords(event); }); }); }, update: function(options) { var $this = $(this); $this.stop().css({ "display": "none", "z-index": $this.data("smt-z-index") }).children("div").text(options.title); smtTooltip_delay = setTimeout(function() { $this.style_my_tooltips("show", { speed: options.speed, tip_follows_cursor: options.tip_follows_cursor }) }, options.delay); }, show: function(options) { var $this = $(this); $this.stop().fadeTo(options.speed, 1); if (!options.tip_follows_cursor) { $(document).unbind("mousemove"); } }, hide: function(options) { var $this = $(this); $this.stop().fadeTo(options.speed, 0, function() { $this.css({ "z-index": "-1" }); }); }, position: function(options) { var $this = $(this), winScrollX = $(window).scrollLeft(), winScrollY = $(window).scrollTop(), tipWidth = $this.outerWidth(true), tipHeight = $this.outerHeight(true), leftOffset = (options.smtCursorCoordsX + tipWidth) - winScrollX, topOffset = (options.smtCursorCoordsY + tipHeight) - winScrollY; if (leftOffset <= $(window).width() && leftOffset <= $(document).width()) { $this.css("left", options.smtCursorCoordsX); } else { var thePosX = options.smtCursorCoordsX - tipWidth; if (thePosX >= winScrollX) { $this.css("left", thePosX); } else { $this.css("left", winScrollX); } } if (topOffset <= $(window).height() && topOffset <= $(document).height()) { $this.css("top", options.smtCursorCoordsY); } else { var thePosY = options.smtCursorCoordsY - tipHeight; if (thePosY >= winScrollY) { $this.css("top", thePosY); } else { $this.css("top", winScrollY); } } } } $.fn.style_my_tooltips = function(method) { if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === "object" || !method) { return methods.init.apply(this, arguments); } else { $.error("Method " + method + " does not exist"); } }; })(jQuery);