阅读 156

Element.scrollTo兼容性问题解决

起因

项目中有如下的代码:

document.getElementById('container').scrollTo(0,0);复制代码

在翻页时需要将页面滚动到顶部,但是项目中的滚动条时在container元素上,不是element元素上。这就导致了后续bug的发生。
首先我们查看一下Element.scrollTo的兼容性image.pngdeveloper.mozilla.org/zh-CN/docs/…
可以看到在ie浏览器中是完全不支持scrollTo这个属性。导致我们的项目在ie中运行时,滚动条无法滚动回顶部。

解决方案

window.scrollTo

查看window.scrollTo的兼容性

image.png发现在ie中兼容,我们只需要把项目的滚动条切换到window上,就可以解决这个问题。but,作为一个迭代多年的项目修改这个,无异于go die。于是我们把目光放到了下边这个方法中,polyfill

polyfill

针对element.scrollTo方法添加polyfill。

  1. 首先判断是非支持scrollTo,通过document.documentElement.style上是否有 scroll-behavior 这个属性。
    scroll-behavior :当用户手动导航或者 CSSOM scrolling API 触发滚动操作时,CSS 属性 scroll-behavior 为一个滚动框指定滚动行为,其他任何的滚动,例如那些由于用户行为而产生的滚动,不受这个属性的影响。
    所以在polyfill的开头首先判断是否支持scrollTo,如果支持直接return。

if ('scrollBehavior' in d.documentElement.style) {
    return;
}复制代码

2.对element添加scrollTo的方法。在原型对象上添加方法scrollTo

   const Element = window.HTMLElement || window.Element;

   Element.prototype.scrollTo = function () {
    let left = 0;
    let top = 0;
    if (arguments.length > 1) {
      left = arguments[0];
      top = arguments[1];
    } else {
      left = arguments[0].left;
      top = arguments[0].top;
    }
    this.scrollLeft = left;
    this.scrollTop = top;
  };复制代码

也可以直接引入smoothscroll polyfill的包


作者:eesram
链接:https://juejin.cn/post/7041845658730364941


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐