(GTM) 悬停时触发 fb 像素
(GTM) Trigger fb pixel on hover
我试图在页面中悬停 div(或其他)时触发 Facebook 像素事件。然而,在我将鼠标悬停在 div 之前,事件似乎是第一次被触发。悬停 div 时,事件指示正确的参数。
还有一件好事,就是捕获其他信息,例如悬停的 div id 或其他信息。
这是我在 GTM 标签中插入的代码。我在页面加载(所有页面)时触发它。
<script>
$(document).ready(function() {
var startHover = $.now();
$("#product_name").hover(
function(){
startHover = $.now();
},
function(){
var endHover = $.now();
var msHovered = endHover - startHover;
var seconds = msHovered/1000;
if (seconds >= 1) {
fbq('track', 'Hover', {
domain: {{Page Hostname}},
page_path: {{Page Path}}
});
}
}
);
});
</script>
HTML代码:
<p id="product_name">Product 1</p>
如有任何帮助,我们将不胜感激!
非常感谢。
根据您的代码,我了解到您只想在有人悬停 #product_name
超过 1 秒时触发 fb 事件。
在您的 HTML 代码中请使用此代码:
<script>
$(document).ready(function() {
var timer;
$("#product_name").mouseenter(function() {
var that = this;
timer = setTimeout(function(){
//var text = $(that).text() //text inside hovered #product_name element
//var textInSpan = $(that).find('span').text() //text inside hovered #product_name span element
//var hoveredId = $(that).attr('id') //hovered element ID
//var hoveredClass = $(that).attr('class') //hovered element class name
fbq('track', 'Hover', {
domain: {{Page Hostname}},
page_path: {{Page Path}}
});
}, 1000);
}).mouseleave(function() {
clearTimeout(timer);
});
});
</script>
在我的代码中,我添加了注释示例,您可以如何接收有关悬停 div 信息的其他信息
如我所见,您的 <p>
元素横跨页面的整个宽度,因此即使您没有将鼠标悬停在确切的元素上,而是仅悬停在包含 <p>
,u 寄存器的横截面上悬停事件。
检查这个以查看不一致 https://jsfiddle.net/L9ory5ym/1/
要修复此问题,请将 width
属性添加到段落元素,以便仅在相关元素上注册事件。
我设法找到了解决问题的方法。基本上我是在所有页面上触发标签,所以 fb 事件是在没有内容的情况下触发的,只有在悬停时才会发送正确的参数 #product_name.
我创建了一个变量 "event" 并推送了一个数据层 "thereisHover"。
dataLayer.push({
'event': 'thereisHover'
});
然后我将标准事件分离到另一个标记中,该标记仅在事件 = thereisHover 时触发。
我试图在页面中悬停 div(或其他)时触发 Facebook 像素事件。然而,在我将鼠标悬停在 div 之前,事件似乎是第一次被触发。悬停 div 时,事件指示正确的参数。
还有一件好事,就是捕获其他信息,例如悬停的 div id 或其他信息。
这是我在 GTM 标签中插入的代码。我在页面加载(所有页面)时触发它。
<script>
$(document).ready(function() {
var startHover = $.now();
$("#product_name").hover(
function(){
startHover = $.now();
},
function(){
var endHover = $.now();
var msHovered = endHover - startHover;
var seconds = msHovered/1000;
if (seconds >= 1) {
fbq('track', 'Hover', {
domain: {{Page Hostname}},
page_path: {{Page Path}}
});
}
}
);
});
</script>
HTML代码:
<p id="product_name">Product 1</p>
如有任何帮助,我们将不胜感激!
非常感谢。
根据您的代码,我了解到您只想在有人悬停 #product_name
超过 1 秒时触发 fb 事件。
在您的 HTML 代码中请使用此代码:
<script>
$(document).ready(function() {
var timer;
$("#product_name").mouseenter(function() {
var that = this;
timer = setTimeout(function(){
//var text = $(that).text() //text inside hovered #product_name element
//var textInSpan = $(that).find('span').text() //text inside hovered #product_name span element
//var hoveredId = $(that).attr('id') //hovered element ID
//var hoveredClass = $(that).attr('class') //hovered element class name
fbq('track', 'Hover', {
domain: {{Page Hostname}},
page_path: {{Page Path}}
});
}, 1000);
}).mouseleave(function() {
clearTimeout(timer);
});
});
</script>
在我的代码中,我添加了注释示例,您可以如何接收有关悬停 div 信息的其他信息
如我所见,您的 <p>
元素横跨页面的整个宽度,因此即使您没有将鼠标悬停在确切的元素上,而是仅悬停在包含 <p>
,u 寄存器的横截面上悬停事件。
检查这个以查看不一致 https://jsfiddle.net/L9ory5ym/1/
width
属性添加到段落元素,以便仅在相关元素上注册事件。
我设法找到了解决问题的方法。基本上我是在所有页面上触发标签,所以 fb 事件是在没有内容的情况下触发的,只有在悬停时才会发送正确的参数 #product_name.
我创建了一个变量 "event" 并推送了一个数据层 "thereisHover"。
dataLayer.push({
'event': 'thereisHover'
});
然后我将标准事件分离到另一个标记中,该标记仅在事件 = thereisHover 时触发。