防止 Internet Explorer 11 中的过度滚动

Posted

技术标签:

【中文标题】防止 Internet Explorer 11 中的过度滚动【英文标题】:Preventing overscroll in Internet Explorer 11 【发布时间】:2014-06-23 13:16:47 【问题描述】:

我有一个网站上有一个<div> 可以垂直滚动。效果很好。我也隐藏了滚动条,这也很好用。 CSS本质上是

.scrollable 
  overflow-y: scroll;
  -ms-overflow-style: none;

不过,我目前在 Internet Explorer 11 和 Windows 7 的触控显示器上遇到了问题。当用户点击滚动底部的顶部时,窗口会弹跳(即过度滚动)。虽然这对大多数用户来说只是一个烦恼,但这是在信息亭中全屏运行,因此 overscoll 允许桌面窥视(不仅仅是浏览器背景)。

我一直未能找到解决此问题的方法。 touch-action(加前缀和不加前缀),例如

html, body, .scrollable 
  -ms-touch-action: none;
  touch-action: none;

似乎什么也没做,也没有

document.addEventListener('touchmove', function (e)  e.preventDefault(); , false);
document.addEventListener('MSPointerMove', function (e)  e.preventDefault(); , false);

This jsBin 显示问题。

那么,在 IE11 / Windows 7 中防止过度滚动的正确方法是什么。

【问题讨论】:

最近 overscroll-behavior 被添加到 Firefox 59 和 Chrome 65 并将添加到 Edge 18。 【参考方案1】:

这个问题可以通过css3中的word-wrap属性解决。我还加了一个overflow-x:hidden来确定。

.scrollable 
  overflow-y: scroll;
  -ms-overflow-style: none;
  word-wrap:break-word;
  overflow-x:hidden;
            

您可以在这里阅读更多关于自动换行的信息- http://www.w3schools.com/cs-s-ref/css3_pr_word-wrap.asp

如果您不理解我的问题的任何部分,或者这没有解决您的问题,请发表评论并告诉我,以便我愿意回答更多问题。

【讨论】:

这在我发布的 JSBin 示例和实际站点中都没有解决。 @MPD 看到我的新答案。【参考方案2】:

抱歉应该在发布答案之前进行测试。

我测试了jsbin问题并这样解决了。将这些样式分配给 scrollie 类:

.scrollie 
  max-height: 200px;
  width: 300px;
  overflow-y:scroll;
  word-wrap:break-word;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -o-user-select: none;
  user-select: none;

【讨论】:

那行不通。当您尝试滚动到极限时,整个窗口仍然会移动。此外,您可以只编辑原始答案。无需发布新的。 它确实在 JS Bin 中解决了它,但是,是的,我不是 100% 确定它会在 iE 中工作【参考方案3】:

我相信我通过在您的 CSS 中添加以下内容来修复它:

body 
    overflow: hidden;

您可以在this updated jsBin查看结果

【讨论】:

窗口仍然过度滚动/反弹。【参考方案4】:

尝试使用:

.scrollable 
  overflow: auto;
  zoom: 1;

.scrollable 
  overflow: hidden;
  zoom: 1;

【讨论】:

窗口仍然过度滚动/弹跳。【参考方案5】:

跳出框框思考(看看我在那里做了什么)会给父元素 - bodysection 甚至另一个 div 背景颜色缓解桌面显示的主要问题?

要不然看看

-ms-scroll-chaining: none;

http://msdn.microsoft.com/en-us/library/ie/hh772034(v=vs.85).aspx 的属性看起来可能会解决您的问题 - 尽管我无法自己测试它。

【讨论】:

如果这确实解决了问题,请及时通知我们,因为我之前没有遇到过这个问题 - 注意自己,攒钱买触摸屏 win7 盒子;) 通过在 google 上搜索“在 ie11 touch 上滚动反弹”找到的仅供参考的链接 这并不能防止过度滚动/反弹。提供的 MSDN 链接还提到这仅适用于 Windows 8 及更高版本。 "这是一个特定于 IE 的解决方法,并在根滚动器上禁用滚动链接 (--ms-scroll-chaining: none)。这实际上在实践中效果不佳,因为它只会阻止过度滚动操作,如果页面没有完全滚动到它的范围内,需要页面是可滚动的”——来自discourse.wicg.io/t/…【参考方案6】:

过度滚动反弹效果不仅限于 Internet Explorer 11,甚至可以在记事本等简单的应用程序中看到。

要禁用该效果,请将以下注册表项设置为“0”:

HKEY_CURRENT_USER\Software\Microsoft\Wisp\Touch\Bouncing

【讨论】:

以上是关于防止 Internet Explorer 11 中的过度滚动的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?

如何在 Internet Explorer 11 中支持 Promise?

获取 polyfill 在 Internet Explorer 11 中具有不同的响应对象

Internet Explorer 11 中的光标偏移

:after, :before Internet Explorer 11 中的问题

无法在 AngularJS 中的 Internet Explorer 11 中获取事件目标的父级