繁体   English   中英

Android - JavaScript:在缩放或滚动页面之前不会触发touchstart事件

[英]Android - JavaScript : touchstart event not fired until zoom or scroll the page

在我的Android应用程序中,用户可以使用ViewPager浏览一些HTML页面,用户可以触摸要突出显示的元素。

问题是当尝试使用以下代码使用javascript获取触摸事件时,elementFromPoint在导航到新页面时返回null,但在用户缩放页面或滚动页面后,它可以正常工作。

我发现touchstart事件的注册发生在缩放或滚动页面之后。 所以它在那之后工作,虽然它在$(document).ready()上注册

        $(document).ready(function(){
            document.addEventListener("touchstart", touchstart, false);     
        });     

        function touchstart(e) {                              
            var x = e.targetTouches[0].clientX; 
            var y = e.targetTouches[0].clientY;                             
             el = document.elementFromPoint(x, y);  
            }

谢谢

调用javascript后在java代码中编写下一个代码:

    myWebview.scrollTo(1, 0);
    myWebview.scrollTo(0, 0);

或使用放大然后缩小

    myWebview.zoomIn();
    myWebview.zoomOut();

使用Mohamed Abdel Latif的解决方案(显然这是另一个蹩脚的WebView错误)下面就是在Android 4.1.2上修复它的原因。 注意:我在Android 4.4.2上测试了这个,并且不需要这个hack-to-fix-a-bug。

@Override
public void onCreate(Bundle savedInstanceState)
{

    final WebView myWebView = (WebView) findViewById(R.id.mywebview);
    myWebView.setHorizontalScrollBarEnabled(false);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadDataWithBaseURL("file:///android_asset/", YOUR_HTML_GOES_HERE, "text/html", "utf-8", null);

    myWebView.setWebViewClient(new WebViewClient()
    {
        // overcome the ontouchstart registration bug !
        @Override
        public void onPageFinished(WebView view, String url)
        {
            super.onPageFinished(view, url);
            final WebView myWebView = (WebView) findViewById(R.id.mywebview);
            myWebview.scrollTo(1, 0);
            myWebview.scrollTo(0, 0);
        }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM