javascript - setInterval為什么只執行一次
問題描述
簡單的背景切換
jquery部分
$(function(){function direct(){for(var i=0;i<2;i++){$('.bg_img').eq(i).show().siblings().hide();} } setInterval(direct,1000);})
html部分
<p class='main_bg'><p class='bg_img bg1'></p><p class='bg_img bg2'></p> </p>
css部分
.bg2默認display:none;
setInterval()只執行了一次,就想問為啥進入不了第二次?
各位大佬不要鄙視我,感謝您的解答~
問題解答
回答1:不是鄙視你,但這明顯是語法問題……實際上我認為 setInterval 一直都在執行,但是你的函數 direct 的運行結果是固定的,循環的最終結果是第二張顯示第一張隱藏,所以看起來好像沒執行一樣。
你應該這樣做:
var current = 0;function direct(){ $('.bg_img').eq(current).show() .siblings().hide(); current++; if (current > 1) { current = 0; } }
這里用到了閉包,把狀態保存在定時器的外面,才能夠每次往下循環。
另外再補充一點渲染的知識。對于這種用 for 循環改變視圖狀態,瀏覽器會把這些狀態都緩存起來,然后擇機渲染,而不是你一修改它就立刻渲染。所以你連閃一下都看不到。
回答2:參考一下
$(function(){ function direct(i){ $('.bg_img').eq(i).show().siblings().hide(); } var i = 0; setInterval(function () { direct(i) i = (i + 1) % $('.bg_img').length }, 1000);})回答3:
setInterval(function direct(){
for(var i=0;i<2;i++){ $('.bg_img').eq(i).show().siblings().hide(); }},1000); 直接這樣試試,控制臺看看,有沒有報錯,如果報錯的話,js也不會繼續執行了的。回答4:
循環一次之后i的值為1 然后就一直是1 用let試試
回答5:你是不是要的這種效果,按順序一個一個顯示?
jQuery(function($){ var bgImg = $('.bg_img'),maxIndex = bgImg.length - 1,i = 0; function direct(){bgImg.eq(i).show().siblings().hide();if (i < maxIndex) { i++;} else { i = 0;} } setInterval(direct, 1000);});回答6:
$(function(){
var index = 0;setInterval(function(){ (index < $(’.bg_img’).length) ? index ++ : index = 0; $(’.bg_img’).eq(index).show().siblings().hide();},1000);
})
回答7:setInterval(direct(),1000);
不知道對不對,但是總感覺是這個的問題
相關文章:
1. mysql - AttributeError: ’module’ object has no attribute ’MatchType’2. javascript - webapp業務流程基本一致,多套主題(樣式基本不一樣,交互稍有偏差)管理,并且有不斷有新增主題,該如何設計組件化架構?3. javascript - 我的站點貌似被別人克隆了, google 搜索特定文章,除了域名不一樣,其他的都一樣,如何解決?4. macos - mac下docker如何設置代理5. dockerfile - 為什么docker容器啟動不了?6. javascript - 從mysql獲取json數據,前端怎么處理轉換解析json類型7. angular.js - ng-grid 和tabset一起用時,grid width默認特別小8. 請教各位大佬,瀏覽器點 提交實例為什么沒有反應9. 新手 - Python 爬蟲 問題 求助10. 熱切期待朱老師的回復,網頁視頻在線播放器插件配置錯誤
