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

yizhihongxing

下面是详细的攻略:

需求描述

在使用弹窗作为页面交互组件的时候,我们通常需要禁止页面在弹窗打开的过程中滑动。本文将介绍使用 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日

相关文章

  • 利用纯css实现table固定列与表头中间横向滚动的思路和实例

    下面我来详细讲解“利用纯CSS实现table固定列与表头中间横向滚动”的思路和实现步骤。 思路 要实现表头和固定列的横向滚动,需要将表格分为三部分:左侧固定列、中间表头、右侧内容。而为了保证左侧固定列的位置不会改变,需要给该列添加固定的宽度。 在滚动时,需要通过对表头和右侧内容的scroll事件进行监听,来同步滚动位置,保证左侧固定列的位置不变。 实现步骤 …

    css 2023年6月10日
    00
  • 如何去掉超链接下划线用三个简单的实例来说明

    下面是“如何去掉超链接下划线”的完整攻略: 1.使用 CSS 样式 第一种方法是使用 CSS 样式来去除超链接下划线。我们可以通过以下代码来实现: a { text-decoration: none; } 上面的代码中,我们使用了 text-decoration 属性,并将它的值设置为 none,这样就可以去掉所有超链接下划线了。如果你只想去掉特定链接的下划…

    css 2023年6月10日
    00
  • jQuery实现百度图片移入移出内容提示框上下左右移动的效果

    要实现“jQuery实现百度图片移入移出内容提示框上下左右移动的效果”的功能,我们需要使用jQuery的动画效果,包括fadeIn/fadeOut和animate两种方法。 下面是具体的实现步骤: 建立HTML骨架结构:包含图片列表和内容提示框两个部分。 <div class="img-list"> <img src=&…

    css 2023年6月10日
    00
  • CSS 实现块级元素靠右的方法

    鉴于本题需要一定的代码演示,为了更好的阅读体验,本文的样式将采用markdown代码块格式,帮助读者更好地进行复制、粘贴。 使用float实现块级元素靠右 通过将元素的浮动方向设置为”right”,可以使这个元素从右向左浮动,达到将块级元素靠右的目的。 <div style="float: right; width: 200px; heigh…

    css 2023年6月9日
    00
  • 详解CSS 伪元素及Content 属性

    以下是一份完整的“详解CSS 伪元素及Content 属性 ”的攻略: 详解CSS 伪元素及Content 属性 1. 什么是伪元素? 伪元素是CSS中的一个特殊概念,它可以让开发者选择某特定元素中的某些内容,并为其应用样式。伪元素不是真实的文档树元素,而是CSS选择器中用到的一类关键字,它们可以通过CSS选择器中的 :: 或 : 前缀进行声明。常用的伪元素…

    css 2023年6月10日
    00
  • 用css制作星级评分第2/3页

    下面我将详细讲解如何用 CSS 制作星级评分的第二/三页。 1. 准备工作 首先,我们需要准备页面所需的 HTML 和 CSS 文件。在 HTML 文件中,我们需要添加一个容器元素,用于承载星级评分,并为每个评分项添加一个用于显示星级的元素。在 CSS 文件中,我们需要定义评分项的样式,包括未选中和选中状态下的样式。 下面是 HTML 和 CSS 文件的代码…

    css 2023年6月10日
    00
  • python-web根据元素属性进行定位的方法

    当我们使用Python进行Web自动化测试时,定位元素是非常重要的一步,其中根据元素属性进行定位的方法也非常常用。下面,我将详细讲解如何使用Python根据元素属性进行定位。 步骤一:安装必要的库 在进行元素定位之前,我们需要安装selenium和webdriver库,可以使用以下命令进行安装: pip install selenium pip instal…

    css 2023年6月10日
    00
  • PHP编码规范之注释和文件结构说明

    下面我会详细讲解“PHP编码规范之注释和文件结构说明”的完整攻略。 为什么需要注释和文件结构说明 有助于其他开发者更加容易理解代码 提高代码的可读性和可维护性 促进代码重用和模块化开发 注释规范 在编写PHP代码时,注释的作用是阐明代码逻辑、功能和目的。注释要简明扼要、易于理解,同时也要保持一定的规范统一。 注释的分类 文件注释:写在文件的开头,主要说明文件…

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