【问题标题】:How can I dynamically change the offset of a Bootstrap 5 dropdown menu using javascript or jQuery?如何使用 javascript 或 jQuery 动态更改 Bootstrap 5 下拉菜单的偏移量?
【发布时间】:2021-11-25 11:51:13
【问题描述】:

我的网络应用包含动态构建的 Bootstrap 5 下拉菜单,这些下拉菜单可能非常大。它们需要调整大小和重新定位以充分利用屏幕空间。所以我希望能够通过 javascript 控制或调整由 Popper.js 计算的 偏移量。但我还没有完成这项工作。 Popper.js 文档不是很清楚,我还没有找到任何文档或示例说明如何在 Bootstrap 5 中执行此操作。(data-bs-offset 属性不合适,因为它无法调用函数来提供动态偏移值.)

请参阅 JSFiddle https://jsfiddle.net/Martin_ATS/cqw5mjLv/3/ 上的代码示例。我可以通过bootstrap.Dropdown.getInstance() 和jQuery $(ddelem).dropdown() 访问Dropdown 对象,如hideDropdown() 函数所示。但是,尽管多次尝试调用 setOptions() 等,我还是无法通过 javascript 更改偏移量。

我想使用 Bootstrap/Popper 计算的 y 偏移量,但调整 x 偏移量,使菜单打开时更靠近左边距,并且最好留下右边距而不是点击右边窗户。代码 sn-p 是一个简化的示例。在实际应用中,下拉菜单内容的范围可以从小(Bootstrap/Popper 的正常偏移工作正常)到非常大(包括水平或垂直滚动​​)。

谢谢!

【问题讨论】:

    标签: javascript position dropdown bootstrap-5 popper.js


    【解决方案1】:

    获取popper的实例(也就是dd实例中的_popper),然后在modifers数组里面设置偏移量...

            var dd = bootstrap.Dropdown.getInstance(evt.relatedTarget);
            console.log(`shown.bs.dropdown ${evt.relatedTarget.id}`);
    
            var $ddelem = $(evt.relatedTarget);
            dd._popper.setOptions( {modifiers: [
                 {
                     name: 'offset',
                     options: {
                       // calculate and set the offset as needed here..
                       offset: [30, 10],
                     },
                 },
            ]})
    

    Demo

    【讨论】:

    • 这确实有效,谢谢!很高兴有这个工作示例。但似乎 Popper.js 的文档不正确,或者存在 Popper 错误。它声明“我们可以使用函数来读取当前选项并返回更新的选项”(popper.js.org/docs/v2/constructors/#setoptions),但是当我尝试 setOptions() 函数时,它从未被调用。查看我更新的 Fiddle,它同时使用了您的方法并尝试调用函数:jsfiddle.net/Martin_ATS/jb2q3ksf/17 那是我迷路的兔子洞!
    • 啊...Popper.js 刚刚在 9 月 2 日 (v.2.10.0) 添加了 setOptions() 函数参数功能。 Bootstrap 5.0.x 使用的是较早版本的 Popper.js。
    • 很遗憾我不能在 bootstrap 4 中做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多