Vue3操作页面长时间未操作返回首页

Vue3长时间操作页面无操作返回首页

1.1需求分析

1.长时间 --- 定时器

2.无操作 ---- 监控页面上的点击,触摸,滑动等事件

3.返回首页 ------ 切换路由

1.2思路

只需要设置一个定时器,在进入页面时开始计时,如果规定时间内有操作,则会重新计时,时间一到自动切换路由

1.3代码演示

首页使用element-ui的轮播组件,可参考文档安装使用
官方地址:https://element-plus.gitee.io/zh-CN/guide/quickstart.html
index.vue
<template>
    <div class="home" @click="goTo">
        <div>
            <el-carousel :interval="4000" type="card" height="80vh">
                <el-carousel-item v-for="item in 6" :key="item">
                </el-carousel-item>
            </el-carousel>
        </div>
        <div class="title">
            点击任意区域跳转
        </div>
    </div>
</template>

<script>
import { reactive, toRefs } from 'vue'
import router from '@/router'

export default {
    setup () {
        const goTo =()=>{
            router.push('/home')  //点击此页面任何区域跳转操作页面
        }
        return{
            goTo
        }
    }
}
</script>

<style lang="stylus" scoped>
.home
    height 100vh
    background-color #aaa
    .el-carousel__item:nth-child(2n) 
        background-color: #99a9bf   
    .el-carousel__item:nth-child(2n + 1) 
        background-color: #d3dce6
    .title
        text-align: center
        font-size: 30px
        color: red
        font-weight: 700
</style>
home.vue
<template>
    <div>
        我是home页面
        <button @click="go">跳转my</button>
    </div>
</template>

<script>
import { nextTick, onMounted, onUnmounted, reactive, ref, toRefs, watch } from 'vue'
import router from '@/router'
import { useRoute } from 'vue-router'

export default {
    setup () {
        onMounted(() => {
            console.log("我又重新获取时间啦");
            sessionStorage.setItem("lastClickTime",new Date().getTime()) //跳转页面后返回此页面要重新计时
            isTimeOut()
        })
        let timer = null //定时器
        let route = useRoute()
        //计算时间差
        const timeDifference =(lastTime,nowTime)=>{
            var date1= lastTime;  //开始时间
            var date2 = nowTime;    //结束时间
            var date3 = date2- date1;   //时间差的毫秒数 
            //计算出相差天数
            var days=Math.floor(date3/(24*3600*1000))
            //计算出小时数
            var leave1=date3%(24*3600*1000)    //计算天数后剩余的毫秒数
            var hours=Math.floor(leave1/(3600*1000))
            //计算相差分钟数
            var leave2=leave1%(3600*1000)        //计算小时数后剩余的毫秒数
            var minutes=Math.floor(leave2/(60*1000))
            //计算相差秒数
            var leave3=leave2%(60*1000)      //计算分钟数后剩余的毫秒数
            var seconds=Math.round(leave3/1000)
            return seconds //将相差的秒数抛出做对比(可根据实际情况抛出自己实际需要的时间差单位)
        }
        //获取第一次点击的时间
        window.addEventListener("click",()=>{
            sessionStorage.setItem("lastClickTime",new Date().getTime()) //存入临时缓存区
        },true)
        const isTimeOut=()=>{
            clearInterval(timer)//每次使用定时器之前都要清空一次
            //每1秒循环检查一次时间差
            timer=window.setInterval(()=>{
                let lastTime = sessionStorage.getItem("lastClickTime") //第一次点击时间
                let currentTime = new Date().getTime() //当前时间
                console.log("当前点击时间和现在点击时间",lastTime,currentTime,timeDifference(lastTime,currentTime));
                //如果当前时间减去第一次的时间超过规定时间之后,跳转回指示页面并清空定时器
                if(timeDifference(lastTime,currentTime) >10){
                    if(route.path != '/'){
                        clearInterval(timer)
                        router.push('/')
                    }
                }
            },1000)
        }
        const go =()=>{
            router.push('/my') //跳转另一个操作页面
        }
        onUnmounted(()=>{
            clearInterval(timer) //组件销毁之后清楚定时器
            window.removeEventListener("click",()=>{},true) //清楚点击时存储的时间
        })
        return{
            go
        }
    }
}
</script>

<style lang="scss" scoped>
</style>
my.vue
<template>
    <div>
        My页面
    </div>
</template>

<script>
import { reactive, toRefs,onMounted } from 'vue'
import router from '@/router';

export default {
    setup () {
        onMounted(() => {
            setTimeout(() => {
                router.push('/home') //定时5秒返回home界面
            }, 5000);
        })
    }
}
</script>

<style lang="scss" scoped>

</style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值