【问题标题】:Facebook Modal Popup that Prevents Scroll on Main Page防止在主页上滚动的 Facebook 模态弹出窗口
【发布时间】:2016-02-27 19:37:16
【问题描述】:

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

【问题讨论】:

  • 那么实际的问题是什么?通常通过将overflow:hidden; height:100% 添加到body 来防止滚动。 “任何地方都不允许滚动。对此有什么想法吗?”如果没有 cmets,您希望用户能够滚动吗?
  • 更新更清晰。
  • 你会接受 jQuery 解决方案吗?
  • 是的,没关系。只要效果好就行。

标签: javascript html css modal-dialog


【解决方案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>

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

jQuery 用于将类应用到body 并通过on 点击函数显示#modal

为了演示,我让#modal在你点击页面时出现,你可以将函数绑定到按钮点击,像这样:

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

要正确查看此内容,请加载 jsFiddle demo 并调整页面宽度以查看滚动的变化情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多