jQuery实现弹窗下底部页面禁止滑动效果

下面是详细的攻略:

需求描述

在使用弹窗作为页面交互组件的时候,我们通常需要禁止页面在弹窗打开的过程中滑动。本文将介绍使用 jQuery 实现在弹窗弹出的同时禁止页面的滑动,并在弹窗关闭后恢复页面的滑动。

实现思路

实现这个效果主要分为以下两个步骤:

  1. 在弹窗弹出的时候,为 body 添加一个 overflow: hidden 样式,并记录当前的滚动位置;
  2. 在弹窗关闭的时候,将 bodyoverflow 样式和滚动位置恢复到之前的状态。

实现步骤

第一步:弹出弹窗

在弹窗弹出的时候,我们需要为 body 添加一个 overflow: hidden 样式,并记录当前的滚动位置。具体实现方式如下:

// 获取当前的滚动位置
var scrollTop = $(window).scrollTop();

// 为 body 添加样式,并记录当前滚动位置
$('body').css({
  'overflow': 'hidden',
  'position': 'fixed',
  'top': '-' + scrollTop + 'px',
  'left': '0',
  'right': '0',
  'bottom': '0'
});

第二步:关闭弹窗

在弹窗关闭的时候,我们需要将 bodyoverflow 样式和滚动位置恢复到之前的状态。具体实现方式如下:

// 恢复 body 的样式和滚动位置
$('body').css({
  'overflow': '',
  'position': '',
  'top': '',
  'left': '',
  'right': '',
  'bottom': ''
});
$(window).scrollTop(scrollTop);

示例说明

下面是两个示例,分别演示了如何在弹窗弹出的时候禁止页面滑动,并在弹窗关闭后恢复页面滑动。

示例一:通过点击按钮弹出弹窗

<button id="open-dialog">打开弹窗</button>
<div id="dialog" style="display:none;">这是一个弹窗</div>
$(function() {
  // 记录当前的滚动位置
  var scrollTop = 0;
  // 点击按钮打开弹窗
  $('#open-dialog').click(function() {
    // 获取当前的滚动位置
    scrollTop = $(window).scrollTop();
    // 为 body 添加样式,禁止滑动
    $('body').css({
      'overflow': 'hidden',
      'position': 'fixed',
      'top': '-' + scrollTop + 'px',
      'left': '0',
      'right': '0',
      'bottom': '0'
    });
    // 显示弹窗
    $('#dialog').show();
  });

  // 关闭弹窗
  $('#dialog').click(function() {
    // 隐藏弹窗
    $(this).hide();
    // 恢复 body 的样式和滚动位置
    $('body').css({
      'overflow': '',
      'position': '',
      'top': '',
      'left': '',
      'right': '',
      'bottom': ''
    });
    $(window).scrollTop(scrollTop);
  });
});

示例二:通过滚动页面触发弹窗

<div id="scroll-container">
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一段文字</p>
  <p>这是一个按钮,点击它会弹出一个弹窗</p>
  <button id="open-dialog">打开弹窗</button>
</div>
<div id="dialog" style="display:none;">这是一个弹窗</div>
$(function() {
  // 记录当前的滚动位置
  var scrollTop = 0;
  // 监听页面滚动事件
  $(window).scroll(function() {
    // 如果页面滚动到了一定位置,就弹出弹窗
    if($(this).scrollTop() > 200) {
      // 获取当前的滚动位置
      scrollTop = $(window).scrollTop();
      // 为 body 添加样式,禁止滑动
      $('body').css({
        'overflow': 'hidden',
        'position': 'fixed',
        'top': '-' + scrollTop + 'px',
        'left': '0',
        'right': '0',
        'bottom': '0'
      });
      // 显示弹窗
      $('#dialog').show();
    }
  });

  // 关闭弹窗
  $('#dialog').click(function() {
    // 隐藏弹窗
    $(this).hide();
    // 恢复 body 的样式和滚动位置
    $('body').css({
      'overflow': '',
      'position': '',
      'top': '',
      'left': '',
      'right': '',
      'bottom': ''
    });
    $(window).scrollTop(scrollTop);
  });
});

结束

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery实现弹窗下底部页面禁止滑动效果 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • html中table表格的内容水平和垂直居中显示

    要让HTML表格中的内容水平和垂直居中显示,可以通过CSS样式来实现。 水平居中: 方法一:使用text-align属性 使用text-align属性可以将表格中的内容水平居中显示。将text-align属性设置为“center”即可实现,示例代码如下: <table style="width:100%"> <tr&gt…

    css 2023年6月10日
    00
  • canvas实现飞机打怪兽射击小游戏的示例代码

    下面我会详细讲解“canvas实现飞机打怪兽射击小游戏的示例代码”的完整攻略。 简介 Canvas 是 HTML5 新增的元素,可以通过脚本(通常是 JavaScript)来绘制图形。本文将展示如何使用 Canvas 实现飞机打怪兽射击小游戏。 步骤 第一步:准备工作 首先,需要一个 canvas 元素,在 HTML 中设置宽高,并在 JavaScript …

    css 2023年6月10日
    00
  • CSS3实现列表无限滚动/轮播效果

    下面是”CSS3实现列表无限滚动/轮播效果”的完整攻略: 1. 准备工作 首先,我们需要准备一个包裹列表的容器,一个展示列表项的列表,以及一些CSS样式。具体代码如下: HTML代码: <div class="carousel"> <ul class="list"> <li>1&lt…

    css 2023年6月10日
    00
  • 详解微信小程序canvas圆角矩形的绘制的方法

    详解微信小程序canvas圆角矩形的绘制的方法 前言 canvas是HTML5新增的一个组件,它可以让我们直接在浏览器中绘制出图形、文字和图片等元素。在微信小程序中,我们也可以使用canvas来进行绘制,从而实现一些炫酷的效果。 本篇攻略将详细讲解如何在微信小程序中使用canvas绘制圆角矩形。 步骤 步骤一:创建canvas 我们需要在wxml模板文件中创…

    css 2023年6月10日
    00
  • 浅谈PHP之ThinkPHP框架使用详解

    感谢您对于“浅谈PHP之ThinkPHP框架使用详解”的关注和提问。下面是我关于这个话题的回答: ThinkPHP框架使用详解 什么是ThinkPHP ThinkPHP是一款优秀的开源PHP框架,其特点是遵循Apache2开源协议,具有免费、高效、简单、灵活等优点。其特别适合Web应用开发领域中的快速开发,包含支持单元测试、认证授权、路由等常用的功能模块。 …

    css 2023年6月9日
    00
  • CSS实现鼠标悬浮动画特效

    当我们想要在网站中添加一些动画效果,调整鼠标行为是个不错的选择。通过 CSS,我们可以实现一些很棒鼠标悬浮效果。下面,我们将详细讲解如何实现 CSS 鼠标悬浮动画特效。具体攻略如下: 步骤 1:定义最终效果的 CSS 样式 在定义鼠标悬浮动画特效时,我们需要先定义最终的效果。这个效果可以是任何你想要的,比如改变颜色、大小、位置、透明度、边框等。这里我演示以修…

    css 2023年6月10日
    00
  • 边框(border)边距(margin)和间隙(padding)属性的区别

    下面是关于边框、边距和间隙属性的完整攻略。 1. 边框(border) 边框是指围绕在HTML元素周围的线条或规定形状。它可以使用CSS属性border进行设置,其中包括属性border-width(设置边框宽度)、属性border-style(设置边框样式)和属性border-color(设置边框颜色)。边框可以用于装饰、区分或强调HTML元素。 下面是一…

    css 2023年6月9日
    00
  • CSS使用伪类控制边框长度的方法

    请看以下完整攻略: 1. 简介 CSS中,通过伪类(pseudo-class)来控制边框长度是常用的制作特效方法之一。伪类是一种可以自定义样式中某个或几个状态的方式,比如在链接未被访问时,已被访问时和鼠标悬浮在上面时样式可以不同。CSS中常用的伪类包括:hover, :active, :visited, :first-child等等。通过运用伪类,我们可以很…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部