Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当窗口有滚动条时,jquery对话框覆盖滚动条_Javascript_Jquery_Css_Jquery Ui_Jquery Ui Dialog - Fatal编程技术网

Javascript 当窗口有滚动条时,jquery对话框覆盖滚动条

Javascript 当窗口有滚动条时,jquery对话框覆盖滚动条,javascript,jquery,css,jquery-ui,jquery-ui-dialog,Javascript,Jquery,Css,Jquery Ui,Jquery Ui Dialog,我正在使用jquery对话框显示一个对话框。我可以把它放在左下角,这是我想要的地方。问题是,如果主窗口有一个滚动条,对话框将转到滚动条的左下角,从而覆盖滚动条。人们会认为窗口的左下表示滚动条的右下,而不是滚动条的左下 我尝试过为jquery对话框指定选项,但没有成功。我已经在position对象中尝试了碰撞选项的所有四个值fit、flip、flipfit和none。但他们似乎都没有做到这一点 我知道有一种计算滚动条宽度和移动对话框的方法,我已经在很多地方使用过这种方法。但我希望有一个API的方式

我正在使用jquery对话框显示一个对话框。我可以把它放在左下角,这是我想要的地方。问题是,如果主窗口有一个滚动条,对话框将转到滚动条的左下角,从而覆盖滚动条。人们会认为窗口的
左下
表示滚动条的
右下
,而不是滚动条的
左下

我尝试过为jquery对话框指定选项,但没有成功。我已经在position对象中尝试了碰撞选项的所有四个值
fit、flip、flipfit和none
。但他们似乎都没有做到这一点

我知道有一种计算滚动条宽度和移动对话框的方法,我已经在很多地方使用过这种方法。但我希望有一个API的方式来做这件事

有人知道路吗

实际行为

预期行为


我猜你在Mac电脑上有那些讨厌的自动隐藏滚动条?您可以尝试使用CSS在主体上始终显示滚动条:

body { overflow-y: scroll }

实际上没有一种方法来定义div中减去滚动条的区域,因为滚动条在div中。滚动条不作为容器存在。至少在使用css并设置
溢出:滚动时是这样的。使用一些用于滚动条的jQuery插件是可能的

我所能做的就是用一个标准的
20px
大空间来偏移该位置。这是我用过的

    $( "#dialog" ).dialog({
        position: { 
            my: 'right bottom',
            at: 'right-20px bottom',
            of: $("#some_div")
        }
    });

以下示例对我有用(,):

请注意,代码被包装在construct中,这意味着该对话框是在加载DOM并且浏览器已经计算出是否需要滚动条之后创建的。可能您调用该对话框太早了。

在css中尝试此操作

#dialog{
   position: fixed;
   bottom:0;
   left:0;
}

此技巧可以帮助您获得任何浏览器的滚动条宽度,您可以将其用作一个函数:

如果您担心在滚动条未显示时留下空白,可以使用css强制执行:

body {
  overflow-y: scroll;
}

没有真正的方法可以做到这一点,所有浏览器都不擅长在左侧显示滚动条。理想的方法是不要使用左边的滚动条。大多数著名的希伯来语和阿拉伯语报纸网站似乎都使用右滚动条。因此,事实上的标准是使用右边的滚动条,而不考虑语言

这不是左滚动条引入的唯一问题

  • Safari甚至不会在左侧显示滚动条,即使您标记html
    RTL
  • Firefox在左侧显示滚动条。但它破坏了绝对左上角的计算

    • 假设您在html中有一个标记为
      RTL
      的图像。您希望在图像上覆盖一个div。因此,您需要获得图像的左侧、顶部、宽度和高度。您的滚动条位于左侧,因为它是一种
      RTL
      语言。当您询问图像的尺寸时,firefox将返回正确的尺寸。现在,如果您将这些维度应用于要覆盖在图像上的div,则Firefox将将左侧滚动条的右上方视为原点。请注意,该图像是以左滚动条的左上角作为原点渲染的,因此覆盖将按滚动条宽度关闭
  • Chrome似乎是唯一能很好地实现这一点的浏览器。但由于其他浏览器没有很好地实现这一点,我们最终还是会做一些特定于浏览器的事情

  • IE9和IE8的行为与Firefox完全相同

不管怎么说,我的回答更像是在咆哮,所以其他人可能会觉得这很有帮助

不,我在窗户上。滚动条总是在页面加载时显示。然后我点击一个按钮打开对话框。这个对话框显示在滚动条上方,隐藏着滚动条。你有截图吗?对不起,我不知道。可能是浏览器错误,因为从右向左读取?你试过反面吗?如果滚动条实际上是浏览器窗口中的“硬编码”滚动条,而不是正文中的任何HTML元素,我会说不可能在滚动条上放置任何HTML元素。在这种情况下,我可能也会想方设法摆脱困境哦!即使对于LTR,这也是同样的行为。所有浏览器都在做同样的事情。是的,这不是一个自定义滚动条,body元素有一个
溢出:auto正在创建该滚动条。这不是我注意到这个问题的唯一地点。无论出于什么原因,浏览器都不在左侧和顶部计算中包含滚动条。我想当他们吸吮时,他们都吸吮得同样好。无论如何,谢谢你的尝试。想想如果他们不。。。在溢出上放置一些东西:你能给我们看一些HTML吗?我对此有一个理论。JSFIDDLE将是伟大的。没有真正的方法可以做到这一点,所有浏览器都不擅长在左侧显示滚动条。因为你的答案是最接近的,所以你得到了分数。
body {
  overflow-y: scroll;
}