2024-06-13 前端判斷30分鐘未操作頁(yè)面退出到登錄

一般前端是否退出到登錄都是根據(jù)接口返回是否為401拱烁,即token失效噩翠。
但是現(xiàn)在有一個(gè)需求是用戶三十分鐘未操作頁(yè)面就退出到登錄,此時(shí)token并未失效擅笔,因?yàn)榻缑嬷杏泻芏嗟妮喸儯跊]有操作頁(yè)面的情況下念脯,接口仍在訪問(wèn)弯淘,導(dǎo)致token續(xù)期,所以此時(shí)通過(guò)判斷是否401狀態(tài)就不可行了假勿。
那么态鳖,前端如何判斷用戶是否在三十分鐘內(nèi)均未操作界面呢?
這就需要用到mousemove和mousewheel事件了浆竭。
mousemove:鼠標(biāo)移動(dòng)事件
mousewheel:鼠標(biāo)滾動(dòng)事件
通過(guò)監(jiān)聽這兩種事件即可判斷用戶是否有操作頁(yè)面
App.vue

<template>
  <el-config-provider :locale="locale">
    <router-view />
  </el-config-provider>
</template>
<script setup lang="ts">
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import en from 'element-plus/dist/locale/en.mjs'
import { useConfigStore } from '@/stores/config'
import { computed, onUnmounted } from 'vue'

const store = useConfigStore()
const locale = computed(() => {
  if (store.lang === 'en') return en
  else {
    return zhCn
  }
})
store.timeOutValue = 30 * 60 * 1000
const handleEvent = () => {
  // 判斷是否超過(guò)30分鐘未操作界面
  store.changeLastTime()
}
// 創(chuàng)建定時(shí)器兆蕉,主動(dòng)判斷
const timer = setInterval(() => {
  store.isTimeOut()
}, 5000)

const body = document.querySelector('html')
// 鼠標(biāo)移動(dòng)
body?.addEventListener('mousemove', handleEvent)
// 鼠標(biāo)滾動(dòng)事件
body?.addEventListener('mousewheel', handleEvent)
onUnmounted(() => {
  body?.removeEventListener('mousemove', handleEvent)
  body?.removeEventListener('mousewheel', handleEvent)
  clearInterval(timer)
})
</script>

stores/config

import { colorHextoRGB } from '@/utils/util'
import { defineStore } from 'pinia'
import router from '@/router'
export const useConfigStore = defineStore('config', {
  state: () => {
    return {
      lastTime: 0, // 上一次點(diǎn)擊的時(shí)間
      timeOutValue: 30 * 60 * 1000 // 設(shè)置超時(shí)時(shí)間:30分鐘 30 * 60 * 1000
    }
  },
  getters: {},
  actions: {
    changeLastTime () {
      this.lastTime = new Date().getTime()
    },
    // 判斷是否大于30分鐘
    isTimeOut () {
      const currentTime = new Date().getTime() // 記錄當(dāng)前時(shí)間
      if (currentTime - this.lastTime > this.timeOutValue) { // 上次最后一次點(diǎn)擊的時(shí)間和當(dāng)前時(shí)間間隔大于30分鐘(指定的時(shí)間)
        if (JSON.parse(localStorage.getItem('user') ?? '{}')?.userInfo?.token) { // 如果是登錄狀態(tài)
          ElMessage.error('長(zhǎng)時(shí)間未操作頁(yè)面虎韵,請(qǐng)重新登錄')
          setTimeout(() => {
            router.push('/login')
          }, 3000)
        }
      }
    }
  },
  persist: true
})

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末包蓝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子测萎,更是在濱河造成了極大的恐慌,老刑警劉巖份乒,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件或辖,死亡現(xiàn)場(chǎng)離奇詭異枣接,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)但惶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)煌集,“玉大人捌省,你說(shuō)我怎么就攤上這事「倩海” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵栗弟,是天一觀的道長(zhǎng)工闺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)雷厂,這世上最難降的妖魔是什么叠殷? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任林束,我火速辦了婚禮,結(jié)果婚禮上壶冒,老公的妹妹穿的比我還像新娘。我一直安慰自己烟零,他們只是感情好胸嘁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布凉逛。 她就那樣靜靜地躺著状飞,像睡著了一般毫胜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荐吉,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天样屠,我揣著相機(jī)與錄音缺脉,去河邊找鬼。 笑死攻礼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的知举。 我是一名探鬼主播太伊,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遮糖!你這毒婦竟也來(lái)了叠赐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赛不,失蹤者是張志新(化名)和其女友劉穎罢洲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殿较,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桩蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年院究,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了本涕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伙窃。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晦闰,靈堂內(nèi)的尸體忽然破棺而出鳍怨,到底是詐尸還是另有隱情,我是刑警寧澤京景,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布确徙,位于F島的核電站,受9級(jí)特大地震影響鄙皇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缠沈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一错蝴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柬赐,春花似錦官紫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春馅精,著一層夾襖步出監(jiān)牢的瞬間粱檀,已是汗流浹背漫玄。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渗常,地道東北人汗盘。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像隐孽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踢俄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • HTML和CSS H5的新特性 語(yǔ)義化標(biāo)簽header都办,頭部標(biāo)簽footer虑稼,尾部標(biāo)簽article,文章主體標(biāo)簽...
    h2coder閱讀 188評(píng)論 0 1
  • jquery介紹 jQuery是目前使用最廣泛的javascript函數(shù)庫(kù) 據(jù)統(tǒng)計(jì)槽卫,全世界排名前100萬(wàn)的網(wǎng)站胰蝠,有...
    就是這么帥_567e閱讀 1,090評(píng)論 0 0
  • 簡(jiǎn)介 ECMAScript是JavaScript的標(biāo)準(zhǔn),JavaScript實(shí)現(xiàn)了ECMAScript茸塞,ECMAS...
    Zindex閱讀 383評(píng)論 0 1
  • ??JavaScript 與 HTML 之間的交互是通過(guò)事件實(shí)現(xiàn)的效扫。 ??事件直砂,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,473評(píng)論 1 11
  • 瀏覽器的渲染過(guò)程 在我們面試過(guò)程中静暂,經(jīng)常會(huì)遇到面試官問(wèn)我們谱秽,當(dāng)我們從瀏覽器地址欄輸入U(xiǎn)RL之后到頁(yè)面顯示洽蛀,瀏覽器到...
    達(dá)文西_Huong閱讀 840評(píng)論 0 0