JS監測產品有效曝光

電商列表頁面,數據加載,並不是寫到了列表的產品圖都被客戶看見了。有時候根本沒有被加載

  1. 判斷加載
    瀏覽器是否能判斷一張圖,加載完畢,如果可以那麼觸發JS,推送一次曝光數據

輪詢圖片

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>img - complete attribute</title>
</head>
<body>
<img id="img1" src="http://pic1.win4000.com/wallpaper/f/51c3bb99a21ea.jpg"&gt;
<p id="p1">loading...</p>
<script type="text/javascript">
function imgLoad(img, callback) {
var timer = setInterval(function() {
if (img.complete) {
clearInterval(timer);
callback();
}
}, 50)
}
imgLoad(img1, function() {
// p1.innerHTML = '加載完畢';
//Ajax 觸發監測系統 傳送產品ID
})
</script>
</body>
</html>
圖片的onload

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>img - load event</title>
</head>
<body>
<img id="img1" src="http://pic1.win4000.com/wallpaper/f/51c3bb99a21ea.jpg"&gt;
<p id="p1">loading...</p>
<script type="text/javascript">
img1.onload = function() {

//Ajax 觸發監測系統 傳送產品ID

    }
</script>

</body>
</html>

  1. JS判斷看見

看見,圖片一個列表,被看見和被加載兩碼事。

以下代碼顯示了JS如何監測一個圖片被看見

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style type="text/css">
.box {
width: 100%;
height: 200px;
background: #ff0000;
margin-bottom: 10px;
text-align: center;
color: #fff;
line-height: 200px;
font-family: microsoft yahei;
font-size: 40px;

}
.animate{
animation: showText 1s;
}
@keyframes showText
{
from {
font-size: 20px;
}
to {
font-size: 40px;
}
}
</style>
<body>
<div class="box">1</div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</body>
<script type="text/javascript">

var box = document.getElementsByClassName('box');
function initcheckimg(){
//滾動條高度+視窗高度 = 可見區域底部高度
var visibleBottom = window.scrollY + document.documentElement.clientHeight;
//可見區域頂部高度
var visibleTop = window.scrollY;
for (var i = 0; i < box.length; i++) {
var centerY = box[i].offsetTop+(box[i].offsetHeight/2);
if(centerY>visibleTop&centerY<visibleBottom){
box[i].innerHTML = i+'區域可見'
box[i].setAttribute("class",'box animate')
console.log('第'+i+'個區域可見');
}else{
box[i].innerHTML = '';
box[i].setAttribute("class",'box')
//console.log('第'+i+'個區域不可見');
}
}
}

  initcheckimg();

document.addEventListener('scroll',initcheckimg)
</script>
</html>
測試效果圖

  1. 分級區域
    思路1 將屏幕分割到不同的區域

假設分爲三屏幕(這個思想來自google的列表排名)這樣就可以監測一張圖片在當時網頁展示的時候的位置。
理解爲產品排名,第一名和第五名的產品,儘管可能都被看到,但是第一名的位置永遠那麼閃耀。

  1. 默認的第一屏幕
  2. 第二屏幕
  3. 第三屏幕
  4. 超過三屏幕

優勢:可以將產品按屏幕出現的維度進行統計數據。
侷限:必須考慮移動版,ipad版,不同顯示器尺寸下,定義的第一屏幕是否相同。

思路2 利用排序ID
頁面上的所有產品有個自然的排序,每次傳給監測系統帶上這個ID排序。這樣分析的時候就知道這個產品大概在什麼位置。

優勢:跨越了屏幕分類的複雜。
侷限:這粒度的監測,只適合特定頁面產品排名固定的情況。如果遇到多個列表頁,某個產品都出現了,且ID排序不一致,就會引起監測數據的混亂。

如果考慮客戶的網速,應該將判斷加載和判斷看見同時使用。具體還需要在實際應用中不停的測試,修改細節。

https://java-er.com/blog/js-expo-effective/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章