floating_layer.js 7.8 KB

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