vue3按钮点击频率控制

现有一个按钮,如下图

在这里插入图片描述
点击时

在这里插入图片描述
再次点击

在这里插入图片描述
刷新窗口再次点击

在这里插入图片描述
刷新窗口依然可以实现点击频率控制。

代码实现:

<template>
  <!--<el-config-provider :locale="locale">
    <router-view/>
  </el-config-provider>-->
  <el-button type="primary" @click="handleClick">click</el-button>
</template>

<script setup lang="ts">
  // @ts-ignore
  import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
  import {
      reactive } from 'vue'
  import {
      ElMessage } from 'element-plus'

  // 国际化配置
  const locale = reactive(zhCn)

  const handleClick = () => {
     
    // 间隔为30s
    const delay = 30000
    const key = 'ls_handle_click'
    let cache = getExpiredItem(key)
    if (cache <= 0) {
     
      setExpiredItem(key, Date.now(), delay)
    } else {
     
      const now = Date.now()
      const diff = delay / 1000 - (now - cache) / 1000
      ElMessage({
     
        showClose: true,
        message: `点击过于频繁,请${ Math.floor(diff)}秒后尝试!`,
        type: 'warning',
      })
      return
    }
    // 执行按钮功能(处理业务逻辑)
    handleAlert()
  }
  // 封装可以设置过期时间的localStorage
  const setExpiredItem = (key, value, expires) => {
     
    const data = {
     
      value: value,
      expires: Date.now() + expires
    }
    window.localStorage.setItem(key, JSON.stringify(data))
  }

  // 封装获取有过期时间的localStorage(我们规定如果key到期则返回-1,如果没有这个key就返回0)
  const getExpiredItem = (key) => {
     
    const value = window.localStorage.getItem(key)
    if (!value) {
     
      return 0
    }
    const data = JSON.parse(value)
    if (Date.now() > data.expires) {
     
      window.localStorage.removeItem(key)
      return -1
    }
    return data.value
  }

  // 按钮功能
  const handleAlert = () => {
     
    ElMessage({
     
      showClose: true,
      message: 'this is a success message.',
      type: 'success',
    })
  }
</script>

<style scoped lang="scss">

</style>

相关推荐

  1. vue3 防止按钮的连续(连

    2024-01-03 12:22:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 12:22:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 12:22:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 12:22:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 12:22:02       18 阅读

热门阅读

  1. Spark之Dynamic Resource Allocation

    2024-01-03 12:22:02       41 阅读
  2. How to understand Data Mining

    2024-01-03 12:22:02       39 阅读
  3. 成为更好的软件开发人员的几点要求

    2024-01-03 12:22:02       34 阅读
  4. 第十章 软件测试的原则(笔记)

    2024-01-03 12:22:02       34 阅读
  5. RNN文本分类任务实战

    2024-01-03 12:22:02       32 阅读
  6. socket实现web应用的本质

    2024-01-03 12:22:02       32 阅读
  7. 运维工程师的出路

    2024-01-03 12:22:02       35 阅读