我试图用vue.js制作一个计时器,但我遇到了一些问题。这是我的mtehods部分:两个问题:this.myMethod不是一个函数 - addEventListner添加的点击事件在用户点击时运行多于20次
methods: {
saveRunningMethod() {
var runningData = {
duration: `${this.hour} : ${this.minute} : ${this.second}`,
username: this.$store.state.user.username
}
this.$store.dispatch('saveRunning' , runningData)
console.log(runningData);
},
startTimer(){
this.isTimerStart = true;
var timer = window.setInterval(() => {
var e = document.getElementById("stopBtn")
e.addEventListener("click", function(){
clearInterval(timer)
this.isTimerStart = false;
console.log("lets Save it")
this.saveRunningMethod()
});
if(this.mSecond < 9)
this.mSecond +=1
else
this.mSecond=0
if(this.mSecond==9)
this.second +=1
if(this.second>59)
this.second=0
if(this.second==59)
this.minute +=1
if(this.minute>59)
this.minute = 0
if(this.minute==59)
this.hour +=1
},100);
}
}
在这里,我e.addEventListener("click", function(){
会停止计时器,当我点击我的停止按钮,但似乎这个方法运行多时间,因为你在这张图片上看到的,我的console.log运行33次!这是为什么?
我的其他问题,是关于这一行:this.saveRunningMethod()
我跑我startTimer()
方法中这种方法,但我得到"this.saveRunningMethod() is not a function"
错误!
最后,你可以看到我用setInterval
来制作一个计时器,如果你知道一个更好的解决方案,我会非常感激。
UPDATE:我补充我的html部分
<div class="row p-2 m-3 mt-3">
<div class="col-12 p-0 animated fadeInUp mt-3">
<p class="text-center">Your last record was : 00:00:00</p>
</div>
<div class="col-12 p-0 animated fadeInUp mt-3">
<h1 class="text-center timer">
{{this.hour}}:{{this.minute}}:{{second}}:{{mSecond}}
</h1>
</div>
</div>
<div class="row p-2 mt-3" v-bind:class="[this.isTimerStart==false ? 'show' : 'hide']">
<div class="col-12 p-0 animated tada text-center">
<button class="btn-link timerImg" @click="startTimer()">
<img class="img-fluid timerImg" src="../../static/timerStart.png" />
<p>Start</p>
</button>
</div>
</div>
<div class="row p-2 mt-3" v-bind:class="[this.isTimerStart ? 'show' : 'hide']">
<div class="col-12 p-0 animated tada text-center">
<button id="stopBtn" class="btn-link timerImg">
<img class="img-fluid timerImg" src="../../static/timerStop.png" />
<p>Stop</p>
</button>
</div>
</div>
谢谢。
从你的代码是不明确的,为什么是定时器运行的多发时期。编辑问题并添加HTML部分。 – WaldemarIce
@WaldemarIce我的html部分只是一个显示计时器和两个按钮的div,我更新了问题并添加了它。谢谢。 –
请一次提出一个问题。 https://stackoverflow.com/help/how-to-ask – Rob