• 使用IntersectionObserver 实现下拉加载更多


    IntersectionObserver是浏览器原生提供的构造函数,接受两个参数:callback是可见性变化时的回调函数,option是配置对象(该参数可选)。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
            content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <!-- <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script> -->
        <title>intersectionObserver</title>
        <style>
            * {
                margin: 0;
                padding: 0;
                box-sizing: border-box;
            }
    
            div {
                margin: 0 auto;
                max- 100%;
                 600px;
            }
    
            #top {
                height: 600px;
                background-color: #aaaaaa;
            }
    
            #middle {
                margin-top: 200px;
                opacity: 0;
                height: 800px;
                background-color: #000000;
            }
    
            #bottom {
                height: 200px;
                background-color: #333;
            }
            div.move,
            #top.move,
            #middle.move,
            #bottom.move {
                animation: movefromleft 2s;
                animation-fill-mode: forwards;
            }
    
            @keyframes movefromleft {
                from {
                    opacity: 0;
                    transform: translateX(-300px);
                }
    
                to {
                    opacity: 1;
                    transform: translateX(0px);
                }
            }
        </style>
    </head>
    
    <body>
        <div id="top"></div>
        <div id="middle"></div>
        <div id="bottom"></div>
        <div id="b_B"></div>
    </body>
    <script>
        window.onload = (event) => {
            const middle = document.getElementById('middle'),
                top = document.getElementById('top'),
                bottom = document.getElementById('bottom');
            var last = document.getElementById('b_B')
            const animationClass = 'move';
            // 创建监听
            const intersectionObserver = new IntersectionObserver((entries) => {
                for (entry of entries) {
                    if (entry.target.id == 'b_B' && entry.intersectionRatio > 0) {
                        
                        var c = document.createElement('div');
                        c.style.cssText = "border:1px solid black; background-color: pink; height: 100px;";
                        document.querySelector('body').appendChild(c)
                        bottom.parentNode.insertBefore(c, bottom)
                        intersectionObserver.observe(c);
                        addAnimationClass(entry.target, animationClass)
                    }
                    if (entry.intersectionRatio > 0) {
                        console.log('====================================');
                        console.log(entry.target);
                        console.log('====================================');
                        addAnimationClass(entry.target, animationClass);
    
                    } else {
                        removeAnimationClass(entry.target, animationClass);
                    }
                }
            });
    
    
    
    
            // let attributesChangeEl = document.querySelector("body")
            // let config = { childList: true }
            // let observer1 = new MutationObserver(mutationsList => {
    
            //     last = mutationsList[0].addedNodes[0]
            // })
            // observer1.observe(attributesChangeEl, config)
    
    
    
            // 添加动画class的操作
            function addAnimationClass(elem, animationClass) {
                elem.className.includes(animationClass) ? 1 : elem.className = elem.className  + animationClass;
            }
            // 移除动画class的操作
            function removeAnimationClass(elem, animationClass) {
                elem.className.includes(animationClass) ? elem.className = elem.className.replace(animationClass, '') : 1;
            }
            // 开启监听
            intersectionObserver.observe(top);
    
            intersectionObserver.observe(middle);
           
            
            intersectionObserver.observe(last);
        }
    
    </script>
    
    </html>
  • 相关阅读:
    xml
    反射
    类加载器
    TCP通信
    UDP通信
    网络通信
    【SpringBoot】Freemarkerの主キー
    【SpringBoot】Warの作成
    【Excel】ファイルの拡張子
    【SAP】TCODE表
  • 原文地址:https://www.cnblogs.com/wsjaizlp/p/12987918.html
Copyright © 2020-2023  润新知