switchScrollingEffect.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. import getScrollBarSize from "./getScrollBarSize";
  2. import setStyle from "./setStyle";
  3. function isBodyOverflowing() {
  4. return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight) && window.innerWidth > document.body.offsetWidth;
  5. }
  6. var cacheStyle = {};
  7. export default (function (close) {
  8. if (!isBodyOverflowing() && !close) {
  9. return;
  10. }
  11. // https://github.com/ant-design/ant-design/issues/19729
  12. var scrollingEffectClassName = 'ant-scrolling-effect';
  13. var scrollingEffectClassNameReg = new RegExp("".concat(scrollingEffectClassName), 'g');
  14. var bodyClassName = document.body.className;
  15. if (close) {
  16. if (!scrollingEffectClassNameReg.test(bodyClassName)) return;
  17. setStyle(cacheStyle);
  18. cacheStyle = {};
  19. document.body.className = bodyClassName.replace(scrollingEffectClassNameReg, '').trim();
  20. return;
  21. }
  22. var scrollBarSize = getScrollBarSize();
  23. if (scrollBarSize) {
  24. cacheStyle = setStyle({
  25. position: 'relative',
  26. width: "calc(100% - ".concat(scrollBarSize, "px)")
  27. });
  28. if (!scrollingEffectClassNameReg.test(bodyClassName)) {
  29. var addClassName = "".concat(bodyClassName, " ").concat(scrollingEffectClassName);
  30. document.body.className = addClassName.trim();
  31. }
  32. }
  33. });