仿QQ首页视差滚动效果

偶然看到了QQ官网的设计,感觉这种视差滚动很有趣,就仿了一个。
主要是为图片背景设置background-attachment: fixed;使其定在页面上,然后通过JS控制background-position-y来产生轻微位移,就可以达到QQ官网那种效果了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>I'm QQ</title>

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

        #header {
            height: 50px;
            background-color: dodgerblue;
        }

        #pics {
            height: 500px;
            background-color: cadetblue;
        }

        .sections {
            background-color: #fff;
            height: 300px;
            text-align: center;
            font-size: 30px;
            padding: 50px;
        }

        .section-bgs {
            height: 600px;
            background-repeat: no-repeat;
            background-position-x: 50%;
            background-attachment: fixed;
        }

        #section-1-bg {
            background-image: url(https://sqimg.qq.com/qq_product_operations/im/2015/bg1_1600.jpg);
        }

        #section-2-bg {
            background-image: url(https://sqimg.qq.com/qq_product_operations/im/2015/update/avds.jpg);
        }

        #section-3-bg {
            background-image: url(https://sqimg.qq.com/qq_product_operations/im/2015/bg3_1600.jpg);
        }
    </style>
</head>
<body>
    <div id="header"></div>
    <div id="pics"></div>
    <div id="pages">
        <div id="section-1" class="sections">
            每一天,乐在沟通
        </div>
        <div id="section-1-bg" class="section-bgs"></div>
        <div id="section-2" class="sections">
            沟通,是随时随地爽快收发
        </div>
        <div id="section-2-bg" class="section-bgs"></div>
        <div id="section-3" class="sections">
            沟通,是跨越千山万水的亲切声音
        </div>
        <div id="section-3-bg" class="section-bgs"></div>
    </div>

    <script>
        function getTop(node) {
            return node.getBoundingClientRect().top;//获取元素的绝对位置
        }

        function setBgPosY(node, posY) {
            node.style.backgroundPositionY = `${posY}px`;
        } 

        const sections = document.querySelectorAll('.section-bgs');

        window.onscroll = (e) => {
            sections.forEach((node) => {
                setBgPosY(node, getTop(node) / 20);
            });
        }
    </script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,958评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,400评论 4 61
  • 本周作为小组长,做的很不到位。确实有几点值得反思的: 沟通不到位,关于未发文或者未达基础点评的小伙伴...
    A小蜗牛阅读 1,477评论 0 1

友情链接更多精彩内容