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日

相关文章

  • vue项目引入百度地图BMapGL鼠标绘制和BMap辅助工具

    下面将详细说明如何在Vue项目中引入百度地图BMapGL鼠标绘制和BMap辅助工具。 步骤一:安装依赖 首先,需要在项目中安装百度地图JavaScript API,具体代码如下所示: npm install bmapgl –save 步骤二:引入百度地图相关的JS和CSS文件 在Vue项目中,可以在index.html文件中引入: <!DOCTYPE…

    css 2023年6月10日
    00
  • js轮盘抽奖实例分析

    下面是详细讲解“js轮盘抽奖实例分析”的完整攻略。 一、概述 js轮盘抽奖实例是一种常见的网页游戏。在这个游戏中,用户可以通过选择一个幸运号码或者抽奖机会来参加抽奖活动,抽中某个奖品后,系统会将奖品信息展示给用户。本文将介绍js轮盘抽奖实例的制作方法。 二、实现方法 1. 开发环境搭建 开发环境搭建需要安装node,npm和http-server,具体步骤如…

    css 2023年6月10日
    00
  • div+css详解定位与定位应用

    什么是定位? 定位是CSS的一个重要概念,指的是元素在页面中的准确位置。网页制作离不开定位,可以通过定位实现各种效果,如盒子居中、导航菜单等。CSS有三种定位方式: 静态定位(position: static):元素默认值就是静态定位,元素会根据文档流从上到下自动排列。 相对定位(position: relative):相对定位指元素相对于自己原来的位置进行…

    css 2023年6月11日
    00
  • HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例

    欢迎来到本站作者的教程,关于HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例,我们将详细讲解如下: HTML5 Canvas基本介绍 HTML5 Canvas是HTML5新增的一个绘图标签,通过使用Canvas标签和Canvas API,可以在页面中绘制各种形状、图形和动画效果。 图片缩放示例 要实现图片缩放效果,我们需要使用Canvas AP…

    css 2023年6月9日
    00
  • 详解css常用选择器

    下面是详解 CSS 常用选择器的完整攻略: 一、CSS 选择器简介 在 CSS 中,选择器用来指定我们要样式化的 HTML 元素。CSS 选择器有很多种,它们各自拥有不同的特点和用法。在本文中,我们将详解 CSS 中常用的选择器类型。 二、CSS 基本选择器 1. 元素选择器 元素选择器是指通过元素名称来选择它所作用的 HTML 元素。例如: p { col…

    css 2023年6月9日
    00
  • CSS旋转与翻转使用示例详解

    CSS旋转与翻转使用示例详解 前言 在网站美化中,CSS旋转与翻转是非常实用的技能之一。本文将介绍如何使用CSS旋转和翻转来为你的网站添加一些视觉上的变化。 CSS旋转 CSS旋转可以帮助你在不使用图像的情况下,改变元素的方向和角度。 使用transform属性 使用transform属性,可以控制元素的旋转方向和角度。该属性可控制多种变形效果,包括旋转、缩…

    css 2023年6月11日
    00
  • css中visiblity和display异同详解

    下面是关于 “css中visiblity和display异同详解” 的攻略: 1. visibility 和 display 的基本区别 1.1 visibility的作用 visibility 是一种控制网页元素显示和隐藏的属性。使用 visibility 属性可以控制元素是否显示在页面中。当 visibility 属性设置为 hidden 时,该元素在页…

    css 2023年6月10日
    00
  • bootstrap读书笔记之CSS组件(上)

    Bootstrap读书笔记之CSS组件(上) 什么是CSS组件 一套基于语义化的、可重用的、跨浏览器的HTML/CSS常规设计 不需要增加Javascript即可进行交互 用于语意化地描述UI元素的外观和行为 CSS组件的主要类 基础文本元素 h1~h6 p mark small del s ins u strong em 链接 a abbr address…

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