ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

页面热力图前端怎么埋点?从点击坐标到视口换算实现

页面热力图前端怎么埋点?从点击坐标到视口换算实现

导读:热力图是分析用户点击行为的利器,但前端埋点的坐标换算很多人都搞不清。我在456数据做热力图模块时踩过不少坑,今天把坐标系的逻辑讲透。

热力图到底埋的是什么?

热力图的核心就是:记录用户在页面上每一次点击的坐标位置,然后把相同位置的点击密度渲染成颜色深浅。

点击坐标换算原理

三个坐标系,先搞清楚

属性参考原点说明
clientX / clientY视口左上角相对当前可视区域,不含滚动
pageX / pageY文档左上角相对整个页面,包含滚动距离
screenX / screenY屏幕左上角相对物理屏幕,一般用不上

根据MDN MouseEvent文档,pageY = clientY + scrollY。热力图用的是pageX/pageY。

document.addEventListener('click', function(e) { const x = e.pageX; const y = e.pageY; trackHeatmapClick({ x, y }); });

我的经验:热力图埋点一定要存百分比坐标,不要存绝对像素。不然不同屏幕的热力图全错位了。

总结

热力图埋点的核心是坐标换算。总结一下三个要点:pageY = clientY + scrollY是最基本的换算关系,百分比坐标是解决多分辨率对齐的关键,设备像素比是高清屏不模糊的保证。

常见问题 FAQ

Q1:为什么热力图的热点总是偏一点?

A:大概率是坐标系用错了。检查一下是不是用了clientY而不是pageY。

Q2:移动端的热力图怎么做?

A:移动端用touch事件,并且要注意设备像素比(devicePixelRatio)。

Q3:iframe 里的点击怎么统计?

A:跨域iframe里的点击拿不到父页面的坐标。同域的可以传消息,跨域的就只能单独埋点了。

Q4:热力图的数据量会不会很大?

A:会。我一般会做抽样,比如随机上报10%的点击事件。

参考来源

MDN: MouseEvent.pageX 文档
W3C Pointer Events Level 2 规范
​

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进