如何使用 jQuery 阻止模态框打开时页面滚动?


模态框是一种特殊的用户界面,我们将其显示在网页所有内容的顶部。它用于在网页上显示一些特殊信息,或将用户从网页的常规流程中转移出去。

例如,您可能在许多网站上看到过,订阅弹出框出现在网页上,提示您输入您的电子邮件地址以订阅时事通讯。同样,警报框也是模态框,在您关闭模态框之前不允许您与网页内容交互。

因此,当我们使用模态框向用户显示重要信息时,始终建议阻止主体滚动,以防止用户与网页内容交互,并将注意力集中在模态框的重要信息上。

在本教程中,我们将学习使用 Jquery 阻止模态框打开时主体滚动的不同方法。

使用 CSS 的“overflow”属性禁用主体滚动

我们可以使用 overflow 属性来避免 HTML 元素上的滚动。每当我们将 overflow 属性的值设置为“hidden”时,它就会停止滚动。

在这种方法中,每当用户打开模态框时,我们将 overflow 设置为 hidden;每当用户关闭模态框时,我们将 overflow 设置为 auto 以允许用户滚动。

语法

用户可以按照以下语法来阻止模态框打开时主体滚动,使用 overflow 属性。

// add overflow-hidden when users open the modal
$('body').css("overflow", "hidden");
// add overflow-auto when users close the modal
$('body').css("overflow", "auto");

在上面的语法中,我们使用 Jquery 的 CSS() 方法在用户打开和关闭模态框时设置网页主体上“overflow”属性的特定值。

示例 1

在下面的示例中,我们创建了包含“modal”类名的 div 元素。此外,我们添加了内容以在 div 元素内显示模态框。接下来,我们在模态框内添加了“关闭模态框”按钮以关闭模态框,并在网页上添加了“打开模态框”按钮以打开模态框。

在 CSS 中,我们以这样的方式设置模态框及其内容的样式,使其显示在网页其他内容的顶部。此外,我们还设置了按钮的样式。“modal-open”类在 CSS 中包含“overflow: hidden”CSS 属性。

我们在打开按钮中添加了“modal-open”类,在关闭按钮中添加了“modal-close”类。在 JavaScript 中,每当用户单击“打开模态框”按钮时,我们在主体中添加“modal-open”类并打开模态框。每当用户单击“关闭模态框”按钮时,我们使用 removeClass() 方法从主体中删除“modal-open”类并关闭模态框。

在输出中,用户可以观察到,当模态框打开时,他们无法滚动主体。

<html>
   <head>
      <script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js"> </script>
      <style>
         .modal {
             position: fixed;
             display: none;
             top: 20%;
             left: 50%;
             transform: translate(-50%, -50%);
             background-color: white;
             padding: 15px;
             border-radius: 12px;
             box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
             }
        .modal-open { overflow: hidden; }
        .btn {
            display: inline-block;
            padding: 10px 20px;
            background-color: green;
            color: white;
            text-decoration: none;
            border-radius: 10px;
            }
        .scroll { height: 1000px; background-color: red;} 
     </style>
   </head>
   <body>
      <h3> Using the <i> overflow CSS property </i> to disable the body from scrolling when a modal is opened </h3>
      <p> Click the button below to open the modal. </p>
      <a href = "#" class = "btn modal-open"> Open Modal </a> <br><br>
      <div class = "scroll"> </div>
      <div class = "modal">
         <h2> Modal Content </h2>
         <p> This is the content of the modal window. </p>
         <a href = "#" class = "btn modal-close"> Close </a>
      </div>
      <script>
         $(document).ready(function () {
         $('.modal-open').on('click', function () {
         $('body').addClass('modal-open');
         $('.modal').fadeIn();
         });
         $('.modal-close').on('click', function () {
         $('body').removeClass('modal-open');
         $('.modal').fadeOut();
         });
         });
     </script>
</html>

示例 2(使用 css() 方法设置 overflow 属性)

在此示例中,我们使用 Jquery 的 CSS() 方法设置网页主体的“overflow”属性。我们在此示例中创建了模态框,与第一个示例相同。

在 Jquery 中,当用户单击打开模态框按钮时,我们使用 CSS() 方法设置“overflow: hidden”,当用户单击关闭模态框按钮时,我们设置“overflow: auto”。

我们需要将 CSS 属性作为第一个参数传递,并将它的值作为 CSS() 方法的第二个参数传递。

<html>
   <head>
      <script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js"> </script>
      <style>
         .modal {
             position: fixed;
             display: none;
             top: 20%;
             left: 50%;
             padding: 15px;
             border-radius: 12px;
             transform: translate(-50%, -50%);
             background-color: white;
             }
        .btn {
            display: inline-block;
            padding: 10px 20px;
            background-color: green;
            color: white;
            text-decoration: none;
            border-radius: 10px;
            }
        .scroll {height: 130%; background-color: green; }
      </style>
   </head>
   <body>
      <h3> Using the <i> JQuery's scroll-lock plugin </i> to disable the body from scrolling when a modal is opened </h3>
      <p> Click the button below to open the modal. </p>
      <a href = "#" class = "btn modal-open"> Open Modal </a> <br> <br>
      <div class = "scroll"> </div>
      <div class = "modal">
         <h2> Modal Content</h2>
         <p> This is the content of the modal window. </p>
         <a href = "#" class = "btn modal-close"> Close </a>
      </div>
      <script>
          $(document).ready(function() {
          $('.modal-open').on('click', function() {
          $('body').css("overflow", "hidden");
          $('.modal').fadeIn();
          });
          $('.modal-close').on('click', function() {
          $('body').css("overflow", "auto");
          $('.modal').fadeOut();
          });
          });
      </script>
</html>

结论

我们学习了如何在用户在网页上打开模态框时阻止主体滚动。在这里,我们以不同的方式使用了“overflow”属性来实现我们的目标。在第一个示例中,我们通过向主体添加包含 overflow 属性的特定类来设置“overflow”属性。在第二个示例中,我们使用 css() 方法设置了 overflow 属性。

但是,用户也可以使用 Jquery 的 scroll-lock 插件来锁定屏幕,但这可能不允许用户与模态框交互。

更新于:2023年5月17日

24K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告