如何通过URL自动展开Bootstrap 4嵌套Collapse折叠面板
实现思路
你的活动折叠项本身是嵌套在对应日期的.collapse容器内的,只要先找到活动所属的外层折叠容器,按「先展开外层日期→再展开内层活动」的顺序触发即可,同时为了避免滚动位置计算错误,要等折叠动画完成后再执行滚动定位。
代码实现
替换你原有JS代码为以下内容即可:
jQuery($ => { if (window.location.hash) { const hash = window.location.hash; const $eventCollapse = $(hash); // 校验目标活动折叠项是否存在 if ($eventCollapse.length) { // 找到活动所属的外层日期折叠容器 const $dayCollapse = $eventCollapse.parents('.collapse').first(); // 监听外层折叠完成事件 $dayCollapse.one('shown.bs.collapse', () => { // 外层展开后再展开内层活动 $eventCollapse.collapse('show'); // 内层活动展开完成后执行滚动 $eventCollapse.one('shown.bs.collapse', () => { $('html, body').animate({ scrollTop: $eventCollapse.offset().top - 180 }, 500); }); }); // 触发外层日期折叠项展开 $dayCollapse.collapse('show'); } } });
说明
- 用
parents('.collapse').first()可以精准匹配到活动所属的最近一级外层折叠容器,就算后续嵌套层级调整也能适配 - 用Bootstrap原生的
shown.bs.collapse事件监听折叠完成状态,不需要手动写定时器,适配自定义的折叠动画时长,滚动定位不会出现偏移 - 加了元素存在性校验,避免hash不存在时控制台报错
内容的提问来源于stack exchange,提问作者Lara Kreisz
相关产品推荐
相关产品推荐

