那些年,加班搞過的需求...

  天氣愈來愈熱,同事們也是幹得熱火朝天,咱們的wap版也已經上線,要迎來正式推廣了。在這個激動人心的時刻,乾點什麼好呢?固然是加!需!!求!!!html

  爲了更好的根據用戶反饋來改進咱們的的產品,咱們要統計一些數據,例如來源url,在頁面中停留的時長,用戶點擊了哪一個標籤等等。其中有一個需求是在用戶瀏覽的過程當中發送心跳包,post請求的參數中包含centerTag,即屏幕中心位置的Tag標籤。關於這個參數花了我很多時間,雖然我已經給頁面上重要的標籤都加了id(點擊以後怎麼獲取後文詳說),可是在用戶沒有點擊屏幕的狀況下我怎麼判斷是哪一個幸運的div出如今了屏幕中央呢?後來決定迂迴一下,經過scrollTop知道頁面滾出屏幕的距離再經過window.screen.height獲取手機屏幕的高度,取滾動高度加上屏幕高度的40%~60%做爲當前屏幕中央的縱座標。後期須要的時候在瀏覽器中調整手機屏幕的大小,就能夠復現當時的情景了,算是沒有辜負組織的重託...vue

  接下來講一說點擊某個div的時候如何獲取它的id。以前作的項目都是用的原生js或者jq,這裏的this就是當前的dom對象了,因此能夠很輕鬆的經過getAttribute("id")或者attr('id')獲取id。但是在vue中,this是vue對象啊,這可如何是好?後來嘗試點擊的時候傳event過來,獲得了這個:瀏覽器

 

劃重點了!注意最下面的path,展開後是這樣的:dom

看起來是冒泡的路徑,在此展開就是...ide

小夥子藏得可真深啊!這裏有className有id,甚至還有寬高和位置真是棒die。ok這個問題也解決了,能夠準備迎接下一個問題了。post

  除了打開頁面和瀏覽頁面,跳轉和關閉時天然也須要統計。由於咱們是電商網站,因此很重視SEO,所以採用了vue推薦的SSR中的nuxt.js。那麼問題來了,在nuxt中使用watch監聽路由、甚至使用中間件middleware都沒法獲取來源url和目標url,也就是route中的from和to。而這有時很是關鍵的參數,咱們要經過這個判斷從哪裏來,到哪裏去(我是睡?我在哪?我在幹什麼?),還有此次跳轉是站內跳轉仍是站外跳轉。後來經過beforeRouteEnter這個鉤子解決了問題,代碼以下:網站

 1 beforeRouteEnter (to, from, next) {
 2     // 統計代碼-頁面跳轉
 3     let jumpParams = {
 4       token: 'token', // token,
 5       url: '',
 6       targetUrl: '', // 目標URL(帶參數)
 7       jumpType: 'in', // 跳轉類型,分爲站內跳轉與站外跳轉
 8       fromTag: 'fromTag', // fromTag站內跳轉來源標籤
 9       pageType: 'b_wap_index', // pageType內容類型
10       contentID: 'b_wap_index', // contentID對應分類頁或產品頁ID
11       // elapsedTime: 0
12     };
13     jumpParams.url = from.path;
14     jumpParams.targetUrl = to.path;
15     // let time = new Date().getTime() - this.beginTime;
16     // jumpParams.elapsedTime = time.toString();
17     countJump(jumpParams);
18 
19     next();
20   },

要注意的是這個next()必定不能少,能夠認爲是一個啓動的標誌。此時beforeRouteEnter 守衛 不能 訪問 this,由於守衛在導航確認前被調用,所以即將登場的新組件還沒被建立。注意 beforeRouteEnter 是支持給 next 傳遞迴調的惟一守衛。對於 beforeRouteUpdate 和 beforeRouteLeave 來講,this 已經可用了,因此不支持傳遞迴調,由於沒有必要了。ui

  最後,在頁面關閉時還須要最後一次統計數據,這裏沒有什麼幺蛾子,只是beforeDestroy這個鉤子不多用到,算是查漏補缺了吧!貼下代碼:this

beforeDestroy: function() {
    this.closeParams.token = this.openParams.token;
    this.closeParams.url = this.openParams.url;
    this.closeParams.referUrl = this.openParams.referUrl;
    let time = new Date().getTime() - this.beginTime;
    this.closeParams.elapsedTime = time.toString();
    countClose(this.closeParams);
  }

  補充一下:最終我把統計代碼經過prototype擴展到vue中,寫成形如url

  Vue.prototype.countClose = function (params, _this){

    ``` ```

  }

的樣子,在須要統計的頁面直接經過this.countClose(params, this)來很是方便的完成統計

  好吧,週六愉快的加班過去了,看看天氣預報,週日更熱。因此...博客園見吧!

相關文章
相關標籤/搜索