4

我正在使用 jquery 移动弹出窗口。这是页面内部。有一张图片可以打开这个弹出窗口。现在如何防止整个页面仅在弹出窗口打开时滚动并在弹出窗口关闭时允许滚动?

    <a href="#settingsPopUp" data-rel="popup" data-position-to="window" data-inline="true" data-icon="gear"><img src="settings1.jpg" alt="Settings"></a>

    <br>
    <div data-role="popup" id="settingsPopUp" data-theme="a" class="ui-corner-all">
        <div style="padding:10px 20px;">
            <h3>Location Details</h3>               
        </div>          
    </div>
4

6 回答 6

7

我混合了 Lefois的解决方案和Simona Adriani的解决方案。它适用于浏览器和手机 WebView (PhoneGap + jquerymobile)。

$(document).on('popupafteropen', '[data-role="popup"]', function(event, ui) {
    $('body').css('overflow', 'hidden').on('touchmove', function(e) {
         e.preventDefault();
    });
}).on('popupafterclose', '[data-role="popup"]', function(event, ui) {
    $('body').css('overflow', 'auto').off('touchmove');
});
于 2014-10-02T14:49:28.033 回答
4

对我来说,这种方法不起作用,它适用于浏览器,但不适用于 Phone Gap 应用程序。所以我以这种方式解决它:

$('#Popup-id').on({
   popupbeforeposition: function(){
      $('body').on('touchmove', false);
   },
   popupafterclose: function(){
      $('body').off('touchmove'); 
  }
});

希望能帮助到你!

于 2013-11-04T12:23:11.297 回答
2

当模式框打开时,分配overflow-y: hidden;给您不想滚动的元素怎么样?(通常会是<body>

于 2013-03-11T11:39:44.603 回答
1

我无法评论以前的答案,但有一点错误。以下代码对我有用:

$( "#mypopup" ).popup({
  afteropen: function( e) {
   $('body').css('overflow','hidden');
  },
  afterclose: function(e) {
   $('body').css('overflow','auto');
  }
});
于 2013-09-17T18:04:54.203 回答
0

有两种方法:

  1. Either "overflow:hidden" the body
  2. Or give a "position:fixed" to the popup so this will scroll in the viewport.
于 2013-03-11T11:43:22.163 回答
0

您可以为弹出小部件使用事件

$( "#settingsPopUp" ).popup({
  afteropen: function( event, ui ) {
   $('body').css({
       overflow:'hidden'
   });
  },
  afterclose: function( event, ui ) {
   $('body').css({
       overflow:'auto'
   });
  }
});

我认为这是一个动态的解决方案,它将解决您的问题。

于 2013-03-11T12:08:15.877 回答