JS实现网站点击事件的统计功能。
点击事件上报,分为立即上报和延时上报,延时上报通过cookie存储。
一、配置参数,主要用于定义上报的一些配置信息。通过在外部定义_clickc对象重置参数。
参数名称 类型 默认值 说明
selector: string '_click_rp' 点击触发的选择器,支持ID、class
prefix: string '_rp_' 需要上报的参数属性名前缀,如_rp_type,表示要上报type参数的值
cookie: string '_click_rp' 延迟上报时的cookie名称
domain: string '.skye.com' cookie存储的域名(可以通过使用的网站来获得)
delay: boolean false 是否延迟上报,延迟上报通过cookie实现
delay_attr: string _delay 标签中指定是否延迟上报,优先级最高,ture延时,其他不延时。
二、外部参数,主要用于定义上报的参数。通过在外部定义_clickq数组增加参数。
三、标签参数,使用前缀_rp_定义,上报的时候会将所有_rp_开头的参数上报。参数的格式分为两种,1种纯字符,1中回调函数。
<a class="_click_rp" href="" _rp_a="aa" _rp_b="bb">a</a>,表示上报时的参数为a=aa&b=bb
1,纯字符,直接定义字符,表示需要上传参数的值。
2,回调函数,以javascript:开头。只需定义函数体,在函数体中返回参数的值。
如,<a href="/qa_question/press.html" id="ques_search_btn" class="_click_rp" _rp_act="javascript:if($('#ques_search_btn').text()=='提问'){return 'act_qa_ques';}else{return 'act_search';}"><span>提问</span></a>
四、延时上报,分为三种优先级,如下由高到低
1,标签属性_delay是否指定为true,如果是表示延迟上报。
2,是否为特定标签,如a标签本窗口打开(target等于"_self"或空),submit按钮。
3,配置参数中指定的delay参数。
五、支持:需要依赖jQuery插件。
六、使用案列
1,引入JS
var _clickq = _clickq || []; _clickq.push(['param1', 'value1']); var _clickc = {selector:'_click_rps'}; (function() { var click = document.createElement("script"); click.src = "//cache.skye.com/js/lib/stat/click.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(click, s); })();
2,定义选择器和上传参数
如,<a class="_click_rp" href="" _rp_a="aa" _rp_b="bb">a</a>
(function () { // 默认参数 var options = { selector: '_click_rp', prefix: '_rp_', cookie: '_click_rp', domain: '.skye.com', delay: false, delay_attr: '_delay' }; var params = {}; var _params = {}; var clickObj = null; // 当前点击对象 // 获得对象 var getObject = function(selector) { if (typeof(selector) == 'object') { return selector; } else { var obj = $('#'+selector); if (obj.length) { return obj; } obj = $('.'+selector); if (obj.length) { return obj; } return null; } } // 获得选择器 var getSelector = function(selector) { return '#' + selector + ',.' + selector; } // 操作cookie函数 var getCookie = function(c_name) { if (document.cookie.length>0) { c_start = document.cookie.indexOf(c_name + "=") if (c_start!=-1) { c_start=c_start + c_name.length+1 c_end=document.cookie.indexOf(";",c_start) if (c_end==-1) c_end=document.cookie.length return unescape(document.cookie.substring(c_start,c_end)) } } return ""; } var setCookie = function(c_name,value,expiredays,path,domain) { var exdate = new Date() exdate.setDate(exdate.getDate()+expiredays) var cookie = c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString()); if (path) cookie = cookie + ";path=" + path; if (domain) cookie = cookie + ";domain=" + domain; document.cookie = cookie; } // 获得标签中的参数 var getAttrParam = function() { if ( clickObj ) { var attrs = clickObj.get(0).attributes; $.each(attrs, function(i) { var name = attrs[i].name; if ( name.indexOf(options.prefix) == 0 ) { name = name.replace(options.prefix, ''); var value = attrs[i].value; if ( value.indexOf('javascript:') == 0 ) { // 执行js获得参数值 value = value.replace('javascript:', ''); eval('var valFun = function() {'+ value +'};'); value = valFun(); } params[name] = value; } }); } } // 获得默认参数 var getDefaultParam = function() { if(document) { params.url = document.URL || ''; params.referrer = document.referrer || ''; } // 时间 var date = new Date(); params.ltime = date.getTime() / 1000; // 时间戳 params.t = date.getTime(); } var getParamStr = function() { getAttrParam(); getDefaultParam(); // 合并配置参数 for(var key in _params) { params[key] = _params[key]; } //拼接参数串 var args = ''; for(var i in params) { if(args != '') { args += '&'; } args += i + '=' + encodeURIComponent(params[i]); } return args; } // 清空参数 var clearParam = function() { params = {}; } // 是否立即上报,如果跳转页面,则计入延时上报 var getIsDelay = function() { if ( clickObj ) { // 有具体指定 if ( clickObj.attr(options.delay_attr) == 'true' ) { return true; } // 特定标签 // a标签 if ( clickObj.is('a') ) { if ( clickObj.attr('href').indexOf('javascript:') == 0 ) { return false; } if ( clickObj.attr('target') && clickObj.attr('target') != '_self' ) { return false; } return true; } // submit按钮 if ( (clickObj.is('input') || clickObj.is('button')) && clickObj.attr('type') == 'submit' ) { return true; } } return options.delay; } // 加入cookie,下次上报 var setDelayCookie = function() { // 获得参数 var args = getParamStr(); var cookieStr = getCookie(options.cookie); if ( cookieStr == '' ) { cookieStr = args; } else { cookieStr = cookieStr + ',' + args; } setCookie(options.cookie, cookieStr, 7, '/', options.domain); clearParam(); } // 上报cookie var rpCookie = function() { // 获得cookie,循环操作 var cookieStr = getCookie(options.cookie); if ( cookieStr ) { var cookieArr = cookieStr.split(','); for(var key in cookieArr){ rpClick(cookieArr[key]); } setCookie(options.cookie, '', 7, '/', options.domain); } } // 上报 var rpClick = function(args) { if ( args == undefined ) { args = getParamStr(); } var img = new Image(1, 1); img.src = 'http://data.skye.com/stat/click?' + args; console.info(img.src); clearParam(); } // js上报函数 var rpComm = function(obj) { console.info('click'); clickObj = obj; if ( getIsDelay() ) { setDelayCookie(); } else { rpClick(); } } //解析外部配置 if(_clickc) { for(var i in _clickc) { options[i] = _clickc[i]; } } //解析外部参数 if(_clickq) { for(var i in _clickq) { _params[_clickq[i][0]] = _clickq[i][1]; } } // 提供外部js函数 $.rpComm = function(obj) { rpComm(obj); } $.fn.rpComm = function() { rpComm($(this)); } // cookie中的上报 rpCookie(); // 初始化信息 var _time = new Date().valueOf(); var selector = getSelector(options.selector); $('body').delegate(selector,'click',function() { // 连续点击限制 if(new Date().valueOf() - _time < 300) { return; } _time = new Date().valueOf(); rpComm($(this)); }); })();
以上这篇JS实现点击事件统计的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍js 基础篇必看(点击事件轮播图的简单实现),包括了js 基础篇必看(点击事件轮播图的简单实现)的使用技巧和注意事项,需要的朋友参考一下 轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现。但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1、利用位移的方法来实现 首先,我们可以在body中添加一个div并且将宽度
本文向大家介绍js实现点击切换checkbox背景图片的简单实例,包括了js实现点击切换checkbox背景图片的简单实例的使用技巧和注意事项,需要的朋友参考一下 在制作网页的过程中,经常需要实现点击切换背景图片的效果,本文关注的是表单中checkbox背景图片切换的实现。如图,在输入用户名和密码后,用户需要选择是否记住密码 图片背景为白色表示未勾选状态 ,背景为蓝色表示勾选状态 。 HTML源码
本文向大家介绍js实现简单计算器,包括了js实现简单计算器的使用技巧和注意事项,需要的朋友参考一下 参考部分资料,编写一个简单的计算器案例,虽然完成了正常需求,但是也有不满之处,待后续实力提升后再来补充,先把不足之处列出: 1:本来打算只要打开页面,计算器的输入框会显示一个默认为0的状态,但是在输入框加入默认显示为0的时候,选择数据输入时,该0会显示输入数字的前面,例如”0123“,由于能力有
本文向大家介绍js简单实现点击左右运动的方法,包括了js简单实现点击左右运动的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js简单实现点击左右运动的方法。分享给大家供大家参考。具体分析如下: 这里可实现点击向右,方块向右移动,点击向左,方块向左移动的效果 可以用setInterval来实现过多长时间,div移动多长的距离来实现运动效果。 要点一:如果元素的左边距离小于目标距离,则是
本文向大家介绍Android点击事件的实现方式,包括了Android点击事件的实现方式的使用技巧和注意事项,需要的朋友参考一下 在之前博文中多次使用了点击事件的处理实现,有朋友就问了,发现了很多按钮的点击实现,但有很多博文中使用的实现方式有都不一样,到底是怎么回事。今天我们就汇总一下点击事件的实现方式。 点击事件的实现大致分为以下三种: (1)Activity 实现接口方式实现点击事件(经常使用)
本文向大家介绍用python实现简单EXCEL数据统计的实例,包括了用python实现简单EXCEL数据统计的实例的使用技巧和注意事项,需要的朋友参考一下 任务: 用python时间简单的统计任务-统计男性和女性分别有多少人。 用到的物料:xlrd 它的作用-读取excel表数据 代码: 以上这篇用python实现简单EXCEL数据统计的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也