You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中用VH单位替换脚本里的100和101数值?

解决将滚动触发值从像素替换为VH单位的问题

这个问题的核心在于:scrollTop()返回的是像素数值,而vh是相对视口高度的CSS单位,浏览器不会自动把vh转换成JavaScript能识别的像素值,所以你需要手动计算对应vh的像素数。

具体解决方案

首先,我们需要把vh单位转换成像素:1vh等于视口高度的1%,所以可以通过$(window).height() / 100得到1vh对应的像素值,再乘以你想要的vh数值(比如10vh就是$(window).height() * 0.1)。

另外,别忘了监听窗口resize事件——当视口高度变化时,vh对应的像素值也会改变,这样能保证触发逻辑始终准确。

修改后的代码如下:

$(document).ready(function() {
  // 封装一个函数,把vh值转换成像素
  function vhToPixels(vh) {
    return $(window).height() * (vh / 100);
  }

  // 同时监听scroll和resize事件
  $(window).on('scroll resize', function () {
    const currentScroll = $(window).scrollTop();
    // 这里设置你想要的VH触发值,比如10vh
    const triggerVh = 10;
    const triggerPixel = vhToPixels(triggerVh);

    console.log(currentScroll);
    
    // 保持原逻辑:超过触发值添加类,小于触发值+1移除类
    if (currentScroll > triggerPixel) {
      $('#nav_bar').addClass('navbar-fixed');
    }
    if (currentScroll < triggerPixel + 1) {
      $('#nav_bar').removeClass('navbar-fixed');
    }

    // 如果你想简化逻辑,可以用toggleClass一行搞定(效果和原逻辑一致)
    // $('#nav_bar').toggleClass('navbar-fixed', currentScroll > triggerPixel);
  });
});

为什么直接写10vh不行?

因为JavaScript中的数值比较要求两边都是数字类型,10vh是字符串,浏览器不会自动解析这个CSS单位为像素数值,所以必须通过视口高度手动计算转换。

内容的提问来源于stack exchange,提问作者Santiago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:23:49