sticky-header.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. (function (global, factory) {
  2. if (typeof define === "function" && define.amd) {
  3. define("/Plugin/sticky-header", ["exports", "jquery"], factory);
  4. } else if (typeof exports !== "undefined") {
  5. factory(exports, require("jquery"));
  6. } else {
  7. var mod = {
  8. exports: {}
  9. };
  10. factory(mod.exports, global.jQuery);
  11. global.PluginStickyHeader = mod.exports;
  12. }
  13. })(this, function (_exports, _jquery) {
  14. "use strict";
  15. Object.defineProperty(_exports, "__esModule", {
  16. value: true
  17. });
  18. _exports.default = void 0;
  19. _jquery = babelHelpers.interopRequireDefault(_jquery);
  20. var pluginName = 'stickyHeader';
  21. var defaults = {
  22. headerSelector: '.header',
  23. changeHeaderOn: 100,
  24. activeClassName: 'active-sticky-header',
  25. min: 50,
  26. method: 'toggle'
  27. };
  28. var stickyHeader =
  29. /*#__PURE__*/
  30. function () {
  31. function stickyHeader(el, options) {
  32. babelHelpers.classCallCheck(this, stickyHeader);
  33. this.isActive = false;
  34. this.init(options);
  35. this.bind();
  36. }
  37. babelHelpers.createClass(stickyHeader, [{
  38. key: "init",
  39. value: function init(options) {
  40. var $el = this.$el.css('transition', 'none');
  41. var $header = this.$header = $el.find(options.headerSelector).css({
  42. position: 'absolute',
  43. top: 0,
  44. left: 0
  45. });
  46. this.options = _jquery.default.extend(true, {}, defaults, options, $header.data());
  47. this.headerHeight = $header.outerHeight(); // this.offsetTop()
  48. // $el.css('transition','all .5s linear');
  49. // $header.css('transition','all .5s linear');
  50. this.$el.css('paddingTop', this.headerHeight);
  51. }
  52. }, {
  53. key: "_toggleActive",
  54. value: function _toggleActive() {
  55. if (this.isActive) {
  56. this.$header.css('height', this.options.min);
  57. } else {
  58. this.$header.css('height', this.headerHeight);
  59. }
  60. }
  61. }, {
  62. key: "bind",
  63. value: function bind() {
  64. var self = this;
  65. this.$el.on('scroll', function () {
  66. if (self.options.method === 'toggle') {
  67. if ((0, _jquery.default)(this).scrollTop() > self.options.changeHeaderOn && !self.isActive) {
  68. self.$el.addClass(self.options.activeClassName);
  69. self.isActive = true;
  70. self.$header.css('height', self.options.min);
  71. self.$el.trigger('toggle:sticky', [self, self.isActive]);
  72. } else if ((0, _jquery.default)(this).scrollTop() <= self.options.changeHeaderOn && self.isActive) {
  73. self.$el.removeClass(self.options.activeClassName);
  74. self.isActive = false;
  75. self.$header.css('height', self.headerHeight);
  76. self.$el.trigger('toggle:sticky', [self, self.isActive]);
  77. }
  78. } else if (self.options.method === 'scroll') {
  79. var offset = Math.max(self.headerHeight - (0, _jquery.default)(this).scrollTop(), self.options.min);
  80. if (offset === self.headerHeight) {
  81. self.$el.removeClass(self.options.activeClassName);
  82. } else {
  83. self.$el.addClass(self.options.activeClassName);
  84. }
  85. self.$header.css('height', offset);
  86. self.$el.trigger('toggle:sticky', [self]);
  87. }
  88. });
  89. }
  90. }], [{
  91. key: "_jQueryInterface",
  92. value: function _jQueryInterface(options) {
  93. for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  94. args[_key - 1] = arguments[_key];
  95. }
  96. if (typeof options === 'string') {
  97. var method = options;
  98. if (/^\_/.test(method)) {
  99. return false;
  100. }
  101. return this.each(function () {
  102. var api = _jquery.default.data(this, pluginName);
  103. if (api && typeof api[method] === 'function') {
  104. api[method].apply(api, args);
  105. }
  106. });
  107. }
  108. return this.each(function () {
  109. if (!_jquery.default.data(this, pluginName)) {
  110. _jquery.default.data(this, pluginName, new stickyHeader(this, options));
  111. } else {
  112. _jquery.default.data(this, pluginName).init(options);
  113. }
  114. });
  115. }
  116. }]);
  117. return stickyHeader;
  118. }();
  119. _jquery.default.fn[pluginName] = stickyHeader._jQueryInterface;
  120. _jquery.default.fn[pluginName].constructor = stickyHeader;
  121. _jquery.default.fn[pluginName].noConflict = function () {
  122. _jquery.default.fn[pluginName] = window.JQUERY_NO_CONFLICT;
  123. return stickyHeader._jQueryInterface;
  124. };
  125. var _default = stickyHeader;
  126. _exports.default = _default;
  127. });