【问题标题】:Making a tooltip-like flyout-menu scrollable?使类似工具提示的弹出菜单可滚动?
【发布时间】:2014-04-29 13:12:28
【问题描述】:

如果您查看http://jsfiddle.net/MG4hw/2/,就会看到一个红色的菜单按钮。将鼠标悬停在它上面会显示一个绿色弹出菜单。问题在于,在滚动蓝色任务栏或粉红色内容时(它们彼此独立滚动),弹出菜单不会与按钮保持对齐。

(弹出菜单是绝对定位的,因为作为蓝色任务栏的相对子元素,它会被前者的溢出属性隐藏。)

我尝试了 .scroll() 和 .scrollTop()(参见代码 cmets),但没有成功。

如果没有其他可能性,至少我想在滚动时隐藏弹出菜单。

function positioning() {
$('#start').bind({
    mouseenter: function () {
        var startOffset = $(this).offset();

        $('.start_options').css({
            position: 'absolute',
            top: startOffset.top, //+ $(document).scrollTop(), did not work
            left: startOffset.left - $('.start_options').width()
        });

        $('.start_options').show();
    },

    mouseleave: function () {
        $('.start_options').hide();
    }
});

$('.start_options').bind({
    mouseleave: function () {
        $(this).hide();
    },
    mouseenter: function () {
        $(this).show();
    }
});
};

$(document).ready(positioning); //function call upon loading page
$(window).resize(positioning); //function call upon window resizing
//$(window).scroll(positioning); did not work either

任何帮助将不胜感激!

【问题讨论】:

    标签: jquery scroll hover offset scrolltop


    【解决方案1】:

    喜欢吗? http://jsfiddle.net/honk1/MG4hw/4/

    这是我改变的东西:

    var startOffset = $(this).position();
    $('.start_options').css({
      position: 'fixed',
      top: startOffset.top + 8,
      left: $("#some_content").width() - $('.start_options').width()
    });
    

    加上我包含了一个非常糟糕的css重置样式,*,所以元素没有任何默认值。它是邪恶的,但它适用于示例。

    * {
      margin: 0;
      padding: 0;
    }
    

    编辑

    这是另一个小提琴,它也对滚动做出反应。检查函数,jQuery.bind() 从 v1.7 开始贬值,转而使用 jQuery.on()。另外,我还使用了“悬停”功能,只是为了向您展示如何绑定鼠标事件的另一种方法.. 另外我更改了函数的顺序,从 on 处理程序中取出一些并将它们放入准备好的处理程序中..

    http://jsfiddle.net/honk1/MG4hw/10/

    当退出 1.11.0 甚至 2.1 时,你为什么使用 jQuery 1.9.1(2.1. 与某些旧版本的 ie 不兼容,我猜..)

    【讨论】:

    • 非常感谢,根据我的具体需求稍作调整:jsfiddle.net/MG4hw/7) - 解决了(更大的)我的一半问题:在滚动左侧粉红色列时保持弹出按钮与按钮对齐.但是,当浮出控件可见并且我滚动蓝色的“.taskbar”时,浮出控件和按钮仍然未对齐...
    • 现在完美了,非常感谢!我正在使用 jQuery 1.9.1 与我的其他一些代码 sn-p 兼容。我什至考虑切换回删除toggle-event 之前的版本,我现在不得不用相当长的表达式替换它。是否有任何令人信服的理由反对这样做?
    • 嗯,与软件一样,使用实际的东西比使用旧的东西更好。考虑错误。在 jquery 的情况下,一些较新的插件可能依赖于更高版本中引入的功能。请记住,在我最近的编辑中,我使用了 .on()。这是在 v1.7 中引入的,因此它在较低版本中不起作用。你的代码 sn-p 是什么?也许这是SO的另一个问题?另外,确实存在一些可以派上用场的jquery.migrate?据我所知,它让旧代码在新的 jQuery 版本中工作。但我从未使用过它,所以我在这里没有真正的帮助。
    • 亲爱的 honk31,如果你有时间和兴趣,我可以向你指出我的一个相关问题,到目前为止还没有人能够解决? Question
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    相关资源
    最近更新 更多