对象在React中的IE11中不支持属性或方法“ scrollBy”

时间:2018-10-13 13:22:31

标签: javascript reactjs internet-explorer-11 babel-polyfill

我正在使用以下代码在mouseDown上滚动滚动一个元素,并在mouseUp / mouseOut上停止滚动。

scrubby(xDir) {
    let dub = setInterval(() => {
      document.getElementById("chart").scrollBy(8 * xDir, 0);
    }, 10);

    this.setState({ dub: dub });
  }

  scrubbyStop() {
    const { dub } = this.state;
    if (dub !== null) {
      clearInterval(dub);
    }
    this.setState({ dub: null });
  }

这在IE 11之外的所有地方都有效。在IE 11中,我收到以下错误消息:

TypeError: Object doesn't support property or method 'scrollBy'

当我console.log元素时,请使用document.getElementById来确保选择元素。

我正在使用babel-polyfil

我看到很多与scrollTo有关的问题,但与scrollBy无关。有谁知道可能适用于IE的任何解决方法,polyfill或替代方法。

2 个答案:

答案 0 :(得分:3)

Babel polyfill“将模拟完整的ES2015 +环境”。但是,scrollBy不是ECMAScript规范的一部分,因此Babel不会对其进行多填充。 您需要自己添加适当的polyfill,例如smooth scroll behaviour polyfill,其中也包含scrollBy

答案 1 :(得分:0)

这个问题我迟到了一年,但是如果其他任何人都面临这个问题,并且想要一个仅 填写scrollBy的解决方案,那么我使用的是jQuery:< / p>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

...并将其添加到我页面的JavaScript中:

if(!window.scrollBy){
  window.scrollBy = function(x, y){
    if(x) $('html, body').scrollLeft($(window).scrollLeft() + x);
    if(y) $('html, body').scrollTop($(window).scrollTop() + y);
  };
}

if(!Element.prototype.scrollBy){
  Element.prototype.scrollBy = function(x, y){
    if(x) $(this).scrollLeft($(this).scrollLeft() + x);
    if(y) $(this).scrollTop($(this).scrollTop() + y);
  };
}

它已经在IE 11中经过测试并可以正常工作。