topical media & game development

talk show tell print

lib-jquery-style-custom-development-bundle-external-bgiframe-jquery.bgiframe.js / js



  /* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
   * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
   * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
   *
   * LastChangedDate: 2007-07-21 18:44:59 -0500 (Sat, 21 Jul 2007) 
   * Rev: 2446 
   *
   * Version 2.1.1
   */
  
  (function(){
  
  
The bgiframe is chainable and applies the iframe hack to get around zIndex issues in IE6. It will only apply itself in IE6 and adds a class to the iframe called 'bgiframe'. The iframe is appeneded as the first child of the matched element(s) with a tabIndex and zIndex of -1. By default the plugin will take borders, sized with pixel units, into account. If a different unit is used for the border's width, then you will need to use the top and left settings as explained below. NOTICE: This plugin has been reported to cause perfromance problems when used on elements that change properties (like width, height and opacity) a lot in IE6. Most of these problems have been caused by the expressions used to calculate the elements width, height and borders. Some have reported it is due to the opacity filter. All these settings can be changed if needed as explained below. @example $('div').bgiframe(); @before <div><p>Paragraph</p></div> @result <div><iframe class="bgiframe".../><p>Paragraph</p></div>
parameter: Map settings Optional settings to configure the iframe. @option String|Number top The iframe must be offset to the top by the width of the top border. This should be a negative number representing the border-top-width. If a number is is used here, pixels will be assumed. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the border-top-width if it is in pixels. @option String|Number left The iframe must be offset to the left by the width of the left border. This should be a negative number representing the border-left-width. If a number is is used here, pixels will be assumed. Otherwise, be sure to specify a unit. An expression could also be used. By default the value is "auto" which will use an expression to get the border-left-width if it is in pixels. @option String|Number width This is the width of the iframe. If a number is used here, pixels will be assume. Otherwise, be sure to specify a unit. An experssion could also be used. By default the value is "auto" which will use an experssion to get the offsetWidth. @option String|Number height This is the height of the iframe. If a number is used here, pixels will be assume. Otherwise, be sure to specify a unit. An experssion could also be used. By default the value is "auto" which will use an experssion to get the offsetHeight. @option Boolean opacity This is a boolean representing whether or not to use opacity. If set to true, the opacity of 0 is applied. If set to false, the opacity filter is not applied. Default: true. @option String src This setting is provided so that one could change the src of the iframe to whatever they need. Default: "javascript:false;" @name bgiframe @type jQuery @cat Plugins/bgiframe
author: Brandon Aaron (brandon.aaron@gmail.com || brandonaaron.net)

  
  .fn.bgIframe = .fn.bgiframe = function(s) {
          // This is only for IE6
          if ( .browser.msie && /6.0/.test(navigator.userAgent) ) {
                  s = .extend({
                          top     : 'auto', // auto == .currentStyle.borderTopWidth
                          left    : 'auto', // auto == .currentStyle.borderLeftWidth
                          width   : 'auto', // auto == offsetWidth
                          height  : 'auto', // auto == offsetHeight
                          opacity : true,
                          src     : 'javascript:false;'
                  }, s || {});
                  var prop = function(n){return n&&n.constructor==Number?n+'px':n;},
                      html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
                                 'style="display:block;position:absolute;z-index:-1;'+
                                         (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
                                                 'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
                                                 'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
                                                 'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
                                                 'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
                                          '"/>';
                  return this.each(function() {
                          if ( $('> iframe.bgiframe', this).length == 0 )
                                  this.insertBefore( document.createElement(html), this.firstChild );
                  });
          }
          return this;
  };
  
  })(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.