【问题标题】:jQuery Mobile Popup keeps repositioning itself on scrolljQuery Mobile Popup 在滚动时不断重新定位
【发布时间】:2021-12-01 01:34:38
【问题描述】:

我想在 jQuery 移动网站上显示一个对话框,这样:

  • 页面加载时显示
  • 它显示了它后面的页面
  • 应该可以通过在其外部单击来将其关闭

我决定使用jQuery mobile popup如下:

  • 页面内创建<div data-role="popup">
  • 以编程方式在 页面的pageshow 事件中打开弹出窗口

它做得很好。 但是,在移动设备上,当用户滚动页面时弹出窗口会四处移动。滚动时,弹出窗口会消失几分之一秒,然后重新出现在不同的位置,可能试图留在视口内。这种行为是不可取的。

我使用的代码是这样的:

https://gist.github.com/salmanarshad2000/4b84e00f061508780e82e5a7b61d617b

在移动浏览器中查看要点:

https://gitcdn.link/repo/salmanarshad2000/4b84e00f061508780e82e5a7b61d617b/raw/demo.html

预期行为:

  • 弹出窗口在页面顶部打开,在顶部、左侧和右侧保持一些间隙
  • 当用户滚动页面时,弹出窗口随之滚动
  • 当用户停止滚动时,弹出窗口保持在原来的位置

【问题讨论】:

  • 一个旧的答案可能会有所启发stackoverflow.com/questions/21732089/…将pageinit替换为pagecreate。
  • 查看您的代码,页面显示应该在加载 jqm.js 之后进行。
  • @omar 在实际生产代码中它放在jqm.js之后

标签: jquery jquery-mobile jquery-mobile-popup


【解决方案1】:

首先,弹出窗口会在调整大小和方向更改时重新定位,所以我相信在您的问题中提到的滚动期间发生了一些事情,可能是由于移动设备的功能。

如果你不需要这些东西,你可以完全关闭弹出行为:

$(document).on("mobileinit", function () {
    $.widget("mobile.popup", $.mobile.popup, {
        _handleWindowResize: $.noop
    });
});

请注意,这是一个快速而肮脏的解决方案。 JQM 团队做得很好,花了很多时间测试许多不同的移动设备,所以我的解决方案不会涵盖所有情况 - 也许它只适合您的要求。


请注意:窗口中间的重新定位是一个众所周知的错误。要对此进行调整,您可能需要设置data-position-to 属性(或positionTo 选项)并修补_resizeTimeout 函数:

//this.reposition( { positionTo: "window" } );    
this.reposition( { positionTo: this.options.positionTo } );

【讨论】:

  • 我尝试了data-position-to,但没有成功,可能是我做错了,也可能是坏了。我应该再试一次......就像可能定位到 body 元素并以某种方式将其与顶部中心而不是中间对齐(文档说 jQM 会将它定位在参考元素的中间,这是荒谬的)。基本上我希望弹出窗口随着页面滚动而不是停留在视口中间。
  • @SalmanA:你解决了吗?
  • 不,我已经放弃了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多