javascript - e.preventDefault()导致webkit mobile溢出失败

标签 javascript jquery html css mobile-webkit

我正在尝试解决一个困扰我整个周末的问题。

在移动 webkit 上(我的情况是 Safari iOS 5.1)当我在 body 中放置任何禁用默认行为的东西时,我无法保持 -webkit-overflow-scrolling:touch 行为正常工作.

$('body').on({
    touchmove : function(e){
        //e.preventDefault(); // I played with these as well
        //e.stopPropagation();
        return false;
    }
});

上面 return false 的原因:我不希望 body 在你滑动时移动,这是默认的移动 safari 行为。

Fiddle 1 - 触摸溢出在包含所有文本的中间框中起作用,但主体也会移动,这是我不想要的: http://jsfiddle.net/MeLxg/1/

Fiddle 2 - 正文现在通过在它的 mousemove 事件上返回 false 来修复,但是溢出不再起作用,你不能滚动文本框: http://jsfiddle.net/MeLxg/2/

为您提供方便的二维码(它是移动的,毕竟,使用您的扫描仪)

Fiddle 1 仅查看面板 http://jsfiddle.net/MeLxg/1/show/ http://jsfiddle.net/MeLxg/1/show/


Fiddle 2 仅查看面板 http://jsfiddle.net/MeLxg/2/show/ http://jsfiddle.net/MeLxg/2/show/

最佳答案

您需要稍微改变一下。您的代码正在做它应该做的事情。由于 body 封装了您将 -webkit-overflow-scrolling:touch 应用到的任何元素,因此可滚动的 div 或任何无法滚动的内容,因为它在 body 中。也许您可以通过创建一个虚拟元素来获得类似的效果,该虚拟元素只是为了跨越整个设备的宽度和高度,该元素将捕获您想要滚动的此 div 之外的任何触摸移动事件。

http://jsfiddle.net/ericjbasti/MeLxg/3/

// added html
<div id="stopTouch"></div>


// added css 
#stopTouch{
   position: absolute;
   height: 100%; 
   width: 100%;
   background: rgba(0,0,0,.1); // just so i can see its filling the screen
}

// changed js
$('#stopTouch').on({
    touchmove : function(e){
        //e.preventDefault();
        //e.stopPropagation();
        return false;
    }
});

关于javascript - e.preventDefault()导致webkit mobile溢出失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16658755/

相关文章:

javascript - JQuery,左位置错误

javascript - Google analytics.js 使用 jQuery 动态设置 contentGroup

jQuery 工具工具提示 - 更改标题

jquery - 如何调用iframe的unload事件

css - 如何在html邮件中添加 "Share"按钮?

jquery - 如何以编程方式更改 HTML 选项标签颜色?

javascript - 动态 PDF 与 HTML 转 PDF

javascript - 如何找到正确的这个?

javascript - 如何在 Amcharts 中显示基础数据范围之外的股票事件?

JavaScript - 这个硬币找零算法有什么问题