12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import compute from 'compute-scroll-into-view';
- function isOptionsObject(options) {
- return options === Object(options) && Object.keys(options).length !== 0;
- }
- function defaultBehavior(actions, behavior) {
- if (behavior === void 0) {
- behavior = 'auto';
- }
- var canSmoothScroll = ('scrollBehavior' in document.body.style);
- actions.forEach(function (_ref) {
- var el = _ref.el,
- top = _ref.top,
- left = _ref.left;
- if (el.scroll && canSmoothScroll) {
- el.scroll({
- top: top,
- left: left,
- behavior: behavior
- });
- } else {
- el.scrollTop = top;
- el.scrollLeft = left;
- }
- });
- }
- function getOptions(options) {
- if (options === false) {
- return {
- block: 'end',
- inline: 'nearest'
- };
- }
- if (isOptionsObject(options)) {
- return options;
- }
- return {
- block: 'start',
- inline: 'nearest'
- };
- }
- function scrollIntoView(target, options) {
- var isTargetAttached = target.isConnected || target.ownerDocument.documentElement.contains(target);
- if (isOptionsObject(options) && typeof options.behavior === 'function') {
- return options.behavior(isTargetAttached ? compute(target, options) : []);
- }
- if (!isTargetAttached) {
- return;
- }
- var computeOptions = getOptions(options);
- return defaultBehavior(compute(target, computeOptions), computeOptions.behavior);
- }
- export default scrollIntoView;
|