【发布时间】:2018-02-09 19:48:01
【问题描述】:
我试图在元素每次进入 Amplitude 视口时对其进行跟踪。现在,当一个元素滚动到视图中时,jQuery 会检测元素 id,如果它向上或向下滚动,并声明它是一个滚动事件。这些项目显示在 Amplitude admin 中。问题是当 div 在视口中时,每次鼠标滚动都会触发滚动事件。因此,当视口中的每个元素只需要一个事件时,它会创建大量事件。如何只触发一次事件,然后在它再次超出视口时将其重置?
function isScrolledIntoView(elem) {
// set offset by 10%
var offSet = jQuery(window).height()*0.1;
// offset scrolltop
var docViewTop = jQuery(window).scrollTop() + offSet;
// set window height area to 80%
var windowSize = jQuery(window).height()*0.8;
var docViewBottom = docViewTop + windowSize;
var elemTop = jQuery(elem).offset().top;
var elemBottom = elemTop + jQuery(elem).height();
return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}
var lastScrollTop = 0;
jQuery(window).scroll(function (event) {
// detects scroll direction.
var st = jQuery(this).scrollTop();
if (st > lastScrollTop){
var action = 'ScrollDown';
} else {
var action = 'ScrollUp';
}
lastScrollTop = st;
jQuery('.trackScrolling').each(function () {
// get element ID
var elementID = jQuery(this).attr("id");
var ScrollEvents = 'ScrollEvents';
// if in viewport fire event
if (isScrolledIntoView(this) === true) {
gu_event(ScrollEvents, action, elementID);
}
});
});
【问题讨论】:
标签: javascript jquery