【问题标题】:Focused element is hidden behind fixed menu焦点元素隐藏在固定菜单后面
【发布时间】:2012-01-17 12:18:49
【问题描述】:

我有一个网站,底部有一个菜单,我将其设置为固定位置。滚动时它仍然存在。

当使用键盘选项卡导航站点时,如果焦点元素尚未在视口中,则会自动滚动到该站点。这里的问题是,当一个焦点元素被滚动到它时,它不会显示,因为它位于底部的固定菜单后面。

关于如何解决这个问题的任何想法,以便窗口滚动到焦点元素显示的位置。

谢谢

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    试试这个滚动代码:

    // lets say element is the DOM element you want to scroll into view
    function scrollNow(element) {
       // create a dummy element X pixels above 'element' 
       // where X is the height of your bottom menu
       // if X is not known in advance, calculate it using $('#menu').outerHeight()
       var dummy = $('<div></div>').css({
          position: 'absolute', top: $(element).offset().top - X 
       }).appendTo('body');
       dummy[0].scrollIntoView();
       dummy.remove(); // remove the dummy element
    }
    

    【讨论】:

    • 酷,看起来很有前途。现在,当我应该运行此代码时如何捕获事件?这应该仅在元素通过 Tab 键获得焦点时触发。
    • 为此,您应该在onblur 上调用它,即$('.x').blur(function() { scrollNow(this); }); - 根据需要替换.x
    • 但该事件不会包含错误的元素吗?模糊的(先前聚焦的)元素,而不是新聚焦的元素。不知何故,我还应该检查它是否通过标签而不是通过点击获得。
    • 糟糕!我指的是.focus(..) 事件,而不是.blur(..) 事件。我的错。道歉。 $('.x').focus(function() { scrollNow(this); }); 是要走的路。
    • 好。但是我想做的tabkey检查呢?我不想仅在通过选项卡获得焦点时在每个焦点事件上运行它。单击焦点不应运行 scrollNow()
    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 2012-03-31
    • 2015-12-08
    • 2011-04-27
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多