[英]Reset a run once function
我正在使用Facebook像素代碼來確定用戶何時閱讀了整篇文章。 我有一個無限博客,因此URL會隨着用戶向下滾動頁面而變化。 當前,我有一個功能可以在用戶到達頁面末尾時運行一次,但是我需要對其進行修改,因此,如果URL更改,該功能將重置並可以再次運行。 這是我當前的代碼。
// determine the position of element
jQuery.fn.isInViewport = function() {
var elementTop = jQuery(this).offset().top;
var elementBottom = elementTop + jQuery(this).outerHeight();
var viewportTop = jQuery(window).scrollTop();
var viewportBottom = viewportTop + jQuery(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
// grab the current URL
var originalURL = window.location.href;
// check to see if element is in viewport
jQuery(window).on('resize scroll', function() {
var currentURL = '';
jQuery('.end-of-content-icon').each(function() {
if (jQuery(this).isInViewport()) {
currentURL = window.location.href;
if(originalURL !== currentURL) {
canOnlyFireOnce();
originalURL = currentURL;
}
}
});
});
// function to only fire once (courtesy of David Walsh)
function once(fn, context) {
var result;
return function() {
if(fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
// Usage
var canOnlyFireOnce = once(function() {
fbq('track', 'Lead');
});
用其他功能解決了它。 我通過永久鏈接並將其添加到數組。 如果永久鏈接在數組中尚不存在,則將變量“ triggerOnce”設置為true並運行該函數。
var triggerOnce = true;
var permalinkArray = [];
function callFaceBookPixel(permalink){
if(permalinkArray.indexOf(permalink) === -1) {
permalinkArray.push(permalink);
triggerOnce = true;
}
if(triggerOnce){
triggerOnce = false;
fbq('track', 'Lead');
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.