<!--Sila salin dan tampal kod di bawah dan jalankannya dalam penyemak imbas untuk melihat masalah-->
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>打字机效果</title>
<style>
#main{
border: 1px solid #ccc;
height:100px;
width:1000px;
}
</style>
</head>
<body>
<p id='main'></p>
<script type="text/javascript">
var context='Program ini mahu dahulu Masukkan semua teks satu demi satu, dan padam semua teks satu demi satu selepas tiga saat Namun, selepas menjalankannya, saya mendapati ia akan dipadamkan semula selepas dipadamkan. Tolong bantu saya, terima kasih. '
//console.log(a.length)
var contextLength=Nombor(0)
var writecontext=document.querySelector('#main')
function loop(){
return new Promise(function(sol,rej){
function lop(){
var t=setTimeout(function(){
if(contextLength<context.length){
writecontext.innerHTML=context.slice(0,contextLength++)+'_'
lop()
}
else{
if(contextLength=context.length){
setTimeout(function(){
clearTimeout(t)
sol(contextLength)
},3000)
}
}
},200)
}
lop()
})
}
gelung().kemudian(fungsi(nilai){
function lp(){
var n=setTimeout(function(){
if(value>0){
writecontext.innerHTML=context.slice(0,contextLength--)+'_'
lp()
}else{
if(value<=0){
clearTimeout(n)
}
}
},50)
}
lp()
})
</skrip>
</body>
</html>
Masalahnya terletak pada fungsi lp()
Apa yang dinilai di sini ialah nilai tetapi operasinya ialah contextLength, jadi fungsi lp() menyebabkan gelung tak terhingga.
Terangkan sebab pemadaman dua kali: terutamanya kaedah slice()
'string'.slice(0,n);
Apabila n ialah nombor positif, ia dilaksanakan dalam susunan biasa; apabila n ialah nombor negatif, n akan digantikan dengan panjang rentetan + n semasa pelaksanaan Lihat MDN untuk butiran.
Jadi, selepas pelaksanaan pertama lop() memadamkan rentetan kepada 0, contextLength terus berkurangan sebanyak satu, mengakibatkan dua pemadaman visual
ditulis oleh awak
lp
函数其实是无限循环函数来的,需要把lp
函数下的contextLength--
改为value--
,且需要把value > 0
改为value >= 0
Simpan perkataan ke dalam tatasusunan, kemudian tambah dan padam tatasusunan