2011-08-19 108 views
2

我有一個顯示交互式地圖的Java小程序。通過使用滾輪,用戶可以放大/縮小地圖。不幸的是,網頁瀏覽器(Firefox)也響應滾動事件,並且applet最終從可見頁滾動。如何防止瀏覽器響應滾動事件

我的問題是,當鼠標位於小程序邊界內時,如何防止瀏覽器響應?

到目前爲止,我已經嘗試改變我的HTML,使小程序請求焦點

applet.focus() 

我也嘗試添加聲明,我的小應用程序的Java代碼,這樣

requestFocus(); 

但無論是已經解決問題。

我可以在applet中添加一個特定的放大/縮小控制,或者可能重構我的網頁,以減少網頁滾動的需要,但如果滾輪執行縮放僅地圖。

+1

任何以*「如何防止瀏覽器」開頭的東西都不是我們的權利(用戶的瀏覽器),也不是您嘗試用Java(當然不是沙盒小程序)的東西。 –

+0

你的意思是在一個單獨的窗口中運行小程序?小程序與網頁上的其他控件進行交互,以過濾地圖上顯示的內容。 –

+0

單獨的窗口 - 小程序查看器用於顯示自由浮動的小程序。 *「小應用程序與網頁上的其他控件進行交互」*感謝您的澄清 - 這是嵌入式小程序有意義的少數情況之一(並且它排除了「使用web start啓動」選項)。 –

回答

4

使用JavaScript和做這樣的事情:

var applet = document.getElementById("appletID"); 
applet.mouseover = function(e) { 
    document.body.onscroll = function(e) { 
     e.preventDefault(); 
    } 
} 

applet.mouseout = function(e) { 
    //replace with empty function 
    document.body.onscroll = function(e) { } 
} 

這是不是未經測試的代碼。就像我說的錯別字可能是一對夫婦錯別字

編輯...我試用了一下它的工作原理是肯定的:

window.onload = function() { 

var applet = document.getElementById("header"); 
    applet.onmouseover = function(e) { 
     window.onscroll = function(e) { 
     //scroll where you want to be (the top) 
      scroll(0,0) ; 
     } 
    } 

    applet.onmouseout = function(e) { 
      //replace with empty function 
      window.onscroll = function(e) {} 
    } 

}; 

使用滾動方法是不是乾淨的,但的preventDefault似乎並沒有工作。 ..

+0

+1。我認爲JS是唯一一個可以用來製作沙盒小程序的方法。 –

+0

好主意,並接受,但由於某種原因,我的onscroll函數永遠不會被調用。我在e.preventDefault()上設置了一個斷點,並且它從未被擊中。可能其他一些JS代碼正在設置不同的onscroll函數? –

0

您是否嘗試將MouseListener附加到顯示地圖的容器,然後讓您的容器requestFocus()?

相關問題