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

能否通过JavaScript Scroll事件调整全屏div的宽高?

嘿,你猜中问题根源啦!确实是因为你的div占满了整个屏幕,页面没有可滚动的空间,所以scroll事件根本没机会触发~ 我来给你调整一下代码,解决这个问题:

解决滚动触发无效+动态调整div尺寸的方案

首先,我们得先解决滚动事件触发的核心问题:当页面内容高度刚好等于屏幕高度时,浏览器不会出现滚动条,自然监听不到滚动行为。所以第一步要给页面创造可滚动的空间。

接下来,我们需要监听window的滚动事件,通过对比上一次的滚动位置来判断是向上还是向下滚动,然后动态修改div的宽高。

完整代码示例

<html>
<head>
    <style>
        /* 给body设置最小高度,让页面有足够滚动空间 */
        body {
            margin: 0;
            min-height: 200vh;
        }
        .firstdiv {
            position: fixed; /* 固定div在视口,滚动时位置不变只改尺寸 */
            top: 0;
            left: 0;
            background: red;
            width: 100%;
            height: 100%;
            transition: all 0.1s ease; /* 加过渡动画让尺寸变化更平滑 */
        }
    </style>
</head>
<body onload="myfunc()">
    <div class="firstdiv"></div>
    <script>
        let lastScrollTop = 0;
        let targetDiv;

        function myfunc(){
            targetDiv = document.querySelector(".firstdiv");
            // 绑定window的滚动事件
            window.addEventListener("scroll", handleScroll);
        }

        function handleScroll() {
            const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;
            
            // 判断滚动方向:向上滚动(当前位置 < 上一次位置),向下反之
            if (currentScrollTop < lastScrollTop) {
                // 向上滚动:缩小div,每次减少屏幕宽高的2%(可自行调整数值)
                const newWidth = parseInt(window.getComputedStyle(targetDiv).width) - window.innerWidth * 0.02;
                const newHeight = parseInt(window.getComputedStyle(targetDiv).height) - window.innerHeight * 0.02;
                // 设置最小宽高,避免缩得太小
                targetDiv.style.width = Math.max(newWidth, window.innerWidth * 0.3) + "px";
                targetDiv.style.height = Math.max(newHeight, window.innerHeight * 0.3) + "px";
            } else {
                // 向下滚动:增大div,每次增加屏幕宽高的2%
                const newWidth = parseInt(window.getComputedStyle(targetDiv).width) + window.innerWidth * 0.02;
                const newHeight = parseInt(window.getComputedStyle(targetDiv).height) + window.innerHeight * 0.02;
                // 设置最大宽高,避免超出太多
                targetDiv.style.width = Math.min(newWidth, window.innerWidth * 1.5) + "px";
                targetDiv.style.height = Math.min(newHeight, window.innerHeight * 1.5) + "px";
            }
            
            lastScrollTop = currentScrollTop;
        }
    </script>
</body>
</html>

关键改动说明

  • 给body设置min-height: 200vh:让页面高度是屏幕的2倍,强制浏览器出现滚动条,scroll事件就能正常触发了。
  • 把div的position改成fixed:这样滚动页面时,div会固定在视口内,不会跟着页面滚动,我们只需要专注调整它的宽高即可。
  • 通过lastScrollTop判断滚动方向:对比当前滚动位置和上一次的位置,精准区分向上/向下滚动行为。
  • 添加过渡动画:让div尺寸变化更流畅,不会显得生硬突兀。
  • 设置宽高边界:避免div缩得太小或者变得过大,你可以根据需求自行调整max/min的比例数值。

直接运行上面的代码,滚动页面就能看到div的尺寸随滚动方向变化啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:27:32