zoukankan      html  css  js  c++  java
  • IntersectionObserver--采集多元素曝光时间完整demo

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <link rel="stylesheet" href="https://cdn-h5.iauto360.cn/css/reset.min.css">
        <style>
            html,body{
                font-size: 100px;
                overflow-x: hidden;
            }
            #info {
                height: 800px;
                width: 100%;
                font-size:20px;
            }
           
            #t1,#t2,#t3 {
                width: 100px;
                height: 100px;
                background: red;
                margin-right: 20px;
                font-size: 22px;
            }
            #t1,#t2{
                float: left;
            }
            #t3{
                margin-top: 140px;
                background: #000;
                color:#fff;
            }
        </style>
         <script>
            //->REM
            ~function () {
                var desW = 750,
                    winW = document.documentElement.clientWidth || document.body.clientWidth;
                if (winW > desW) {
                    return;
                }
                document.documentElement.style.fontSize = winW / desW * 100 + 'px';
            }();
        </script>
        <script src="https://cdn.bootcdn.net/ajax/libs/babel-polyfill/7.10.1/polyfill.min.js"></script>
    </head>
    <body>
    <div id="info">IntersectionObserver--采集多元素曝光时间-demo</div>
    <div id="t1">t1</div>
    <div id="t2">t2</div>
    <div id="t3">t3</div>
    
    <script>
        var tdata = {};//元素集数据
    
        let observer = new IntersectionObserver((entries) => {
            initTdata(tdata,entries);
            // console.log("tdata:::",tdata)
            entries.forEach((entry,index) => {
                // console.log(entry.target.getAttribute('id')+"=====================");
                var tg = entry.target.getAttribute('id');
                // console.log("tg:",tg)
                if (!entry.isIntersecting) {
                    entry.isIntersecting = true
                    if(tdata[tg].flag == 0){
                        tdata[tg].end_time = entry.time;
                        let tt  = (tdata[tg].end_time - tdata[tg].start_time)/1000;
                        tdata[tg].duration = tdata[tg].duration + tt;
                    };
                    tdata[tg].flag = 0;
                    
                } else {
                    entry.isIntersecting = false;
                    tdata[tg].start_time = entry.time;
                }
                // console.log(entry.target.getAttribute('id')+"=====================");
            })
            console.log("曝光元素数据集:",JSON.stringify(tdata));
           
        }, {
            root: null // null 的时候可以省略
        })
    
        function initTdata(tdata,entries){
            if(Object.keys(tdata).length>0) return;
            for(var i=0; i < entries.length;i++){
                let tg = entries[i].target.getAttribute('id');
                tdata[tg] = {
                    flag:1,
                    start_time:0,
                    end_time:0,
                    duration:0
                }
            }
        }
        observer.observe(t1)
        observer.observe(t2)
        observer.observe(t3)
    </script>
    </body>
    </html>
  • 相关阅读:
    [转] 《大腕》——编程高手篇
    [转] 如何用VB.Net创建一个三层的数据库应用程序
    [转] 张孝祥的java试题
    [转] 很久以前的一个sql面试题及答案.
    [转] C#编程实践
    [转] html技巧
    [转] 揭开SVCHOST.exe进程之谜
    [转] c#.net常用函数和方法集
    [转] Visual Studio.Net 快捷键表
    [转] left join/right join/inner join操作演示
  • 原文地址:https://www.cnblogs.com/ivan5277/p/13095592.html
Copyright © 2011-2022 走看看