【问题标题】:iOS Webapp: Disable scroll on page except for textareaiOS Webapp:禁用除textarea以外的页面滚动
【发布时间】:2011-12-12 03:18:31
【问题描述】:

我正在为 iOS 制作一个网络应用程序。我希望它是不可滚动的,除了文本区域(需要可滚动)。我尝试过查看类似的问题,例如 disable enter key on page, but NOT in textarea 没有运气(该示例看起来最有希望,但我在 Safari 中遇到“找不到变量节点”错误)。

谁能帮我解决这个问题?谢谢

没有解决我的问题但很有帮助 - 标记为最佳答案

【问题讨论】:

    标签: javascript ios web-applications scroll


    【解决方案1】:

    您可以查看用户是否正在尝试滚动(通常一根手指在屏幕上移动表示滚动),并使用 onTouchMove 事件侦听器,防止默认和传播。

    var element = document.getElementById("textarea");
    element.addEventListener("touchmove",function(e){onTouchMove(e)},false);
    
    function onTouchMove(e) {
    
        if(e.touches.length != 1) return;
    
        e.stopPropagation();
        e.preventDefault();
    
    }
    

    无论如何,当涉及到滚动内部元素时,iDevices 有点棘手。通常人们试图在内部元素上实现滚动效果:)

    【讨论】:

    • 嗯。不幸的是,我已经用一根手指设置了 textarea 的滚动(我希望它表现得好像 textarea 是“背景”)。但我会看看你的代码并尝试看看我是否可以实现它以便它工作。谢谢!编辑:有没有一种方法可以“覆盖”现有功能(阻止在正文中滚动的功能)?就像 CSS 中子项如何优先于更一般的项一样
    • 你可能已经想通了;回复晚了非常抱歉。如果您使用 addEventListener 添加事件,则可以使用最后一个布尔参数指定事件如何冒泡。 quirksmode.org/js/events_order.html
    • 嗯,现在我确定这一定很愚蠢,但我无法弄清楚 xD 这是我的代码(函数中的操作已注释掉 atm) function cancelEvent() { //警报(事件); //event.preventDefault(); //event.preventPropagation(); } document.getElementById('display').addEventListener('touchmove', function(e){cancelEvent(e)}, false); document.getElementById('body').addEventListener('touchmove', function(e){cancelEvent(e)}, false);当我执行 alert(event) 时,它会给出“object touchevent”,但是当我尝试 preventDefault() 和 preventPropagation 时,它会给出“null”错误。
    • cancelEvent 函数没有参数。另外,是否有一个 id 为“body”的元素,或者你想获取 body 元素?
    • 是的哈哈傻了我。所以我一直在玩传播,但运气不佳。这个想法(无论如何我都有)是我会阻止传播并使用冒泡('false'参数),以便滚动通常用于文本框,但不会发送到正文标签。但是,这对我不起作用。抱歉给你添麻烦了,有点被勺子喂了哈哈,但是我怎么能用 preventPropagation 来隐藏身体的滚动呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多