JavaScript 中有什么方法可以找出用户在同一个域中点击了 2 次或更多次?
用户在网站上的任意位置单击 3 次后,我需要弹出一个窗口。一键单击后我知道该怎么做 - 使用document.referrer
or addEventListener
,但后来我迷路了。
我需要能够捕获所有点击事件(不仅是链接)并计算它们的东西。
JavaScript 中有什么方法可以找出用户在同一个域中点击了 2 次或更多次?
用户在网站上的任意位置单击 3 次后,我需要弹出一个窗口。一键单击后我知道该怎么做 - 使用document.referrer
or addEventListener
,但后来我迷路了。
我需要能够捕获所有点击事件(不仅是链接)并计算它们的东西。
当然。您需要在 cookie 或服务器端数据存储中存储用户的点击事件列表。在每次记录的点击中,将计数加一,并在数字达到 3 时执行您的操作。
尝试使用会话 cookie 来存储页面之间的状态——它们速度快、兼容性非常好,并且会在浏览器关闭时归零,以防止向用户的 cookie 罐发送垃圾邮件。
我试过了,效果很好:
window.onload = function() {
var clicked = readCookie('popunder');
if(clicked == null) {
clicked = 0;
}
var allLinks = document.getElementsByTagName("a");
for(i=0;i<=allLinks.length;i++) {
allLinks[i].addEventListener("click",countClicks,true);
}
function countClicks() {
if(clicked == 2) {
popunder(); //something to do
} else {
clicked++;
doCookie('popunder', clicked, 1);
alert(clicked);
}
}
function popunder() { alert('thats 3 clicks!'); }
function doCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
} else {
var expires = "";
}
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var readName = name + "=";
var cSplit = document.cookie.split(';');
for(var i=0;i < cSplit.length;i++) {
var sc = cSplit[i];
while (sc.charAt(0)==' ') sc = sc.substring(1,sc.length);
if (sc.indexOf(readName) == 0) return sc.substring(readName.length,sc.length);
}
return null;
}
}
感谢您的所有建议。我试过这段代码。但刷新后,点击的变量再次变为 0。我需要将点击的每个新值保存到 cookie(或其他任何内容)中,因此每次点击页面上的链接时,它的数量都会增加。是否可以通过这种方式更改 cookie 中变量的值?
window.onload = 函数(){
var **allLinks** = document.getElementsByTagName("a");
var **clicked** = 0;
**doCookie**('popunder',clicked,1);
for(i=0;i<=allLinks.length;i++){
allLinks[i].addEventListener("click",countClicks,true);
}
function **countClicks**(){
if(clicked == 3){
popunder(); //something to do
}
else{
alert(readCookie('popunder'));
return clicked++;
}
}
function **doCookie**(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function **readCookie**(name) {
var readName = name + "=";
var cSplit = document.cookie.split(';');
for(var i=0;i < cSplit.length;i++) {
var sc = cSplit[i];
while (sc.charAt(0)==' ') sc = sc.substring(1,sc.length);
if (sc.indexOf(readName) == 0) return sc.substring(readName.length,sc.length);
}
return null;
}