这是我目前的情况:
我有一个包含几个可滚动 div 的网页。这些 div 中的每一个都包含许多对象。我正在使用 YUI 来显示可以在每个对象上执行的操作的弹出菜单。每个对象都有自己的与之关联的菜单,该菜单是动态构建和显示的。弹出菜单可以很大,并且可以与可滚动 div 的边界重叠。
从我认为焦点问题(菜单必须可访问)来看,当我将鼠标悬停在可滚动 div 边缘顶部的操作上时,div 会自动滚动,移动内容但使菜单保持静止。尝试在发生这种情况时动态移动菜单不是我想做的事情,因为我相信它会提供糟糕的用户体验。
所以我需要防止这个集中菜单滚动 div。我提供最佳用户界面的想法是防止这些内部 div 在菜单打开时滚动。这使菜单位于最佳位置,以向用户显示正在操作的项目。如果用户想要滚动该框,他们可以单击关闭菜单,然后正常滚动。
我怎样才能做到这一点?我需要一个适用于主流浏览器的解决方案。
我的第一个想法是听那个特定元素的onscroll事件。不幸的是,似乎没有一种简单的方法可以防止滚动发生。一方面,我的 Javascript 事件代码似乎在实际滚动发生后执行。
然后,我认为由于我的代码在对象滚动后运行,我可以重置obj.scrollTop和obj.scrollLeft。果然,这似乎可行,尽管我担心在慢速浏览器上用户会看到 div 内的内容“跳来跳去”。此外,如果元素滚动的量是事件对象的一部分,那就太好了。它卡在某个地方了吗?我正在寻找一种替代方法,而不是必须为此元素存储 scrollTop 和 scrollLeft 变量,然后在暂时禁用滚动时使用它们。
解决整个问题的最佳方法是什么?