2011-08-19 77 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()?

相关问题