zoukankan      html  css  js  c++  java
  • 统计商品的曝光率

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <style>
            .conatiner{display: -webkit-flex;display: flex;justify-content: center;align-items: center}
            ul li{150px;height:150px; margin-bottom:15px; background:lightblue; border:1px solid deepskyblue; list-style:none;text-align: center;line-height: 150px; color:#fff;}
        </style>
        <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    </head>
    <body>
       <div class="conatiner">
           <ul>
               <li data-id="g1">1</li>
               <li data-id="g2">11</li>
               <li data-id="g3">111</li>
               <li data-id="g4">1111</li>
               <li data-id="g5">11111</li>
               <li data-id="g6">111111</li>
               <li data-id="g7">1111111</li>
               <li data-id="g8">11111111</li>
               <li data-id="g9">111111111</li>
               <li data-id="g10">1111111111</li>
               <li data-id="g11">11111111111</li>
               <li data-id="g12">111111111111</li>
           </ul>
       </div>
    </body>
    
    <script type="text/javascript">
    
        var lastItemIdx= 0,visitedIds=[];
        //发送统计
        function SendStatistics(){
            var $ul= $('ul li');//商品图片列表
            var scrollHeight=$(window).height()+$(window).scrollTop();//已经滚动的页面高度
            $.each($ul, function (index, item) {
                curItemOffsetTop=item.offsetTop; //当该item被元素包裹时,无法获取到窗口顶部的真实距离
                //getBoundingClientRect用于获取某个元素相对于窗口的位置集合。集合中有top, right, bottom, left等属性
                //使用curItemOffsetTop=item.getBoundingClientRect().top 进行获取
                var curItemIdx=index+1;
                if(curItemOffsetTop<scrollHeight&&curItemIdx>lastItemIdx){
                    //如何提交统计值,form提交会刷页面,ajax提交开销太大,通过src链接方式进行提交最好,还可以跨域
                    visitedIds.push($(item).data("id"));
                    sendUrl("http://www.cnblogs/com/leyi?visitedIds="+visitedIds.join()); //跨域提交统计数据
                    document.cookie="visitedIds="+visitedIds;//保存在cookie里可以下次请求时提交,不能跨域
                    lastItemIdx+=1;
                }
            });
        }
    
        //可以跨域的统计数据发送方式(src链接不受同源策略约束)
        function sendUrl(url) {
            let img = new Image();
            let key = 'statistics_log_'+ Math.floor(Math.random() * 12345789).toString(16);
            window[key] = img;
            img.onload = img.onerror = img.onabort = function () {
                img.onload = img.onerror = img.onabort = null;  // 清除img元素
                window[key] = null;
                img = null;
            };
            img.src = url;
        }
    
        $(function(){
            SendStatistics();
            $(window).on("scroll",function(e){
                SendStatistics();
            });
        });
    </script>
    
    </html>
    

      

  • 相关阅读:
    一些要学习的文章
    Android 应用检查更新并下载
    Android中如何下载文件并显示下载进度
    android IntentService和ResultReceiver的异步处理
    android 优秀图表库之MPAndroidChart
    android 仿QQ气泡聊天界面
    android canvas中rotate()和translate()两个方法详解
    android 透明弹出搜索框
    【转】ANDROID自定义视图——onLayout源码 流程 思路详解
    【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
  • 原文地址:https://www.cnblogs.com/leyi/p/9886561.html
Copyright © 2011-2022 走看看