vanilla javascript图像缩放滚动效果

Posted

技术标签:

【中文标题】vanilla javascript图像缩放滚动效果【英文标题】:vanilla javascript image zoom scroll effect 【发布时间】:2021-08-01 19:56:57 【问题描述】:

我正在尝试在 vanilla javascript 中重新创建这个简单的 jquery 图像缩放滚动效果,但没有成功: 我在网上看,所有教程似乎都使用自 2014 年以来不受支持的 jquery 或 skrollr 库。 这是youtube上这个效果的教程: https://www.youtube.com/watch?v=hjeS8HxH3k0

<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Image Zoom Scroll Effect</title>

        <style>
            body 
                margin: 0;
                padding: 0;
            

            div 
                width: 100%;
                height: 100vh;
                overflow: hidden;
                position: relative;
            

            div img 
                width: 100%;
                position: absolute;
                top: 0;
                left: 50%;
                transform: translate(-50%);
            

            /* BLANK SPACE, JUST TO TRY OUT THE SCROLL EFFECT */
            .whitespace 
                width: 100%;
                height: 100vh;
            
        </style>

        <!-- JQUERY CDN -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    </head>

    <body>
        <div class="img-area">
            <img
                src="https://images.pexels.com/photos/775201/pexels-photo-775201.jpeg"
            />
        </div>

        <!-- BLANK SPACE, JUST TO TRY OUT THE SCROLL EFFECT -->
        <div class="whitespace"></div>

        <script>
            // JQUERY
            $(window).scroll(() => 
                let scroll = $(window).scrollTop();
                $('.img-area img').css(
                    width: 100 + scroll / 5 + '%',
                );
            );

            // VANILLA JS
            // window.addEventListener('scroll', () => 
            //     let scroll = window.scrollTop;
            //     document.querySelector('.img-area img').style.width =
            //         100 + scroll / 5 + '%';
            // );
        </script>
    </body>
</html>

我已经注释掉了我的原版 javascript 代码。

【问题讨论】:

你的代码给你带来了什么问题,使用它而不是 jquery 版本的结果是什么?您是否在浏览器控制台中看到任何错误? 那么会发生什么?有什么错误吗?除了 jQuery 版本将循环所有匹配选择器的元素,你只定位第一个它看起来应该可以工作的元素 用户 Svela 回答了我的问题。谢谢。 【参考方案1】:

窗口对象没有属性 scrollTop。使用 document.documentElement:

window.addEventListener('scroll', () =>   
    let scrollTop = document.documentElement.scrollTop;        
    document.getElementById('test').style.width = 100 + scrollTop / 5 + '%';
);

查看工作小提琴:https://jsfiddle.net/z3hux1ra/5/

【讨论】:

非常感谢。这就是我的代码所缺少的。

以上是关于vanilla javascript图像缩放滚动效果的主要内容,如果未能解决你的问题,请参考以下文章

使用 GSAP scrollTrigger 缩放滚动图像

Vanilla JavaScript:调整字体大小以适应容器

使用 Pure Vanilla JavaScript 在视口上显示焦点 DIV 并在滚动时隐藏非焦点 DIV

图像缩放时在 UIScrollView 中停止滚动图像

Xcode:在滚动视图中缩放图像

在 iPhone 中使用缩放图像翻转滚动视图