Add polyfill and comments to utils/sticky
This commit is contained in:
parent
81e899ea71
commit
bc56f1f5c6
3 changed files with 25 additions and 11 deletions
|
@ -1,5 +1,5 @@
|
|||
import $ from 'jquery';
|
||||
import stickyMonitor from './lib/utils/sticky';
|
||||
import { stickyMonitor } from './lib/utils/sticky';
|
||||
|
||||
export default (stickyTop) => {
|
||||
stickyMonitor(document.querySelector('.js-diff-files-changed'), stickyTop);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import $ from 'jquery';
|
||||
import _ from 'underscore';
|
||||
import StickyFill from 'stickyfilljs';
|
||||
import { polyfillSticky } from './lib/utils/sticky';
|
||||
import axios from './lib/utils/axios_utils';
|
||||
import { visitUrl } from './lib/utils/url_utility';
|
||||
import bp from './breakpoints';
|
||||
|
@ -80,14 +80,7 @@ export default class Job {
|
|||
}
|
||||
|
||||
initAffixTopArea() {
|
||||
/**
|
||||
If the browser does not support position sticky, it returns the position as static.
|
||||
If the browser does support sticky, then we allow the browser to handle it, if not
|
||||
then we use a polyfill
|
||||
*/
|
||||
if (this.$topBar.css('position') !== 'static') return;
|
||||
|
||||
StickyFill.add(this.$topBar);
|
||||
polyfillSticky(this.$topBar);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import StickyFill from 'stickyfilljs';
|
||||
|
||||
export const createPlaceholder = () => {
|
||||
const placeholder = document.createElement('div');
|
||||
placeholder.classList.add('sticky-placeholder');
|
||||
|
@ -28,7 +30,16 @@ export const isSticky = (el, scrollY, stickyTop, insertPlaceholder) => {
|
|||
}
|
||||
};
|
||||
|
||||
export default (el, stickyTop, insertPlaceholder = true) => {
|
||||
/**
|
||||
* Create a listener that will toggle a 'is-stuck' class, based on the current scroll position.
|
||||
*
|
||||
* - If the current environment does not support `position: sticky`, do nothing.
|
||||
*
|
||||
* @param {HTMLElement} el The `position: sticky` element.
|
||||
* @param {Number} stickyTop Used to determine when an element is stuck.
|
||||
* @param {Boolean} insertPlaceholder Should a placeholder element be created when element is stuck?
|
||||
*/
|
||||
export const stickyMonitor = (el, stickyTop, insertPlaceholder = true) => {
|
||||
if (!el) return;
|
||||
|
||||
if (typeof CSS === 'undefined' || !(CSS.supports('(position: -webkit-sticky) or (position: sticky)'))) return;
|
||||
|
@ -37,3 +48,13 @@ export default (el, stickyTop, insertPlaceholder = true) => {
|
|||
passive: true,
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Polyfill the `position: sticky` behavior.
|
||||
*
|
||||
* - If the current environment supports `position: sticky`, do nothing.
|
||||
* - Can receive an iterable element list (NodeList, jQuery collection, etc.) or single HTMLElement.
|
||||
*/
|
||||
export const polyfillSticky = (el) => {
|
||||
StickyFill.add(el);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue