无法理解处理mouseevent的代码

时间:2020-05-17 20:43:55

标签: javascript

我对JavaScript比较陌生,无法理解state = { email: '', password: '', userName: '', errorMessage: null } handleSignUp = () => { firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password).then((userInfo) =>{ userInfo.user.updateProfile({displayName: this.state.userName}).then(firebase.auth().currentUser.reload()).then((s) => {this.props.navigation.navigate('Navigator')}) }) .catch(error => this.setState({ errorMessage: error.message })) } 书中的代码。它用于触发鼠标移动,频率不超过500毫秒,但我不明白这里的作用是什么。

Eloquent Javascript

2 个答案:

答案 0 :(得分:1)

第一次启动代码时,scheduled的值为空,并且在触发事件时,它将进入if条件,并等待500 ms,同时,函数将scheduled设置为某个值。 500ms等待时间结束后,它将再次将scheduled设置为null

因此,每次将scheduled设置为null时都会发生。当事情开始发生时,它scheduled变成了某种价值,或者没有其他事情发生。

不要混淆。 假设,mousemove事件在1秒钟内触发了100次。因此,在激发第一个mouseevent时,如果系统已经scheduled,我们要求系统不执行任何操作。并使用上面的代码,我们知道对于scheduled,一切仍然500ms。这样,mousemove事件仍将执行100次,但是mousemove事件执行的代码将在一秒钟内执行两次,而不是100次。

答案 1 :(得分:1)

您不必将值保留为“ null”。它也可以是基于逻辑的任何其他类型(例如布尔值)。请参阅以下带有布尔值的示例-

let scheduled = false;
window.addEventListener("mousemove", event => {
    if (!scheduled) {//*if not scheduled
        setTimeout(() => {
           document.body.textContent =
           `Mouse at ${event.pageX}, ${event.pageY}`;
           scheduled = false;
           console.log("Counter restarting")
        }, 3000);
    }

    scheduled = true;
});

首先,当程序启动时,“ scheduled”标志设置为false-表示3秒钟内没有设置当前超时。因此,我们先设置超时,然后将“预定标志”设置为true。一旦达到超时,将打印当前鼠标位置,并将“已计划”标志设置为false,然后重复该过程。