js 禁止来自 运行 的函数 |立即暂停
js forbid functions from running | give it a timeout without first delay
我对这个真的很困惑。所以我想在悬停时添加一个 class 到带有一些 css 垃圾的元素,并在鼠标移开时将其删除。但我想在 css 过渡期间禁止添加和删除功能。例如,我有 1s 转换,我想 运行 在悬停时添加功能,并且在接下来的 1 秒内无法调用 add/remove 功能。我该怎么做?
<div class="registration" onmouseover="addReg()" onmouseout="removeReg()">
const registration=document.querySelector('.registration');
const registrationInner=document.querySelector('.registration-inner');
function addReg(){
registration.classList.add('registration-hover');
registrationInner.classList.add('inner-hover');
}
function removeReg(){
registration.classList.remove('registration-hover');
registrationInner.classList.remove('inner-hover');
}
换句话说,我正在尝试进行悬停 css 过渡,但在 运行 时不能 interruped/stopped/reset。这就是为什么我尝试使用添加 class 方法而不是仅仅使用 :hover.
的原因
将 setTimeout 添加到函数调用没有帮助,因为它不会阻止其他函数启动,反之亦然。
如果我添加 async
并创建一个 await sleep
函数
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
同样的问题。例如,我只能暂停添加功能。但是我暂停添加功能并没有阻止触发删除功能。
但同时我有点不在乎删除延迟,所以我选择了这个版本
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
registration=document.querySelector('.registration');
registrationInner=document.querySelector('.registration-inner');
async function addReg(){
registration.classList.add('registration-hover');
registrationInner.classList.add('inner-hover');
await sleep(350);
}
async function removeReg(){
await sleep(350);
registration.classList.remove('registration-hover');
registrationInner.classList.remove('inner-hover');
}
我的转换是 0.3 秒,所以我有更大的超时延迟,我确实在 mouseOut 上设置了额外的转换延迟以防止意外错误,所以我不介意删除功能的延迟。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
registration=document.querySelector('.registration');
registrationInner=document.querySelector('.registration-inner');
async function addReg(){
registration.classList.add('registration-hover');
registrationInner.classList.add('inner-hover');
await sleep(300);
}
async function removeReg(){
await sleep(400);
registration.classList.remove('registration-hover');
registrationInner.classList.remove('inner-hover');
}
我对这个真的很困惑。所以我想在悬停时添加一个 class 到带有一些 css 垃圾的元素,并在鼠标移开时将其删除。但我想在 css 过渡期间禁止添加和删除功能。例如,我有 1s 转换,我想 运行 在悬停时添加功能,并且在接下来的 1 秒内无法调用 add/remove 功能。我该怎么做?
<div class="registration" onmouseover="addReg()" onmouseout="removeReg()">
const registration=document.querySelector('.registration');
const registrationInner=document.querySelector('.registration-inner');
function addReg(){
registration.classList.add('registration-hover');
registrationInner.classList.add('inner-hover');
}
function removeReg(){
registration.classList.remove('registration-hover');
registrationInner.classList.remove('inner-hover');
}
换句话说,我正在尝试进行悬停 css 过渡,但在 运行 时不能 interruped/stopped/reset。这就是为什么我尝试使用添加 class 方法而不是仅仅使用 :hover.
的原因将 setTimeout 添加到函数调用没有帮助,因为它不会阻止其他函数启动,反之亦然。
如果我添加 async
并创建一个 await sleep
函数
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
同样的问题。例如,我只能暂停添加功能。但是我暂停添加功能并没有阻止触发删除功能。
但同时我有点不在乎删除延迟,所以我选择了这个版本
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
registration=document.querySelector('.registration');
registrationInner=document.querySelector('.registration-inner');
async function addReg(){
registration.classList.add('registration-hover');
registrationInner.classList.add('inner-hover');
await sleep(350);
}
async function removeReg(){
await sleep(350);
registration.classList.remove('registration-hover');
registrationInner.classList.remove('inner-hover');
}
我的转换是 0.3 秒,所以我有更大的超时延迟,我确实在 mouseOut 上设置了额外的转换延迟以防止意外错误,所以我不介意删除功能的延迟。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
registration=document.querySelector('.registration');
registrationInner=document.querySelector('.registration-inner');
async function addReg(){
registration.classList.add('registration-hover');
registrationInner.classList.add('inner-hover');
await sleep(300);
}
async function removeReg(){
await sleep(400);
registration.classList.remove('registration-hover');
registrationInner.classList.remove('inner-hover');
}