floating_layer.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. (function(jQuery)
  2. {
  3. jQuery.fn.flayer_close = function()
  4. {
  5. jQuery(this).flayer.close();
  6. }
  7. jQuery.fn.flayer = function(params)
  8. {
  9. var elm = this;
  10. var ref = {};
  11. var customConfig = params;
  12. var config = {
  13. bgcolor : '#333',
  14. opacity : 0.6,
  15. id : 'floating-box',
  16. className : 'floating-box-class',
  17. zIndex : 5000,
  18. beforeStart : function(){},
  19. beforeEnd : function(){},
  20. close : null,
  21. closeClass : 'close-floating-layer',
  22. outerClose : false,
  23. returnParent: jQuery(elm).parent()
  24. };
  25. jQuery.fn.flayer.close = function()
  26. {
  27. flayer_destroy();
  28. }
  29. function init()
  30. {
  31. jQuery.extend(config, customConfig);
  32. }
  33. function start_ovservers()
  34. {
  35. jQuery(window).bind('scroll.fl', function()
  36. {
  37. setTimeout(function()
  38. {
  39. reposition();
  40. }, 5);
  41. });
  42. jQuery(window).bind('resize.fl', function()
  43. {
  44. setTimeout(function()
  45. {
  46. reposition();
  47. }, 5);
  48. });
  49. jQuery(ref.container).bind('click.fl', function(evt)
  50. {
  51. jQuery(evt.target).hasClass(config.closeClass) ? flayer_destroy() : -1;
  52. if(!!config.outerClose)
  53. jQuery(evt.target).hasClass('fl-cloud') ? flayer_destroy() : -1;
  54. });
  55. // todo:
  56. !!config.outerClose ? jQuery(window).bind('keypress.fl', function(evt){evt.keyCode == 27 ? flayer_destroy() : -1;}) : -1;
  57. }
  58. function position()
  59. {
  60. var viewport = {};
  61. viewport.left = jQuery(window).scrollLeft();
  62. viewport.top = jQuery(window).scrollTop();
  63. viewport.height = window.innerHeight ? window.innerHeight : jQuery(window).height();//jQuery(document.body).height();
  64. viewport.width = jQuery(window).width();//jQuery(document.body).width();
  65. var had = jQuery('<div>').attr('id', 'truth-is-out-there').css({'position' : 'absolute', 'left': '-50000px'});
  66. var dolly = jQuery(elm).clone(true).addClass('dolly');
  67. jQuery(had).append(jQuery(dolly).removeClass('hidden'));
  68. jQuery(document.body).prepend(had);
  69. var dims = {'width' : jQuery(dolly).width(), 'height': jQuery(dolly).height()};
  70. jQuery(had).remove();
  71. //dims.height = 350;
  72. //dims.width = 350;
  73. jQuery(ref.overlay).height(jQuery(document).height());
  74. jQuery(ref.overlay).width(jQuery(document).width());
  75. jQuery(ref.content).height(dims.height);
  76. jQuery(ref.content).width(dims.width);
  77. jQuery(ref.close).css({'top' : viewport.top, 'left' : viewport.left });
  78. jQuery(ref.content).css({'left' : Math.round( (viewport.width - dims.width) / 2 ) + viewport.left, 'top': Math.round( (viewport.height - dims.height) / 2 ) + viewport.top});
  79. }
  80. function reposition()
  81. {
  82. var viewport = {};
  83. viewport.left = jQuery(window).scrollLeft();
  84. viewport.top = jQuery(window).scrollTop();
  85. viewport.height = window.innerHeight ? window.innerHeight : jQuery(window).height();
  86. viewport.width = jQuery(window).width();
  87. jQuery(ref.overlay).height(jQuery(document).height());
  88. jQuery(ref.overlay).width(jQuery(document).width());
  89. jQuery(ref.close).css({'top' : viewport.top, 'left' : viewport.left });
  90. jQuery(ref.content).css({'left' : Math.round( (viewport.width - jQuery(elm).width()) / 2 ) + viewport.left, 'top': Math.round( (viewport.height - jQuery(elm).height()) / 2 ) + viewport.top});
  91. }
  92. function flayer_destroy()
  93. {
  94. config.beforeEnd(elm);
  95. jQuery(window).unbind('scroll.fl');
  96. jQuery(window).unbind('resize.fl');
  97. jQuery(ref.container).unbind('click.fl');
  98. !!config.outerClose ? jQuery(window).unbind('keypress.fl') : -1;
  99. jQuery(config.returnParent).append(jQuery(elm).addClass('hidden'));
  100. jQuery(ref.container).remove();
  101. jQuery.browser.msie && jQuery.browser.version.substr(0,1)<7 ? show_selects() : -1;
  102. return true;
  103. }
  104. function embed()
  105. {
  106. ref.container = jQuery('<div>');
  107. jQuery(ref.container).addClass(config.className + '-container');
  108. jQuery(ref.container).css({
  109. position : 'absolute',
  110. left : '0',
  111. top : '0',
  112. display : 'none',
  113. zIndex: config.zIndex
  114. }).addClass('fl-cloud').addClass('hidden');
  115. ref.overlay = jQuery('<div>').addClass(config.className + '-layer');
  116. jQuery(ref.overlay).css({
  117. position : 'absolute',
  118. zIndex : config.zIndex,
  119. backgroundColor : config.bgcolor,
  120. opacity : config.opacity,
  121. zoom : 1
  122. }).addClass('fl-cloud');
  123. ref.content = jQuery('<div>').addClass(config.className);
  124. jQuery(ref.content).attr('id', config.id);
  125. jQuery(ref.content).css({
  126. position : 'absolute',
  127. zIndex: config.zIndex + 1
  128. }).addClass('fl-cloud');
  129. if(null == config.close || typeof(config.close) == 'undefined')
  130. {
  131. ref.close = jQuery('<div>').addClass(config.className);
  132. jQuery(ref.close).attr('id', config.closeClass);
  133. jQuery(ref.close).css({
  134. position : 'absolute',
  135. zIndex: config.zIndex + 1,
  136. color: 'white',
  137. cursor: 'pointer'
  138. }).addClass(config.closeClass);
  139. //jQuery(ref.close).text('[X]Close');
  140. }
  141. else
  142. {
  143. ref.close = jQuery(config.close).clone().addClass(config.closeClass);
  144. }
  145. jQuery(ref.container).append(ref.overlay);
  146. jQuery(ref.container).append(ref.iframe);
  147. jQuery(ref.container).append(ref.content);
  148. jQuery(ref.container).append(ref.close);
  149. return jQuery(document.body).prepend(ref.container);
  150. }
  151. function hide_selects()
  152. {
  153. /*jQuery('select').each(function(index, sb)
  154. {
  155. jQuery(sb).hide();
  156. var dummy = jQuery('<input>');
  157. jQuery(dummy).attr({'type':'text', 'value': jQuery(sb).val()});
  158. jQuery(dummy).addClass('dummy-select-box-ie6');
  159. jQuery(sb).after(dummy);
  160. });*/
  161. }
  162. function show_selects()
  163. {
  164. /*jQuery('select').each(function(index, sb)
  165. {
  166. jQuery(sb).show();
  167. jQuery(jQuery(sb).next('.dummy-select-box-ie6')).remove();
  168. });*/
  169. }
  170. function start()
  171. {
  172. //jQuery.browser.msie && jQuery.browser.version.substr(0,1)<7 ? hide_selects() : -1;
  173. config.beforeStart(elm);
  174. init();
  175. embed();
  176. position();
  177. jQuery(ref.content).append(jQuery(elm).removeClass('hidden'));
  178. start_ovservers();
  179. jQuery(ref.container).removeClass('hidden').css({'display':'block'});
  180. }
  181. //
  182. // Entry point
  183. start();
  184. }
  185. })(jQuery);