首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在弹出模式窗口时禁用背景

如何在弹出模式窗口时禁用背景
EN

Stack Overflow用户
提问于 2017-08-10 16:11:51
回答 3查看 34.4K关注 0票数 7

我正在建立一个网页模板,并为模式弹出一些修改,如下所示:

代码语言:javascript
复制
<div class="modal fade" id="myModal4" tabindex="-1" role="dialog" style="background-color:#FECE1A;display:none;width:750px;left:46%" aria-hidden="true">
  <div class="modal-dialog">
  <script>
    $("#myModal4").on("show", function () {
      $("body").addClass("modal-open");
    }).on("hidden", function () {
      $("body").removeClass("modal-open")
    });
  </script>
  <!--Modal Content-->
  </div>
</div>

Body.mode-open css函数如下所示

代码语言:javascript
复制
body.modal-open {
  overflow: hidden;
}

弹出窗口工作正常。问题是,每当弹出窗口出现时,我仍然可以单击模板的标题菜单和后台的一些链接。如何在后台禁用所有内容,以便只能单击弹出窗口中的可用内容。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-10 16:40:01

你可以使用overlay --另一个覆盖html的全屏幕大小的div,额外的好处是在身体上形成一个半透明的灰色阴影。

在本例中,使用两个div。

一个是覆盖,另一个(为了方便,在覆盖内)是模式。

代码语言:javascript
复制
<div class="overlay">
  <div class="modal">
    This is the modal. You can put whatever you like in here.
  </div>
</div>

现在,覆盖图需要样式:

代码语言:javascript
复制
.overlay {
  position: fixed; /* Positioning and size */
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: rgba(128,128,128,0.5); /* color */
  display: none; /* making it hidden by default */
}

而且这个模式也需要一些:

代码语言:javascript
复制
.modal {
  position: fixed; /* positioning in center of page */
  top: 50vh;
  left: 50vw;
  transform: translate(-50%,-50%);
  height: 400px; /* size */
  width: 600px;
  background-color: white; /* background color */
}

通过放入以下内容来包含jQuery:

代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

在代码顶部的head标记中。

然后,使用此按钮打开模式:

代码语言:javascript
复制
<button onclick="$('.overlay').show();">Open modal</button>

这段要捕捉的jQuery代码单击覆盖图,而不是它的子对象。

代码语言:javascript
复制
$('.overlay').on('click', function(e) {
  if (e.target !== this) {
    return;
  }
  $('.overlay').hide();
});

代码语言:javascript
复制
$('.overlay').on('click', function(e) {
  if (e.target !== this) {
    return;
  }
  $('.overlay').hide();
});
代码语言:javascript
复制
.overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: rgba(128,128,128,0.5);
  display: none;
}
.modal {
  position: fixed;
  top: 50vh;
  left: 50vw;
  transform: translate(-50%,-50%);
  height: 400px;
  width: 600px;
  background-color: white;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<a href="https://www.google.co.uk">This is a link, but with the modal open you can't click it!</a>
<br>
<br>
<button onclick="$('.overlay').show();">Open modal</button>

<div class="overlay">
  <div class="modal">
    This is the modal. You can put whatever you like in here.
  </div>
</div>

票数 11
EN

Stack Overflow用户

发布于 2017-08-10 16:19:08

引言

一个简单的解决方案是添加一个覆盖背景的<div>,它位于弹出窗口的下方,但在所有其他内容之上。

下面是一个非常简单的例子,我可以想象你正在尝试做什么。希望您可以对其进行调整以适应您的场景。

示例

代码语言:javascript
复制
function openModal() {
  $("#overlay").css({"display":"block"});
  $("#modal").css({"display":"block"});
}
代码语言:javascript
复制
#modal {
  position:fixed;
  left:50%;
  top:50%;
  transform:translate(-50%, -50%);
  border:solid 1px #000;
  display:none;
  background-color:#fff;
}

#overlay {
  position:fixed;
  left:0;
  top:0;
  width:100vw;
  height:100vh;
  display:none;
  background-color:#000;
  opacity:0.5;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Awesome Content!

<button onclick="openModal()">Open Modal!</button>

<div id="overlay"></div>
<div id="modal"><h1>Modal Content!</h1></div>

关键点

  • #overlay div出现在#modal div之前-这就是我如何将模式设置在顶部的。或者,您可以在CSS中使用z-index
  • opacity值在这里不是必需的,它只是用来演示覆盖与页面/模式的关系;
  • 这里的实现细节无关紧要。JavaScript不应该很重要,我的大多数CSS也不应该。这个例子的存在只是为了给你指明正确的方向。
票数 4
EN

Stack Overflow用户

发布于 2017-08-10 16:32:35

下面是一个使用CSS属性pointer-events (https://developer.mozilla.org/en/docs/Web/CSS/pointer-events)的示例。

示例:https://codepen.io/zvona/pen/YxQzEO

关键的想法是在模式打开时为body设置pointer-events: none;。但是你想要与之交互的特定元素应该有例如pointer-events: auto;

在该示例中,当对话框处于隐藏状态时,您可以同时单击这两个按钮,但在显示对话框时,只能单击切换对话框按钮。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45607982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档