topical media & game development

talk show tell print

lib-jquery-plugin-hover-jquery.js / js



  /* Copyright (c) 2008 Brian Beck (exogen@gmail.com)
   * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.
   *
   * Version: 1.0
   *
   * Requires:
   *   jQuery 1.2+
   *   Dimensions (http://plugins.jquery.com/project/dimensions)
   */
  
  (function() {
      .extend({
          ahover: {
              version: 1.0,
              defaults: {
                  toggleSpeed: 75,
                  toggleEffect: 'both',
                  hoverEffect: null,
                  moveSpeed: 250,
                  easing: 'swing',
                  className: 'ahover'
              },
              effects: {
                  'width': {width: 0},
                  'height': {height: 0},
                  'both': {width: 0, height: 0}
              }
          }
      });
      
      .fn.extend({
          ahover: function(options) {
              var options = .extend({}, .ahover.defaults, options);
              var effect = (
                  (typeof options.toggleEffect == 'string') ?
                  .ahover.effects[options.toggleEffect] : options.toggleEffect
              );
              var parent = this.offsetParent();
              return this.hover(
                  function(e) {
                      var over = this;
                      var overSize = {
                          width: over.outerWidth(),
                          height: over.outerHeight()
                      };
                      var overOffset = over.offset();
                      var parentOffset = parent.offset();
  
                      var under = $('div.' + options.className, parent).stop();
                      var created = (under.length == 0);
                      if (created) {
                          under = $('<div>&nbsp;</div>')
                              .addClass(options.className)
                              .appendTo(parent).css(overSize);
                      }
                      
                      var underOffset = {
                          left: overOffset.left - parentOffset.left -
                              (under.outerWidth() - under.width()) / 2,
                          top: overOffset.top - parentOffset.top -
                              (under.outerHeight() - under.height()) / 2
                      }
  
                      if (created) {
                          under.css(underOffset).css(effect).animate(overSize, {
                              queue: false,
                              duration: options.toggleSpeed,
                              easing: options.easing
                          });
                      }
                      else {
                          var underCSS = .extend({}, overSize, underOffset);
                          under.animate(underCSS, {
                              queue: false,
                              duration: options.moveSpeed,
                              easing: options.easing
                          });
                      }
                      if (.isFunction(options.hoverEffect)) {
                          under.queue(options.hoverEffect);
                      }
                  },
                  function(e) {
                      $('div.' + options.className, parent).animate(effect, {
                          queue: false,
                          duration: options.toggleSpeed,
                          easing: options.easing,
                          complete: function() { this.remove(); }
                      });
                  }
              );
          }
      });
  })(jQuery);


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.