1. 程式人生 > >前端簡單實現校招筆試'作弊監聽'功能

前端簡單實現校招筆試'作弊監聽'功能

end 樂視 系統 hidden 清除 sel 不可見 thead 可見

一、 監聽你的頁面活動

最近校招筆試如火如荼地開展。各種小心思都浮上來了:"我就查一道".小心翼翼按了一下tab切換(mac用三爪),Document.visibilityState開始工作了."監測到你切換頁面,超過xx次將影響你的成績(希望你自重)"

二、 visibilityState

描述
visible 此時頁面內容至少是部分可見. 即此頁面在前景標簽頁中,並且窗口沒有最小化.
hidden 此時頁面對用戶不可見. 即文檔處於背景標簽頁或者窗口處於最小化狀態,或者操作系統正處於 ‘鎖屏狀態‘ .
prerender 頁面此時正在渲染中, 文檔只能從此狀態開始,永遠不能從其他值變為此狀態.
unloaded 頁面從內存中卸載清除

當此屬性的值改變時, 會遞交 visibilitychange 事件給Document.

三、visibilitychange用法

當頁面離開的時候,visibilityState值也會相應改變,只需要在監聽事件上做判斷即可
實現‘作弊監聽‘功能,監聽用戶離開頁面的時間和次數

<script>
    let leaveTime;
    let inTime;
    let num = 0;
    document.addEventListener(‘visibilitychange‘,function(e){
        console.log(document.visibilityState);

        let state = document.visibilityState
        if(state == ‘hidden‘){
            leaveTime = (new Date()).getTime();
            num++;
        }
        if(state == ‘visible‘){
            inTime = (new Date()).getTime();
            let time = (Number(inTime) - Number(leaveTime))/1000;
            
            alert(‘用戶離開了:‘ + time + ‘s‘ + ‘\n‘ + ‘用戶離開了:‘ + num + ‘次‘)
        }

        
    })
</script>

效果圖:
技術分享圖片

解析一下步驟:

  1. 首先定義幾個全局變量,不用全局變量的話每次監聽更改的時候,未賦值的值會報underfine。

    leaveTime:用戶離開頁面的時間. 用getTime()獲取毫秒
    inTime:用戶進入頁面的時間.
    num:記錄用戶離開次數

  2. 通過不同的參數執行不同的操作

    state為hidden的時候表示離開頁面,記錄離開時間,並且記錄次數
    state為visible的時候表示回來頁面,記錄回來時間,返回時間差和次數

一個簡單的監聽離開事件就完成啦!

四、利用visibilityState實現離開頁面暫停播放音樂(視頻)功能

<body>
    <video style="width:600px" controls>
        <source src="tvb.mp4" type="video/mp4">
        瀏覽器不支持 video 標簽。
    </video>
    <script>
        document.addEventListener(‘visibilitychange‘,function(e){
            let state = document.visibilityState;
            if(state == ‘hidden‘){
                document.querySelector(‘video‘).pause();
            }
            
        })
    </script>
</body>

效果:

  1. 打開頁面 播放視頻
    技術分享圖片

  2. 切換頁面(mac三爪滑過)
    技術分享圖片

前端簡單實現校招筆試'作弊監聽'功能