【问题标题】:touch events not working in android phonegap webview (or even built-in browser)触摸事件在android phonegap webview(甚至内置浏览器)中不起作用
【发布时间】:2012-09-17 04:44:10
【问题描述】:

我正在使用phonegap,需要使用'touchstart'来加速点击响应,才意识到'touchstart','touchmove','touchend'都没有触发,而是'click'。

我什至在内置浏览器(7英寸android 4.0.3平板电脑)中测试了一个简单的页面,发现它失败了。

我在两台平板电脑上进行了测试,结果仍然相同。 在以下页面中,button2 仅显示 'html_click',button3 仅显示 'click':

<!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf8">
    <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width">
    <title>Droid touch event test.</title>
    </head>
    <body>
    <button id="button">touch it</button>
    <button id="button2" ontouchstart="d_('html_touchstart')" onclick="d_('html_click')">html</button>
    <button id="button3">touch 3</button>
    <div id="db"></div>
    <script>
            function $(d){return document.getElementById(d)}
            function d_(m){dbo.innerHTML=dbo.innerHTML+' '+m}
            function ts1(e){d_('document touched')}
            function ts2(e){d_('button touched')}
            function eh(e){
                d_(e.type);
            }
            var ets='touchstart',dbo=$('db');
            document.addEventListener(ets,ts1,false);
            $('button').addEventListener(ets,ts2,false);
            $('button3').addEventListener(ets,eh,false);
            $('button3').addEventListener('touchend',eh,false);
            $('button3').addEventListener('click',eh,false);
    </script>
    </body>
    </html>

为什么“touchstart”没有触发?我应该做些什么来使触摸事件起作用吗? 或者有没有其他方法可以让点击响应更快?

我使用mousedown 事件,工作但不是特别快。

mousedownclick 之间的(new Date()).getTime() 差异(包括一些innerHTML 变化)仅为15 左右。

【问题讨论】:

  • 朋友把你的概念讲清楚
  • 我想为“touchstart”添加一个监听器,但它不会触发。我应该怎么做才能让它发挥作用?
  • 我认为您需要在 html 文件本身上创建触摸侦听器,这样会更好

标签: javascript android touch


【解决方案1】:

只保留向您展示概念所必需的内容,我编写了此代码并在 ICS 设备上使用 Phonegap Build(默认为 Phonegap 2.0,但不重要)进行了测试。应该适合你:

<!DOCTYPE html>
<html>
    <body>
        <button id="button1">1</button>
        <button id="button2">2</button>

        <script>
            document.getElementById("button1").addEventListener('touchstart',button1Pressed);
            document.getElementById("button2").addEventListener('touchstart',button2Pressed);
            function button1Pressed ()
            {
                alert('Button 1 Pressed');
            }

            function button2Pressed ()
            {
                alert('Button 2 Pressed');
            }
        </script>
    </body>
</html>

【讨论】:

  • 还是一样。在具有相同操作系统的其他设备上工作的相同代码不起作用,所以我现在确定这是特定于设备的问题,而不是代码或 ICS。
【解决方案2】:

我也遇到了同样的问题。在下面的第一行,我收到错误“Android WebView and NO_FAST_DRAW = false”。换到二线后。有效。错误出现在 createCustomAlert('wpt') 处。所以我被调用的函数看起来像一个字符串。这个错误来了。所以请检查函数调用的地方

onclick = 'createCustomAlert('wpt')'

onclick = 'createCustomAlert(3)'

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题,并且搞砸了将近三天。我将点击事件放在我的 html 输入标签 (EditText) 上并尝试过,但它也没有奏效。最后,为了我的奇迹,我只是放了一个简单的alert("Hello") 来查看ontouchstart。令我惊讶的是,我成功地获得了警报和软键盘,为此我尝试了将近一周。你也试试这个.. 祝你好运

    【讨论】:

    • &lt;button id="button4" ontouchstart="alert('touch4')"&gt;touch 4&lt;/button&gt; 什么都没有。 &lt;button id="button6" ontouchstart="alert('touch 6')" onclick="alert('click 6')"&gt;touch 6&lt;/button&gt; 仅“点击 6”
    • 注释掉所有addEventListeners,仍然只有click有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多