Bootstrap 引导程序5关闭画布禁用单击关闭

ndasle7k  于 2022-12-07  发布在  Bootstrap
关注(0)|答案(8)|浏览(260)

我正在使用offcanvas组件(https://getbootstrap.com/docs/5.0/components/offcanvas/)。但是我想知道当我在offcanvas窗口外单击时,是否可以阻止它关闭。我已经设法阻止它在我按ESC键时关闭,但是当我在offcanvas窗口外单击鼠标时,没有办法(就文档而言)阻止它关闭。有人有什么想法吗?
编辑:我通过监听hide.bs.offcanvas事件,然后使用e.preventDefault(),设法让它工作了一半;但是现在我无法用它的默认关闭按钮关闭offcanvas,因为它总是会取消隐藏事件。

vqlkdk9b

vqlkdk9b1#

Bootstrap会在body中添加一个click侦听器。因此,您需要在body中附加一个click事件侦听器,并阻止事件传播...

document.body.addEventListener('click', function(e){
    e.stopPropagation()
})

Demo

eanckbw9

eanckbw92#

我找到了一个只使用CSS的解决方案,通过在offcanvas-backdrop类上设置pointer-events:none

.offcanvas-backdrop.fade.show {
 pointer-events:none 
}

这将阻止offcanvas背景上的任何点击事件,offcanvas内的点击事件将照常工作。

xwmevbvl

xwmevbvl3#

现在,添加data-bs-backdrop="static"可以防止在画布外部单击时关闭画布(=单击背景)
请参考https://getbootstrap.com/docs/5.2/components/offcanvas/#static-backdrop

lfapxunr

lfapxunr4#

通过使用beforeDismiss返回false,它不会关闭dismiss选项,因为点击背景指向dismiss它不会关闭offcanvas,为了关闭offcanvas,我们可以使用close方法

ngbCanvasOptions: NgbOffcanvasOptions = {
    beforeDismiss: () => {
      return false;
    },
    keyboard: false,
    animation: true
  };
zrfyljdw

zrfyljdw5#

.offcanvas-backdrop {
  pointer-events: none !important;
}

将按预期工作
请将其放置在根CSS文件中。

bjp0bcyl

bjp0bcyl6#

Bootstrap 5.2引入了新的选项。

功能是静态背景
Bootstrap 5.1却没有。
但是您可以使用js代码:

let offcanvasEl = $("#myOffcanvas");
let offcanvasAllowClose = false;

offcanvasEl.find("button, a").on("click", () => offcanvasAllowClose = true);

offcanvasEl.on("hide.bs.offcanvas", (ev) => {
    if (offcanvasAllowClose) return;
    ev.preventDefault();
});
bogh5gae

bogh5gae7#

我不喜欢这个解决方案,但它能满足我今天的需求。(我真的希望Bootstrap能尽快给予这个功能。)

$("#myOffcanvas").on("shown.bs.offcanvas", function () {
    const backdrop = $(".offcanvas-backdrop");
    const parent = backdrop.parent();
    const cloned = backdrop.clone();
    backdrop.remove();
    parent.append(cloned);
}).on("hide.bs.offcanvas", function () {
    $(".offcanvas-backdrop").remove();
});
s2j5cfk0

s2j5cfk08#

data-bs-keyboard="false"设置为off-canvas元素的data-attribute似乎在Bootsrap 5.1.1中有效

相关问题