Blame view

天文台pc/tianwentai-ui/node_modules/dom-helpers/esm/scrollTo.js 1.18 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  /* eslint-disable no-nested-ternary */
  import { cancel, request } from './animationFrame';
  import height from './height';
  import getWindow from './isWindow';
  import getOffset from './offset';
  import getScrollParent from './scrollParent';
  import scrollTop from './scrollTop';
  export default function scrollTo(selected, scrollParent) {
    var offset = getOffset(selected);
    var poff = {
      top: 0,
      left: 0
    };
    if (!selected) return undefined;
    var list = scrollParent || getScrollParent(selected);
    var isWin = getWindow(list);
    var listScrollTop = scrollTop(list);
    var listHeight = height(list, true);
    if (!isWin) poff = getOffset(list);
    offset = {
      top: offset.top - poff.top,
      left: offset.left - poff.left,
      height: offset.height,
      width: offset.width
    };
    var selectedHeight = offset.height;
    var selectedTop = offset.top + (isWin ? 0 : listScrollTop);
    var bottom = selectedTop + selectedHeight;
    listScrollTop = listScrollTop > selectedTop ? selectedTop : bottom > listScrollTop + listHeight ? bottom - listHeight : listScrollTop;
    var id = request(function () {
      return scrollTop(list, listScrollTop);
    });
    return function () {
      return cancel(id);
    };
  }