animatedModal.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*=========================================
  2. * animatedModal.js: Version 1.0
  3. * author: João Pereira
  4. * website: https://joaopereira.pt
  5. * email: joaopereirawd@gmail.com
  6. * Licensed MIT
  7. =========================================*/
  8. (function ($) {
  9. $.fn.animatedModal = function(options) {
  10. var modal = $(this);
  11. //Defaults
  12. var settings = $.extend({
  13. modalTarget: modal.attr('href').replace('#',''),
  14. position:'fixed',
  15. width:'100%',
  16. height:'100%',
  17. top:'0px',
  18. left:'0px',
  19. zIndexIn: '9999',
  20. zIndexOut: '-9999',
  21. color: '#39BEB9',
  22. opacityIn:'1',
  23. opacityOut:'0',
  24. animatedIn:'zoomIn',
  25. animatedOut:'zoomOut',
  26. animationDuration:'.6s',
  27. overflow:'auto',
  28. // Callbacks
  29. beforeOpen: function() {},
  30. afterOpen: function() {},
  31. beforeClose: function() {},
  32. afterClose: function() {}
  33. }, options);
  34. var closeBt = $('.close-'+settings.modalTarget);
  35. //console.log(closeBt)
  36. var href = $(modal).attr('href'),
  37. id = $('body').find('#'+settings.modalTarget),
  38. idConc = '#'+id.attr('id');
  39. //console.log(idConc);
  40. // Default Classes
  41. id.addClass('animated');
  42. id.addClass(settings.modalTarget+'-off');
  43. //Init styles
  44. var initStyles = {
  45. 'position':settings.position,
  46. 'width':settings.width,
  47. 'height':settings.height,
  48. 'top':settings.top,
  49. 'left':settings.left,
  50. 'background-color':settings.color,
  51. 'overflow-y':settings.overflow,
  52. 'z-index':settings.zIndexOut,
  53. 'opacity':settings.opacityOut,
  54. '-webkit-animation-duration':settings.animationDuration,
  55. '-moz-animation-duration':settings.animationDuration,
  56. '-ms-animation-duration':settings.animationDuration,
  57. 'animation-duration':settings.animationDuration
  58. };
  59. //Apply stles
  60. id.css(initStyles);
  61. modal.click(function(event) {
  62. event.preventDefault();
  63. $('body, html').css({'overflow':'hidden'});
  64. if (href == idConc) {
  65. if (id.hasClass(settings.modalTarget+'-off')) {
  66. id.removeClass(settings.animatedOut);
  67. id.removeClass(settings.modalTarget+'-off');
  68. id.addClass(settings.modalTarget+'-on');
  69. }
  70. if (id.hasClass(settings.modalTarget+'-on')) {
  71. settings.beforeOpen();
  72. id.css({'opacity':settings.opacityIn,'z-index':settings.zIndexIn});
  73. id.addClass(settings.animatedIn);
  74. id.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', afterOpen);
  75. };
  76. }
  77. });
  78. closeBt.click(function(event) {
  79. event.preventDefault();
  80. $('body, html').css({'overflow':'auto'});
  81. settings.beforeClose(); //beforeClose
  82. if (id.hasClass(settings.modalTarget+'-on')) {
  83. id.removeClass(settings.modalTarget+'-on');
  84. id.addClass(settings.modalTarget+'-off');
  85. }
  86. if (id.hasClass(settings.modalTarget+'-off')) {
  87. id.removeClass(settings.animatedIn);
  88. id.addClass(settings.animatedOut);
  89. id.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', afterClose);
  90. };
  91. });
  92. function afterClose () {
  93. id.css({'z-index':settings.zIndexOut});
  94. settings.afterClose(); //afterClose
  95. }
  96. function afterOpen () {
  97. settings.afterOpen(); //afterOpen
  98. }
  99. }; // End animatedModal.js
  100. }(jQuery));