暂停和恢复 javascript 中的 setInterval
pause and resume setInterval in javascript
我正在尝试在 JavaScript 中模仿编码主页上的打字效果。我已经实现了打字和删除效果使用 setInterval()。
这是其中的jsfiddle:https://jsfiddle.net/yzfb8zow/
var span=document.getElementById("content");
var strings=["hello world","how r u??"];
var index=0; //get string in the strings array
var chIndex=0; //get char in string
var type=true;
setInterval(function(){
if(index===strings.length)
index=0;
if(type){
typeIt();
}
else
deleteIt();
},200);
// type the string
function typeIt(){
if(chIndex<strings[index].length)
span.innerHTML=strings[index].substring(0,chIndex++);
else
type=false;
}
//delete the string
function deleteIt(){
if(chIndex===0){
index++;
type=true;
}
else
span.innerHTML=strings[index].substring(0,chIndex--);
}
目录
<span id="content"></span>
<span id="cursor">|</span>
CSS
#cursor{
-webkit-animation: 1s blink step-end infinite;
-moz-animation: 1s blink step-end infinite;
animation: 1s blink step-end infinite;
}
@keyframes blink {
from, to {
opacity:0;
}
50% {
opacity: 1;
}
}
@-moz-keyframes blink {
from, to {
opacity:0;
}
50% {
opacity:1;
}
}
@-webkit-keyframes blink {
from, to {
opacity:0;
}
50% {
opacity:1;
}
}
我无法理解的是,如何在字符串更改的开头和结束时暂停 setInterval 函数以获得清晰的闪烁光标。
我查找了其他答案 暂停和恢复 setInterval 和 如何停止 javascript 中的 window.setInterval?但我无法理解如何在这种情况下使用它。
如果您能告诉我如何改进我的代码,那就太好了。
我编辑了你的代码,这里是你的jsfiddle:https://jsfiddle.net/yzfb8zow/5/
还有一点代码解释
var typingFunction = function() {
if (index === strings.length) {
index = 0;
}
if (type) {
typeIt();
} else {
deleteIt();
}
}
我声明了您之前的键入函数,以便以后能够根据需要使用它。
var x = setInterval(typingFunction.bind(typingFunction), 200);
存储了间隔,以便我以后可以清除它 - 存储在全局变量中(不一定可以,还有其他解决方案,但存储它)。
function typeIt() {
if (chIndex == -1) {
chIndex += 1;
clearAndRestartInterval(1000);
return;
}
if (chIndex <= strings[index].length) {
span.innerHTML = strings[index].substring(0, chIndex++);
} else {
clearAndRestartInterval(1000);
type = false;
return;
}
}
在typeIt函数中,我在chIndex = -1开始时清除间隔,请稍等片刻,以便在重新启动间隔之前让光标闪烁。比我在字符串末尾再次清除它。我的chIndex从-1开始,所以我知道什么时候开始眨眼。
代码的其余部分是不言自明的。
随意编辑clearAndRestartInterval函数的参数,以设置开始和结束时闪烁的时间。
function clearAndRestartInterval(timeOfRestart) {
clearInterval(x);
setTimeout(function() {
x = setInterval(typingFunction.bind(typingFunction), 200);
}, timeOfRestart);
}
最后但并非最不重要的是间隔的停止和重新启动功能。这很简单,x - 是之前声明的 setInterval - 全局我清除并重置了一段时间的新间隔。
希望这有帮助。
干杯
您必须使用嵌套超时。
- 直接调用
typeIt
,因为这是默认操作。 - 在 typeIt 中,添加一个 setTimeout,它将在完成时调用
deleteIt
。 - 删除完成后,再次调用
typeIt
。
样品小提琴
你输入它将看起来像这样:
function typeIt() {
var t_interval = setInterval(function() {
if (chIndex <= strings[index].length)
span.innerHTML = strings[index].substring(0, chIndex++);
else {
type = false;
// This is to be executed once action is completed.
window.clearInterval(t_interval);
}
}, 20)
}
- 对象中的setInterval出现问题's方法
- React应用程序中的setInterval
- 返回函数中的 setInterval 不起作用
- 如何补偿 Javascript 音频中的 setInterval 时序漂移
- 为什么 javascript 中的 setInterval 无法正常工作
- 如何从一个函数调用 clearInterval() 方法以停止另一个函数中的 setInterval() 方法
- 清除屏幕插件中的 setInterval 以在视口中更改类
- 循环nodejs中的setInterval
- 使用JavaScript中的setInterval更新TextField
- Mozilla中的setInterval()问题(Javascript函数)
- 如何在JavaScript中的setInterval函数中添加条件检查
- 我的防油精脚本中的setInterval()忽略给定的时间并不断执行
- 如何在没有按钮的情况下停止javascript中的setinterval函数
- Chrome jquery php中的setInterval导致的DIV闪烁
- 正在退出javascript中的setInterval方法
- 如何使javascript中的setInterval持续50天以上
- Javascript中for循环中的setInterval
- 如何处理服务器测试中的setInterval
- .each循环中的setInterval或setTimeout
- Angular JS中的setInterval对HighCharts-ng不起作用