Javascript Typescript类引发事件
我正在尝试在typescript中创建一个倒计时js组件,并具有以下功能 我想在每一个刻度上提出一个事件,剩余的倒计时 如果重要的话,我会使用VS2017Javascript Typescript类引发事件,javascript,typescript,Javascript,Typescript,我正在尝试在typescript中创建一个倒计时js组件,并具有以下功能 我想在每一个刻度上提出一个事件,剩余的倒计时 如果重要的话,我会使用VS2017 export class DateCountDown { constructor(date: any) { this.startCountDown(date); } startCountDown(date: any) { const thousand = 1000; con
export class DateCountDown {
constructor(date: any) {
this.startCountDown(date);
}
startCountDown(date: any) {
const thousand = 1000;
const sixty = 60;
const twentyfour = 24;
setInterval(() => {
const now = new Date().getTime();
const t = date - now;
const days = Math.floor(t / (thousand * sixty * sixty * twentyfour));
const hours = Math.floor((t % (thousand * sixty * sixty * twentyfour)) / (thousand * sixty * sixty));
const minutes = Math.floor((t % (thousand * sixty * sixty)) / (thousand * sixty));
const seconds = Math.floor((t % (thousand * sixty)) / thousand);
//Raise the event with above values
}, 1000);
}
}
如果在一个事件中提升多个值并不理想,那么我创建了一个类来存储该值,然后提升该值
export class CountDownValues {
daysLeft: number;
hoursLeft: number;
minutesLeft: number;
secondsLeft: number;
constructor(days: number, hours: number, minutes: number, seconds: number) {
this.daysLeft = days;
this.hoursLeft = hours;
this.minutesLeft = minutes;
this.secondsLeft = seconds;
}
public get days(): number {
return this.daysLeft;
}
public get hours(): number {
return this.hoursLeft;
}
public get minutes(): number {
return this.minutesLeft;
}
public get seconds(): number {
return this.secondsLeft;
}
}
我只是想创建一个基本的js库/组件,我给它一个日期,每秒钟它都会引发一个剩余时间的事件,从那里我可以为相应的元素分配不同的天、小时、分钟和秒值。如果你已经理解了你的问题,你想发出一个事件,有很多方法可以做到这一点。。。您可以使用第三方事件发射器或自己创建基本事件发射器。。。你也可以做一些类似于事件发射器的东西,像这样
class CountDownValues {
daysLeft: number;
hoursLeft: number;
minutesLeft: number;
secondsLeft: number;
constructor(days: number, hours: number, minutes: number, seconds: number) {
this.daysLeft = days;
this.hoursLeft = hours;
this.minutesLeft = minutes;
this.secondsLeft = seconds;
}
public get days(): number {
return this.daysLeft;
}
public get hours(): number {
return this.hoursLeft;
}
public get minutes(): number {
return this.minutesLeft;
}
public get seconds(): number {
return this.secondsLeft;
}
}
class DateCountDown {
onCountDown: (values: CountDownValues) => void;
constructor(date: Date) {
this.startCountDown(date);
this.onCountDown = () => {};
}
startCountDown(date: Date) {
const thousand = 1000;
const sixty = 60;
const twentyfour = 24;
setInterval(() => {
const now = new Date().getTime();
const t = date.valueOf() - now;
const days = Math.floor(t / (thousand * sixty * sixty * twentyfour));
const hours = Math.floor((t % (thousand * sixty * sixty * twentyfour)) / (thousand * sixty * sixty));
const minutes = Math.floor((t % (thousand * sixty * sixty)) / (thousand * sixty));
const seconds = Math.floor((t % (thousand * sixty)) / thousand);
if (this.onCountDown) {
this.onCountDown(new CountDownValues(days, hours, minutes, seconds))
}
}, 1000);
}
}
let countDown = new DateCountDown(new Date());
countDown.onCountDown = values => console.log(values);
下面是一个演示:
OP:为什么我更喜欢第三方而不是这个
countDown.onCountDown=x=>console.log(“从第一个开始”,x);countDown.onCountDown=x=>console.log(“从第二秒开始”,x)代码>不起作用。。。当“从第二个”覆盖第一个时,您将只看到“从第二个”。实际上它甚至不是一个事件发射器。。。这有点像是伪装的回调countDown.on(“countDown”,x=>console.log(x))
是一个事件发射器,因为它注册侦听器而不是重写
foo.on(“bar”,x=>console.log(x))
或foo.addEventListener(“bar”,x=>console.log(x))
然而,如果你正在制作你自己的小东西,而只有你在制作或将要使用它,那么使用它应该没有问题。。。然而,为了克服第一个原因,您仍然可以实现一些简单的功能,如您遇到的问题是什么?我不知道如何从我的类中引发事件这正是我想要的,一个带有事件发射器的类,因此这非常完美,谢谢。我为什么更喜欢第三方而不是这个?@Zoinky不客气我已经在帖子中回答了你的问题,因为它有点长,很酷,比如说我想做.on(“bar”)在你的第二个例子中我需要做什么改变?抱歉所有的问题,没有做太多的js方面的筹款活动等。我添加了第二个事件,当计时器启动时引发,您可以执行以下操作。。。这是非常安全的类型,但我建议使用类似库的东西