iOS:禁用反弹滚动,但允许正常滚动

当用户点击页面边缘时,我不希望网站内容晃动。 我只是想让它停下来。

我到处看到的全方位的javascript解决scheme是这样的:

$(document).bind( 'touchmove', function(e) { e.preventDefault(); } ); 

但是这可以防止完全滚动。 有没有办法来消除反弹。 最好用CSS或一个元标签而不是JS,但任何有效的工作将会做。

我必须添加另一个答案。 我的第一种方法应该工作,但是,有一个iOS的错误,即使e.stopPropagation,它仍然在整个页面中。

mikeyUXfind这个解决方法︰https://stackoverflow.com/a/16898264/2978727我不知道为什么他只是点击几下这个伟大的想法…

我就是这样用他的方法

 var content = document.getElementById('scrollDiv'); content.addEventListener('touchstart', function(event) { this.allowUp = (this.scrollTop > 0); this.allowDown = (this.scrollTop < this.scrollHeight - this.clientHeight); this.slideBeginY = event.pageY; }); content.addEventListener('touchmove', function(event) { var up = (event.pageY > this.slideBeginY); var down = (event.pageY < this.slideBeginY); this.slideBeginY = event.pageY; if ((up && this.allowUp) || (down && this.allowDown)) { event.stopPropagation(); } else { event.preventDefault(); } }); 

通过阻止文档的默​​认行为来禁用弹跳:

 document.addEventListener("touchmove", function(event){ event.preventDefault(); }); 

通过防止触摸达到文档级别(您将防止滚动的位置)来允许滚动:

 var scrollingDiv = document.getElementById('scrollDiv'); scrollingDiv.addEventListener('touchmove', function(event){ event.stopPropagation(); }); 

注意这两者之间的区别:

 event.stopPropagation() event.preventDefault() 

StopPropagation应该是你的select! 这是一个非常好的解释: http : //davidwalsh.name/javascript-events

编辑:同样的问题,相同的解决scheme: document.ontouchmove和滚动iOS 5

编辑2:固定错字在variables名称中加方括号后面的方法

如果适用于桌面浏览器,不需要任何JavaScript代码,只需要几行CSS代码:

 html { height : 100%; overflow: hidden; } body { height : 100%; overflow: auto; } 

这个库是我的scheme的解决scheme。 简单的使用方法就是包含库并初始化你想要的位置;

 noBounce.init({ animate: true }); 

如果你想防止只弹跳一个元素,而不是在整个页面上,你可以这样做:

  noBounce.init({ animate: true, element: document.getElementById("content") }); 

我尝试了很多不同的方法,我在这里find了stackoverflow,但iNoBounce是真的为我工作的东西: https : //github.com/lazd/iNoBounce

我只是把它包含在我的index.html中:

 <script src="inobounce.js"></script> 

find一个对我有用的代码,我相信它会对你有用。

解决scheme写在这里: http : //apdevblog.com/optimizing-webkit-overflow-scrolling/

基本上,你需要有这个JS代码:

  document.addEventListener("DOMContentLoaded", ready, false); document.addEventListener("touchmove", function (evt) { evt.preventDefault(); }, false); function ready() { var container = document.getElementsByClassName("scrollable")[0]; var subcontainer = container.children[0]; var subsubcontainer = container.children[0].children[0]; container.addEventListener("touchmove", function (evt) { if (subsubcontainer.getBoundingClientRect().height > subcontainer.getBoundingClientRect().height) { evt.stopPropagation(); } }, false); } 

然后,让你的滚动div的类=“可滚动”。