jquery - 将 jQuery 对话框中心定位在移动设备问题上

标签 jquery position jquery-ui-dialog

我在网站上使用带有 position:fixed 的 jQuery 对话框。在 PC 上,该对话框默认位于中心位置。 在移动设备上,它将位置设置为左上角。我尝试了不同的方法,但未能在移动设备上定位此对话框中心。

代码:

CSS:

.ui-dialog {
    position: fixed;
    top: 0;
    left: 0;
    padding: .2em;
    outline: 0;
}

JS:

function isMobileDevice() {
    var mobileRegEx = new RegExp("Android|webOS|iPhone|iPad|iPod|BlackBerry", "i");
    return mobileRegEx.test(navigator.userAgent);
}

$("#myDialog").dialog({
  title: "Info",
  closeText: "Close",
  width: 440,
  minWidth: 440,
  height: 250,
  minHeight: 250,
  modal: true,
  resizable: false,
  open: function() {
    if (isMobileDevice()) {
        $(this).dialog("option", "position", { my: "center", at: "center", of: window });
    }
  }
});

有什么想法如何将其设置到移动设备的中心吗?感谢您的帮助。

最佳答案

所以,我自己修复了它。我的解决方案适用于两种屏幕方向:纵向和横向。

  1. 我将对话中心设置为 document而不是window :$(this).dialog("option", "position", { my: "center", at: "center", of: document, within: document });这会将对话框设置为纵向模式下文档的中心,并设置横向模式下的起点。
  2. 我运行mobileDlgPosition()函数,检查横向模式。如果设备处于横向模式,则会计算并设置对话框 top使用此方法定位:(window.outerWidth - $(".ui-dialog").width()) / 2;
  3. 最后,我添加了 $(window).on("orientationchange")检查对话框实例的函数,如果对话框实例可用,则运行 mobileDlgPosition()功能。

我的代码:

function isMobileDevice() {
    var mobileRegEx = new RegExp("Android|webOS|iPhone|iPad|iPod|BlackBerry", "i");
    return mobileRegEx.test(navigator.userAgent);
}

$(window).on("orientationchange", function() {
  var dlgInstance = $("#" + $(".ui-dialog").attr("aria-describedby")).dialog("instance");
    
  if (dlgInstance) {
      mobileDlgPosition();
  }
});

function mobileDlgPosition() {
    if (window.screen.orientation.type != "portrait-primary") {
        var landscapeTopPos = (window.outerWidth - $(".ui-dialog").width()) / 2;
        $(".ui-dialog").css("top", landscapeTopPos + "px");
    }
}

$("#myDialog").dialog({
  title: "Info",
  closeText: "Close",
  width: 440,
  minWidth: 440,
  height: 250,
  minHeight: 250,
  modal: true,
  resizable: false,
  open: function() {
    if (isMobileDevice()) {
        $(this).dialog("option", "position", { my: "center", at: "center", of: document, within: document });
        mobileDlgPosition();
    }
  }
});

我在我的手机小米9上进行了测试。一切正常。

结果:

jQuery dlg issue fixed

关于jquery - 将 jQuery 对话框中心定位在移动设备问题上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73154018/

相关文章:

javascript - jQuery 对话框未显示

javascript - JQuery:组合点击/触发元素以更高效地编写代码?

html - 在由 div 制成的类似表格的结构中,将列粘贴到左侧和顶部

Jquery AJAX不刷新ie中的页面

html - CSS3 Hover Effect 重新定位问题

jquery - 两个滚动条的问题?

jQuery UI 对话框随机 CSS 属性

jquery - 访问 jQuery UI 对话框内 iframe 中的元素

javascript - 默认情况下导航栏下拉项无法隐藏

javascript - Jquery - 计算 JSON 对象