2013-01-23 30 views
6

Trong ứng dụng Android của tôi, Người dùng có thể duyệt một số trang HTML bằng ViewPager và người dùng có thể chạm vào yếu tố để đánh dấu.Android - JavaScript: sự kiện touchstart không được kích hoạt cho đến khi thu phóng hoặc cuộn trang

vấn đề là khi cố gắng nhận sự kiện chạm bằng javascript sử dụng mã sau, elementFromPoint trả về null khi điều hướng đến trang mới, nhưng sau khi người dùng phóng to trang hoặc cuộn lên, nó hoạt động đúng.

Tôi thấy rằng đăng ký của sự kiện cảm ứng xảy ra sau khi thu phóng hoặc cuộn trang. vì vậy nó hoạt ngay sau đó mặc dù nó được đăng ký trên $ (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); 
      } 

Cảm ơn bạn

Trả lời

7

ghi mã tiếp theo trong mã java của bạn sau khi gọi javascript:

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

hoặc sử dụng phóng to rồi thu nhỏ

myWebview.zoomIn(); 
    myWebview.zoomOut(); 
+0

Cảm ơn bạn, Mã này hoạt động tốt, Nhưng tại sao? –

+0

Cảm thấy khá hacky, nhưng nó hoạt động. Nhân tiện, nếu bạn đang làm hoạt hình WebView của mình từ màn hình ngoài, bạn sẽ cần phải chạy các dòng mã sau khi hoạt ảnh đã hoàn tất. Tôi thiết lập nó trong một phương thức onAnimationEnd của Animator.AnimatorListener() và nó hoạt động rất tốt. Tôi cũng xác nhận rằng nó hoạt động ngay cả khi nội dung của trang không đủ lớn để yêu cầu cuộn. –

+0

Brian - bạn có nhớ nếu webview là màu trắng nếu bạn không đợi hoạt ảnh hoàn thành và được gọi là phương pháp phóng to/thu nhỏ? –

0

sử dụng giải pháp của Mohamed Abdel Latif (rõ ràng đây là anoth Lỗi WebView erame) dưới đây là những gì đã sửa nó cho tôi trên Android 4.1.2. Lưu ý: Tôi đã thử nghiệm tính năng này trên Android 4.4.2 và không cần phải sửa lỗi hack-to-fix-a-bug này.

@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); 
     } 
    }); 
} 
Các vấn đề liên quan