javascript - jQuery 窗口宽度不等于 CSS 的窗口宽度

标签 javascript jquery html css

我正在使用以下两段 CSS 和 JS 代码:

@media (max-width: 720px) {
    // a code to make arrows in a carousel disappear
}

if(jQuery(window).width() <= 720){
    // a code to make arrows in the carousel stop working
}

它们的问题在于后者恰好在 width=738px 而不是 720px 上执行。我怀疑这是因为浏览器的垂直滚动条在 Chrome 中的宽度等于 18px。

有没有办法统一这个?无论滚动条的宽度如何,我都希望这些操作在所有浏览器中同时发生。

测试(当浏览器为@720px且CSS已经执行时):

jQuery(document).innerWidth() = 703
jQuery(window).innerWidth() = 703
jQuery(document).width() = 703
jQuery(window).width() = 703
jQuery('body').width() = 703
jQuery('html').width() = 703

最佳答案

我刚才不得不解决同样的问题,到目前为止我找到的最正确的解决方案是使用媒体查询将实际窗口大小传递给 Javascript。您必须遵循以下步骤:

  • 将隐藏元素添加到您的页面,
  • 使用媒体查询更改该元素的 max-width 属性,
  • 通过 Javascript 读回该元素的 max-width 属性。

例如,将以下元素添加到您的页面:

<div id="currentMedia"></div>

然后编写如下CSS规则:

#currentMedia {
    display: none;
}

@media (max-width: 720px) {
    /* Make arrows in the carousel disappear... */

    #currentMedia {
        max-width: 720px;
    }
}

然后,从 Javascript 端,您可以编写:

if (parseInt(jQuery("#currentMedia").css("max-width"), 10) <= 720) {
    // Make arrows in the carousel stop working...
}

无论滚动条大小如何,它都是准确的,因为该值来自触发轮播消失的同一媒体查询。

我在所有最新的主流浏览器上测试了这个解决方案,它给出了正确的结果。

关于javascript - jQuery 窗口宽度不等于 CSS 的窗口宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527196/

相关文章:

javascript - 获取对象引用和函数名称

javascript - 如何在 Angular2 rc5 中获取路由参数?

html - 定义要缩放的 div 的高度

javascript - Bootstrap 下拉菜单嵌套在表单 : tabindex breaks on enter 中

javascript - 为什么/什么时候 $.inArray 返回 -1?

javascript - 反 JSON 字符串

javascript - 以一种颜色显示的 LinearGradient

jquery - 防止循环 jQuery

html - 如何在 GWT 中创建多行列表框?

javascript - 如何创建一个动态导航栏,当您到达某个位置时会跟随您