2020-05-19 11:43:42 +03:00

53 lines
1.8 KiB
JavaScript

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = scrollTo;
var _offset = _interopRequireDefault(require("../query/offset"));
var _height = _interopRequireDefault(require("../query/height"));
var _scrollParent = _interopRequireDefault(require("../query/scrollParent"));
var _scrollTop = _interopRequireDefault(require("../query/scrollTop"));
var _requestAnimationFrame = _interopRequireDefault(require("./requestAnimationFrame"));
var _isWindow = _interopRequireDefault(require("../query/isWindow"));
function scrollTo(selected, scrollParent) {
var offset = (0, _offset.default)(selected);
var poff = {
top: 0,
left: 0
};
var list, listScrollTop, selectedTop, isWin;
var selectedHeight, listHeight, bottom;
if (!selected) return;
list = scrollParent || (0, _scrollParent.default)(selected);
isWin = (0, _isWindow.default)(list);
listScrollTop = (0, _scrollTop.default)(list);
listHeight = (0, _height.default)(list, true);
isWin = (0, _isWindow.default)(list);
if (!isWin) poff = (0, _offset.default)(list);
offset = {
top: offset.top - poff.top,
left: offset.left - poff.left,
height: offset.height,
width: offset.width
};
selectedHeight = offset.height;
selectedTop = offset.top + (isWin ? 0 : listScrollTop);
bottom = selectedTop + selectedHeight;
listScrollTop = listScrollTop > selectedTop ? selectedTop : bottom > listScrollTop + listHeight ? bottom - listHeight : listScrollTop;
var id = (0, _requestAnimationFrame.default)(function () {
return (0, _scrollTop.default)(list, listScrollTop);
});
return function () {
return _requestAnimationFrame.default.cancel(id);
};
}
module.exports = exports["default"];