Facebook模态弹出窗口阻止主页上的滚动

时间:2016-02-27 19:37:17

标签: javascript html css modal-dialog

请参阅下面的Facebook评论模式框。我试图达到类似的效果,用户点击按钮,然后打开一个弹出/模态框。此框将允许在新框中滚动(因为它可能是许多页面的文本),但将禁止在主页面上的模式外滚动。如何在模态允许在模态窗口内滚动而不在其他地方滚动时,如何实现类似效果?感谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

通常这可以通过执行以下操作来实现:

  • height:100%添加到bodyhtml代码。
  • 当模式显示时,将overflow: hidden添加到body

基本演示:jsFiddle

$("body").on("click", function(){
	$("body").toggleClass("modalview");
})
html, body {background:#666; color:#FFF; margin: 0; padding: 0; height:100%;}

#content {
  padding:1em;
  width:90%;
  margin:0 auto;
}

#modal {
  /* hidden by default */
  display: none;
  /* box */
  width:75%;
  height:75%;
  padding:1em;
  position: fixed; z-index:1;
  overflow: auto;
  /* center modal vertically and horizontally */
  left: 50%; top: 50%;
  transform: translate(-50%,-50%);
  /* style */
  text-align: center;
  background:#FFF;
  box-shadow:1px 1px 15px #000;
  color:#000;
}

/* prevent page scrollbars in modal view */
body.modalview { overflow:hidden; }

/* show #modal in modal view */
body.modalview #modal { display: block;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="modal">
  <p>All UR SCROLLS ARE BELONG TO US!!!</p>
  <p>Et velit odit cumque hic, aspernatur. Perferendis assumenda est necessitatibus cupiditate cum odit deleniti doloribus earum veniam dolores, neque laudantium laboriosam optio numquam autem iure animi ipsa dolor fugit blanditiis?</p>
  <p>Unde quidem sunt quos itaque minus, quia modi nisi temporibus. Consectetur natus perferendis possimus, rem, sed tempora cumque dolorum quod provident blanditiis eum ipsam voluptate dolor, harum doloremque id amet.</p>
</div>

<div id="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Animi assumenda quas, rem voluptas et, totam officia quos, quaerat doloribus eaque odio aperiam a obcaecati explicabo quod eveniet eum aliquid! Repellat.</p>
  <p>Vitae ipsum explicabo voluptatibus corrupti odio ipsa, tenetur modi veritatis excepturi architecto nam dignissimos ratione. Iusto temporibus ipsum cupiditate excepturi modi eos alias dolores eveniet possimus. Alias, esse error quam!</p>
  <p>Ea numquam quae laborum ut vitae molestias dolorum fugit, asperiores aliquid voluptates vero ab consequuntur ipsum maxime obcaecati temporibus voluptate sed quaerat, necessitatibus deleniti. Quibusdam iste saepe inventore amet eius.</p>
  <p>Aut veritatis quos quaerat, placeat nam est ad tempora delectus magnam molestiae, ipsum cupiditate debitis illum perferendis ut nisi beatae voluptas provident consectetur inventore assumenda eveniet? Molestiae architecto ullam nulla.</p>
  <p>Explicabo, debitis? Mollitia reiciendis sint minus adipisci, consectetur consequatur assumenda blanditiis pariatur ex facilis expedita et earum molestiae quos, laborum sed suscipit doloribus placeat ipsam in vero quaerat aliquid iure!</p>
  <p>Earum dolorem eveniet laboriosam vel dolor! Ullam nisi adipisci voluptatem, voluptatum tenetur, itaque ducimus laboriosam repudiandae quibusdam numquam dignissimos aperiam praesentium culpa porro sapiente ab eos magni? Maiores, doloremque, aspernatur.</p>
</div>

在我的方法中,我使用body类来切换overflow状态。当body获得类(.modalview)时,它会隐藏折叠下方的内容,并在显示实际模式时从页面中删除滚动条。

jQuery用于将类应用于body并通过#modal点击功能显示on

为了演示,我只是在你点击页面时显示#modal,你可以将功能绑定到按钮点击,如下所示:

$("#myButton").on("click", function(){
    $("body").toggleClass("modalview");
})

要正确查看,请加载 jsFiddle demo 并使用页面宽度查看滚动的更改方式。