基于jQuery或Zepto实现实时监控用户浏览信息

对于一些大型公司,想要有一些监控用户行为的分析,怎么办?

比如一个场景,A公司想要监控用户浏览当前屏幕有哪些数据怎么办?

那么就用到本文所提的监控解决方案了:

1.首先要监控用户到底在该屏停留了多久;

2.基于1确定用户是停留在了本页面而没有滑动手机屏幕;

3.在用户未达到条件后的callback机制。

基于以上的问题,我们可以想到时间分片

 1 /* This is a expose advertisements component.
 2  * Base on some class libraries that has dom selector such as jQuery or Zepto.
 3  * The bind dom must be a block element.
 4  * use as $(‘.class‘).exposure(settings);
 5  * The bottom expose proportion use ($(window).height() + $(window).scrollTop() - $(‘.class‘).eq(index).offset().top)/$(‘.class‘).eq(index).height()
 6  * The top expose proportion use (1 - ($(window).scrollTop() - $(‘.class‘).eq(index).offset().top)/$(‘.class‘).eq(index).height())
 7  * settings: object
 8  * {
 9  *      ‘exposeSecond‘: 2 // 2 seconds for advertisement to expose
10  *      ‘timePeriod‘: 100 // 100 Millisecond for every time period
11  *      ‘sendFunction‘: function(){} // callback for each expose time
12  * }
13  */
14 (function($, window){
15     $.fn.exposure= function(settings) {
16         var $this = $(this), el = {}, _winScrollTop = _winScrollTop = $(window).scrollTop(), _winHeight = $(window).height(), watcher = null, sendQueue = [], checkOldTop = checkNewTop = 0, timePeriod = settings.timePeriod || 100, topThis = this, staySecond = settings.exposeSecond || 4, nowTime = 0, sendedQueue = [], turnFlag = true, proportion = 0.8;
17         var stayTime = timePeriod * 10 * staySecond;
18         var _bindElement = function() {
19             el = {
20                 $ads: $this
21             };
22         },
23         _bindAction = function() {
24             $(window).on(‘scroll.ad‘, function(eve){
25                 _winScrollTop = $(window).scrollTop();
26                 _winHeight = $(window).height();
27                 _checkAdSection();
28             });
29         },
30         _checkAdSection = function() {
31             sendQueue = [];
32             turnFlag = true;
33             var _checkNewTop = 0;
34             el.$ads.each(function() {
35                 var $self = $(this);
36                 var _offsetTop = $self.offset().top;
37                 var _eleHeight = $self.height();
38                 if (_offsetTop <= _winScrollTop && _offsetTop + _eleHeight > _winScrollTop && (_offsetTop + _eleHeight * (1 - proportion)) >= _winScrollTop) {
39                     sendQueue.push($self);
40                     _checkNewTop = _checkNewTop ? _checkNewTop : _offsetTop;
41                 }
42
43                 if (_offsetTop > _winScrollTop && _offsetTop <= (_winHeight + _winScrollTop) && (_offsetTop + _eleHeight * proportion) <= (_winHeight + _winScrollTop)) {
44                     _checkNewTop = _checkNewTop ? _checkNewTop : _offsetTop;
45                     sendQueue.push($self);
46                 } else if (_offsetTop > (_winHeight + _winScrollTop)){
47                     return false;
48                 }
49             });
50             checkNewTop = _checkNewTop;
51         },
52         _startWatcher = function() {
53             if (watcher) {
54                 return;
55             }
56
57             watcher = setInterval(function(){
58                 if (!turnFlag) {
59                     return true;
60                 }
61
62                 if (nowTime >= stayTime) {
63                     turnFlag = false;
64                     nowTime = 0;
65                     _sendQueueHandler($.extend({}, sendQueue));
66                     return true;
67                 }
68
69                 if (checkOldTop == checkNewTop) {
70                     nowTime += timePeriod;
71                 } else {
72                     checkOldTop = checkNewTop;
73                     nowTime = 0;
74                 }
75             }, timePeriod);
76         },
77         _sendQueueHandler = function(sendQueueArray) {
78             settings.sendFunction(sendQueueArray);
79         },
80         _init = function() {
81             _bindElement();
82             _bindAction();
83             setTimeout(function() {
84                 _winHeight = $(window).height();
85                 _checkAdSection();
86             }, stayTime);
87
88             _startWatcher();
89         };
90         _init();
91     }
92 })($, window);

$(‘.expose-node‘).exposure({
exposeSecond: 2,//曝光时间2s
sendFunction:function(nodes){//do what you want}//两秒到了回传的notes,自己处理具体要干什么
});

时间: 2024-11-08 12:04:29

基于jQuery或Zepto实现实时监控用户浏览信息的相关文章

基于Jquery插件Uploadify实现实时显示进度条上传图片

网址:http://www.jb51.net/article/83811.htm 这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们可以参考一下 先了解了解Uploadify,具体内容如下 Uploadify是一个简单易用的多文件上传方案.作为一个Jquery插件,Uploadify使用简单,并具有高度的定制性. Uploadify特性: Uploadify简单说来,是基于Jquery的一款文件上传插件.它的功能特色总结如下: 1).支

基于Storm的Nginx log实时监控系统

背景 UAE(UC App Engine)是一个UC内部的PaaS平台,总体架构有点类似CloudFoundry,包括: 快速部署:支持Node.js.Play!.PHP等框架 信息透明:运维过程.系统状态.业务状况 灰度试错:IP灰度.地域灰度 基础服务:key-value存储.MySQL高可用.图片平台等 这里它不是主角,不作详细介绍. 有数百个Web应用运行在UAE上,所有的请求都会经过UAE的路由,每天的Nginx access log大小是TB级,如何实时监控每个业务的访问趋势.广告数

树莓派进阶之路 (017) - 基于树莓派的专用摄像头实时监控

环境: 硬件:树莓派三代B型, 5MP Camera Board Module 软件:Raspbian 安装树莓派摄像头模块 1.找到 CSI 接口(CSI接口在以太网接口旁边),掀起深色胶带. 2.拉起 CSI 接口挡板. 3.拿起你的摄像头模块,将贴在镜头上的塑料保护膜撕掉.确保黄色部分的PCB(有字的一面)是安装完美的(可以轻轻按一下黄色的部分来保证安装完美). 4.将排线插入CSI接口.记住,有蓝色胶带的一面应该面向以太网接口方向.同样,这时也确认一下排线安装好了之后,将挡板拉下. 在树

jQuery 操作cookie保存用户浏览信息

使用jQuery操作cookie之前需要引入jQuery的一个cookie小组件js,代码如下: /*         jQuery cookie plugins */jQuery.cookie = function(name, value, options) {     if (typeof value != 'undefined') { // name and value given, set cookie         options = options || {};         i

基于连接池监控组件druid实现的监控用户在线状态

原文:基于连接池监控组件druid实现的监控用户在线状态 源代码下载地址:http://www.zuidaima.com/share/1550463574248448.htm 我也来分享个代码吧. 最近在做监控用户在线状态,处理客户端用户非正常意外退出(如直接关机,突然停电等)的情况遇到了点问题,找了好多方法都感觉不是很好. 昨天看到一个新的连接池管理工具感觉很不错~应该说是目前最好的---druid 这里不多做介绍,给大家个连接,想学习的可以去看看,开源的.http://code.alibab

实时监控Linux服务器用户操作命令

在/etc/profile 追加 export HISTORY_FILE=/var/log/history/userhistory.log readonly PROMPT_COMMAND='{ date "+%y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$NF}")  #### $(id|awk "{print \$1}") #### $(his

如何用jquery实现实时监控浏览器宽度

如何用jquery实现实时监控浏览器宽度 2013-06-05 14:36匿名 | 浏览 3121 次 $(window).width();这代码只能获取浏览器刷新时的那一刻的宽度,如何才能达到实时获取浏览器宽度呢?求教!谢谢啦! 补充一下:比如我想达到这个效果,当浏览器宽度大雨一定数值时,执行一段代码:$(function(){ if( $(window).width() > 600 ) { /* 这里是要执行的代码 */ }})现在的问题是,这只在刷新页面那一刻有效,当变化浏览器宽度时就没用

Python 基于Python结合pykafka实现kafka生产及消费速率&amp;主题分区偏移实时监控

基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控   By: 授客 QQ:1033553122   1.测试环境 python 3.4 zookeeper-3.4.13.tar.gz 下载地址1: http://zookeeper.apache.org/releases.html#download https://www.apache.org/dyn/closer.cgi/zookeeper/ https://mirrors.tuna.tsinghua.edu

基于邮件系统的远程实时监控系统的实现 Python版

人生苦短,我用Python~ 界内的Python宣传标语,对Python而言,这是种标榜,实际上,Python确实是当下最好用的开发语言之一. 在相继学习了C++/C#/Java之后,接触Python,最一开始突然一片茫然,似乎是进入了新世界,所有C家族的语法,在这里都或多或少地发生了改变,方法没有大括号,喜闻乐见的格式.定义变量不需要声明,时间长了,竟爱上了这个简介明了,高效快捷的语言,当然,也是当下开发语言界内的宠儿,不可否认,Python是当下最流行的开发语言了. [前言] 本文拟使用Py