当组件变得可见时,如何触发事件。必须是独立的

时间:2011-03-18 22:52:53

标签: javascript jsf javascript-events visibility

我想知道是否有人知道在组件可见时触发事件的方法。

在我的情况下,我有一堆客户端标签及其下的一些组件,需要知道它们何时可见。因此,它们被某个父容器隐藏或显示。我无法控制这些选项卡,因此我无法在切换选项卡时触发事件(我正在编写一个独立的JSF组件,因此我无法始终预测使组件可见的确切操作是什么)。

因此,此解决方案必须自包含在我的组件中。我的组件是否有办法确定它由于父容器中的某些更改而变得可见?

谢谢!

2 个答案:

答案 0 :(得分:1)

在做了一些研究并查看http://plugins.jquery.com/project/watch插件的代码之后,我得出的结论是,没有基于好事件的方法可以在所有浏览器中执行我需要的操作。

所以,我不得不采用轮询方法。我的解决方案涉及检查组件可见性:

jQuery(this.id).is(":visible")

如果组件可见,我会为组件运行繁重的javascript代码。如果它不可见,我每200ms运行一个例程来检查组件是否可见。这样我就知道组件何时首次可见,所以我可以处理它。

由于每200ms执行的代码量非常小(只是可见性检查,我认为这是基于测试组件宽度== 0),这似乎表现得相当不错。

所以,不像我希望的那样解决方案很酷,但它似乎完成了工作。

答案 1 :(得分:0)

我通过在tabtrip切换标签时触发resize事件来解决这个问题:

window.dispatchEvent(new Event('resize'));

您还可以考虑解雇scroll和/或visibilitychange