【发布时间】:2010-10-14 14:53:51
【问题描述】:
这是我目前的情况:
我有一个包含几个可滚动 div 的网页。这些 div 中的每一个都包含许多对象。我正在使用 YUI 来显示可以在每个对象上执行的操作的弹出菜单。每个对象都有自己的与之关联的菜单,该菜单是动态构建和显示的。弹出菜单可以很大,并且可以与可滚动 div 的边界重叠。
从我认为的焦点问题(菜单必须可访问)来看,当我将鼠标悬停在可滚动 div 边缘顶部的操作上时,div 会自动滚动,移动内容但离开菜单静止。在发生这种情况时尝试动态移动菜单不是我想做的事情,因为我认为这会提供糟糕的用户体验。
所以我需要防止这个集中菜单滚动 div。我提供最佳用户界面的想法是防止这些内部 div 在菜单打开时滚动。这使菜单位于最佳位置,以向用户显示正在操作的项目。如果用户想滚动该框,可以点击关闭菜单,然后正常滚动。
我该怎么做?我需要一个适用于主流浏览器的解决方案。
我的第一个想法是监听那个特定元素的 onscroll 事件。不幸的是,似乎没有一种简单的方法可以防止滚动发生。一方面,我的 Javascript 事件代码似乎在实际滚动发生后执行。
然后,我想既然我的代码是在对象滚动后运行的,我可以重置 obj.scrollTop 和 obj.scrollLeft。果然,这似乎可行,尽管我担心在慢速浏览器上用户会看到 div 内的内容“跳来跳去”。此外,如果元素滚动的量是事件对象的一部分,那就太好了。它卡在某个地方了吗?我正在寻找一种替代方法,无需为此元素存储 scrollTop 和 scrollLeft 变量,然后在暂时禁用滚动时使用它们。
解决整个问题的最佳方法是什么?
【问题讨论】:
-
为什么要这样做?这听起来像是一场可用性噩梦。你能解释一下使用的上下文是什么吗?
-
我的猜测是迫使欧盟阅读条款和条件或许可协议
-
@Rahul 我已经更新了我的问题,提供了有关我正在尝试做什么的更详细信息。这是一个严重的情况,我认为这是处理它的最佳方式。
标签: javascript html events javascript-events event-handling