参考
https://my.oschina.net/senit/blog/743163
和本地localstorage置换时间的验证码计时器
拆除jquery做到不依赖第三方库
for example
在react中使用
const codeTimer = function (el:HTMLElement, wait:number) {
this.el = el
this.wait = wait
this.load = () => {
//获取缓存中的值
let timers = this.getLocalDelay();
if (timers.lastname == null || timers.lastname == 0) {
this.el.innerHTML = '获取验证码'
this.wait = wait
return;
}
if (timers.lastname > 0) {
this.el.style.color = 'gray'
}
this.el.innerHTML = "剩余(" + timers.lastname + ")秒"
let timer = setInterval( () => {
if (timers.lastname > 0) {
timers.lastname--;
this.el.style.color = 'gray'
this.el.innerHTML = "剩余(" + timers.lastname + ")秒"
this.setLocalDelay(timers.lastname);
} else {
clearInterval(timer);
this.el.style.color = 'orange'
this.el.innerHTML = '获取验证码'
this.wait = wait
}
}, 1000);
}
this.time = () => {
this.setLocalDelay(this.wait);
if (this.wait == 0) {
this.el.style.color = 'orange'
this.el.innerHTML = '获取验证码'
this.wait = wait
this.setLocalDelay(this.wait);
} else {
let timer = setInterval( () => {
console.log(el);
if (this.wait > 0) {
this.wait--;
this.el.style.color = 'gray'
this.el.innerHTML = "剩余(" + this.wait + ")秒"
this.setLocalDelay(this.wait);
} else {
clearInterval(timer);
this.el.style.color = 'orange'
this.el.innerHTML = '获取验证码'
this.wait = wait
}
}, 1000);
}
}
this.setLocalDelay = (time) => {
//location.href作为页面的唯一标识,可能一个项目中会有很多页面需要获取验证码。
localStorage.setItem("lastname" + location.href, time);
}
this.getLocalDelay = () => {
const LocalDelay: any = {};
LocalDelay.lastname = localStorage.getItem("lastname" + location.href);
return LocalDelay;
}
}
// 使用
let mCodeTimer
export default class Login extends Component<LoginProps> {
componentDidMount() {
const btn = document.querySelector('#get_verify_code_btn') as HTMLElement
mCodeTimer = new codeTimer(btn, 10)
mCodeTimer.load()
}
render() {
<span onClick={() => {
mCodeTimer.time()
}}
id="get_verify_code_btn">
获取验证码
</span>
}
}