uniapp vue2 时钟 循环定时器

效果展示:

时钟

写在前面:vue2有this指向,没有箭头函数

实验操作:封装一个时钟组件

uniapp vue2 封装一个时钟组件

核心代码:

this指向的错误代码,在下:

start() {

this.myTimer = setInterval(function () {

this.handleReTimer();//通过this调用,失败。

}, 1000);

},

时钟组件代码:

html 复制代码
<template>
  <view class="myTimer_home">
    <view class="timerTitleBox">同步时间:</view>
    <view class="timerDateBox">{{ timerDate }}</view>
    <view class="timerTimeBox">{{ timerTime }}</view>
    <view class="timerRefreshImgBox" @click="handleReTimer">
      <image
        src="@/static/images/smartCabin/titleNav/refresh_icon.png"
        alt="一张图"
      />
    </view>
  </view>
</template>
<script>
import { getNowFormatDate, getNowData } from "@/utils";
//获取当前日期
function getNowFormatDate() {
  let date = new Date(),
    year = date.getFullYear(), //获取完整的年份(4位)
    month = date.getMonth() + 1, //获取当前月份(0-11,0代表1月)
    strDate = date.getDate(); // 获取当前日(1-31)
  if (month < 10) month = `0${month}`; // 如果月份是个位数,在前面补0
  if (strDate < 10) strDate = `0${strDate}`; // 如果日是个位数,在前面补0
  return `${year}-${month}-${strDate}`;
}
//获取当前时间
function getNowData() {
  var a = new Date();
  var b = a.getHours();
  var c = a.getMinutes();
  var d = a.getSeconds();
  function check(val) {
    if (val < 10) {
      return "0" + val;
    } else {
      return val;
    }
  }
  return check(b) + ":" + check(c) + ":" + check(d);
}
export default {
  data() {
    return {
      myTimer: null,
      timerDate: "",
      timerTime: "",
    };
  },
  methods: {
    handleReTimer() {
      this.timerDate = getNowFormatDate();
      this.timerTime = getNowData();
    },
    start() {
      this.myTimer = setInterval(this.handleReTimer, 1000);
    },
  },
  created() {
    this.start();
    this.handleReTimer();
  },
  destroyed() {
    clearInterval(this.myTimer);
  },
};
</script>
<style lang="scss" scoped>
.myTimer_home {
  width: 94%;
  height: 100%;
  font-size: 32rpx;
  display: flex;
  align-items: center;

  .timerDateBox {
    margin-right: 10px;
  }

  .timerRefreshImgBox {
    margin-left: 10px;
    display: flex;
    justify-content: center;
    align-items: center;

    &:hover {
      cursor: pointer;
    }

    image {
      width: 40rpx;
      height: 40rpx;
    }
  }
}
</style>

时钟组件(Vue3)

封装组件代码:

html 复制代码
<script setup>
import { useUserStore } from "@/stores";
const store = useUserStore();
import { getNowFormatDate, getNowData } from "@/utils/replaceTime.js";
import { computed, onMounted, onUnmounted, reactive, watch } from "vue";
import { getAssetsFile, numToStriTime } from "@/utils";

onMounted(() => {
  data.timerDate = getNowFormatDate();
  data.timerTime = getNowData();
});
const myTimer = setInterval(() => {
  data.timerTime = getNowData();
}, 60000);
onUnmounted(() => {
  clearInterval(myTimer);
});
const data = reactive({
  timerDate: "",
  timerTime: "",
});
const handleReTimer = () => {
  data.timerDate = getNowFormatDate();
  data.timerTime = getNowData();
};
</script>

<template>
  <div class="myTimer_bome">
    <div class="timerTitleBox">同步时间:</div>
    <div class="timerDateBox">{{ data.timerDate }}</div>
    <div class="timerTimeBox">{{ data.timerTime }}</div>
    <div class="timerRefreshImgBox" @click="handleReTimer">
      <img
        :src="getAssetsFile('smartCabin/titleNav/refresh_icon.png')"
        alt="一张图"
      />
    </div>
  </div>
</template>

<style lang="less" scoped>
.myTimer_bome {
  width: 100%;
  height: 100%;
  font-size: calc(100vw * 18 / 1920);
  color: rgba(74, 79, 87, 1);
  display: flex;
  align-items: center;

  .timerDateBox {
    margin-right: 10px;
  }

  .timerRefreshImgBox {
    margin-left: 10px;
    display: flex;
    justify-content: center;
    align-items: center;
    &:hover {
      cursor: pointer;
    }

    img {
      width: 20px;
      height: 20px;
    }
  }
}
</style>
相关推荐
星栈独行24 分钟前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
落落Plus1 小时前
浏览器缓存机制详解
javascript·缓存·浏览器缓存
浅水壁虎4 小时前
vue基础(第二章 )
前端·javascript·vue.js
界面开发小八哥4 小时前
界面控件DevExtreme v26.1新版亮点——支持Angular 22
前端·javascript·angular.js·devexpress·ui开发·devextreme
mONESY5 小时前
React useState 核心原理与最佳实践:从异步更新到性能优化全解
javascript
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程
gis开发之家6 小时前
《Vue3 从入门到大神37篇》Vue3 源码详解(七):watch 与 watchEffect 源码对比——副作用是如何被追踪的?
javascript·前端框架·vue3·vue3源码
bloglin999997 小时前
langchain 和 langgraph 和 react
javascript·react.js·langchain
触底反弹7 小时前
🚀 删了数据刷新又回来?3 组件 × 4 回调 × 3 坑讲透 React 父子通信
前端·javascript·react.js
会周易的程序员9 小时前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm