如何在模态框打开时禁用滚动 - Full Page JS
P粉090087228
P粉090087228 2023-08-18 00:15:20
[HTML讨论组]
<p>我想要做的是,当模态框打开时,禁用整个页面的JavaScript滚动。问题是,当我打开模态框并尝试滚动时,它确实移动了模态框后面的内容,即实际的网页,我想禁用它。当模态框打开时,背景应该被冻结。</p> <pre class="brush:php;toolbar:false;">&lt;div id="fullpage"&gt; &lt;div class="section"&gt; &lt;?php include './home-page/home-page-manufacturing-list.php';?&gt; &lt;button id="turnOff" onclick="document.getElementById('id01').style.display='block'" class="w3-button w3-black"&gt;打开模态框&lt;/button&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="id01" class="w3-modal"&gt; &lt;div class="w3-modal-content"&gt; &lt;div class="w3-container"&gt; &lt;span onclick="closeModal('modal01')" class="w3-button w3-display-topright"&gt;&amp;times;&lt;/span&gt; &lt;div class="container background-filter"&gt; &lt;div class="row"&gt; &lt;div class="col-12"&gt; &lt;h3 class="section-title"&gt;&lt;/h3&gt; &lt;/div&gt; &lt;div class="col-12"&gt; &lt;h5&gt;在我们的公司,我们对木工有着激情,这在我们所有的制造和室内设计项目中都能体现出来。我们擅长制作定制木制家具、装置和装饰品,它们不仅功能强大,而且美观&lt;/h5&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;script&gt; $(document).ready(function() { var isModalOpen = false; // 当模态框打开时禁用FullPage.js滚动 function disableFullPageScroll() { $.fn.fullpage.setAllowScrolling(false); $.fn.fullpage.setKeyboardScrolling(false); } // 当模态框关闭时启用FullPage.js滚动 function enableFullPageScroll() { $.fn.fullpage.setAllowScrolling(true); $.fn.fullpage.setKeyboardScrolling(true); } // 打开模态框 function openModal(modalId) { document.getElementById(modalId).style.display = 'block'; isModalOpen = true; disableFullPageScroll(); } // 关闭模态框 function closeModal(modalId) { document.getElementById(modalId).style.display = 'none'; isModalOpen = false; enableFullPageScroll(); } // 处理按钮点击事件以打开和关闭模态框 $('#openModalButton').on('click', function() { openModal('id01'); // 将 'id01' 替换为您的模态框的ID }); $('#closeModalButton').on('click', function() { closeModal('id01'); // 将 'id01' 替换为您的模态框的ID }); // 处理滚动事件 $(window).on('scroll', function(event) { if (isModalOpen) { event.preventDefault(); event.stopPropagation(); } }); }); &lt;/script&gt;</pre>
P粉090087228
P粉090087228

全部回复(1)
P粉805535434

您提供的代码在打开模态框时禁用滚动似乎是正确的。然而,有几个可能导致问题的原因:

  1. 打开模态框的按钮没有使用您在脚本中定义的openModal函数。相反,它直接操作模态框的样式。这意味着isModalOpen变量没有被设置为truedisableFullPageScroll函数也没有被调用。要解决这个问题,您应该在按钮被点击时使用openModal函数:
<button id="openModalButton" class="w3-button w3-black">打开模态框</button>
  1. 关闭模态框的标签也没有使用closeModal函数。应该像这样:
<span id="closeModalButton" class="w3-button w3-display-topright">&times;</span>
  1. closeModal函数没有在全局作用域中定义,但它被从HTML中调用。这可能会导致错误。要解决这个问题,您应该在全局作用域中定义closeModal函数:
window.closeModal = closeModal;
  1. disableFullPageScrollenableFullPageScroll函数使用FullPage.js的方法来禁用和启用滚动。如果您没有使用FullPage.js,或者它没有正确初始化,这些方法将不起作用。您应该检查FullPage.js是否正确包含和初始化在您的项目中。

  2. 滚动事件处理程序中的preventDefaultstopPropagation方法可能不足以阻止所有情况下的滚动。在模态框打开时,您可能还需要将

    overflow样式设置为hidden,并在模态框关闭时将其重置为auto
function disableFullPageScroll() {
    $.fn.fullpage.setAllowScrolling(false);
    $.fn.fullpage.setKeyboardScrolling(false);
    document.body.style.overflow = 'hidden';
}

function enableFullPageScroll() {
    $.fn.fullpage.setAllowScrolling(true);
    $.fn.fullpage.setKeyboardScrolling(true);
    document.body.style.overflow = 'auto';
}

请尝试这些建议,并告诉我是否解决了您的问题。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号