Đây là lần đầu tiên tôi thực sự đi sâu vào JavaScript. Chắc chắn tôi đã sử dụng nó trước đây, nhưng tôi chưa bao giờ thực sự viết bất cứ điều gì từ đầu.setTimeout bỏ qua thời gian chờ? (Bắn ngay)
Dù sao, tôi đang gặp một vấn đề rất lạ mà tôi hy vọng ai đó có thể tìm ra cho tôi.
Tôi đang cố gắng tạo văn bản từ div phai từ đen sang trắng. Đơn giản, phải không?
Mã sau hoạt động. Nó sẽ thay đổi màu trắng, tuy nhiên, thời gian setTimeout 500ms đang bị bỏ qua.
Nếu bạn sử dụng Chrome và nhìn vào giao diện điều khiển JS, bạn sẽ dễ dàng thấy rằng phương thức doFade() đang được gọi gần như ngay lập tức, không phải mỗi 500 mili giây.
Có ai có thể giải thích điều này không?
var started = false;
var newColor;
var div;
var hex = 0;
function fadestart(){
if (typeof fadestart.storedColor == 'undefined') {
div = document.getElementById('test');
fadestart.storedColor = div.style.color;
}
if(!started){
console.log('fadestart');
newColor = fadestart.storedColor;
started = true;
setTimeout(doFade(), 500);
}
}
function fadestop(){
console.log('fadestop');
div.style.color = fadestart.storedColor;
started = false;
hex = 0;
}
function doFade(){
if(hex<=238){
console.log(hex);
hex+=17;
div.style.color="rgb("+hex+","+hex+","+hex+")";
setTimeout(doFade(), 500);
}
}
Trên thực tế, bạn muốn 'dofade()' như là một chuỗi, trong dấu ngoặc kép. Bạn có nguyên nhân gốc rễ, mặc dù. –
Có 'func' đánh giá chính hàm đó trong khi' func() 'gọi hàm và đánh giá giá trị trả về của nó. –
chắc chắn bạn không cần báo giá. Bạn có thể đặt hoặc doFade hoặc "doFade". Tôi nghĩ rằng thậm chí có thể có lợi ích hiệu suất nhỏ để không chuyển đổi chuỗi "doFade" để xử lý chức năng. – KeatsKelleher