2016-11-04 47 views
-2

我试图在循环3秒后用“bg”类更改图像的src属性。它从“bg1.jpg”到“bg5.jpg”。出于某种原因,我的代码不工作,我没有得到任何错误。3秒后更改src

$(document).ready(function(){ 

var $bg = $('.bg'); 

function bgChange() { 
    var i = 1; 
    while (i < 6) { 
    var background = '<?php echo $siteroot; ?>/img/bg' + i + '.jpg'; 
    setTimeout($bg.attr('src', background), 1000); 
    i++; 
    if (i === 5) { 
     i = 1; 
    } 
    } 
} 

bgChange(); 
//------------------------------------ 
}); 
+1

所以这个例子中,你在你的JavaScript文件有PHP,我猜你的JavaScript文件不被通过你的PHP处理器提供服务? - 除非你的JavaScript是内联的。 –

+1

... setTimeout正在无限循环中调用! while(i <6){if(i === 5)i = 1} –

+0

setTimeout将不会执行任何操作,直到JavaScript完成任务。电话已排队。 –

回答

1

您应该用间隔时间逐个更改src,所以请勿使用while || for循环。

尝试用setTimeout()

var $bg = $('.bg'); 

function bgChange(i) { 
    if(i == 6)i = 1; // reset 
    var background = '<?php echo $siteroot; ?>/img/bg' + i + '.jpg'; 
    $bg.attr('src', background); // change src 
    setTimeout(function(){bgChange(i++)}, 3000); // call again after 3 sec 
} 

bgChange(1); 
+0

你测试了你的代码吗?运行速度超快... – Endless

+0

这工作了一次,我把php作为@Lee Kowalkowski推荐。谢谢。 – Zenneson

-2
  1. 声明你的函数。
  2. 的setInterval和引用您的功能
var index = 1; 
function bgChange(){ 
    if(index == 6){ 
     index = 1; 
    } 
    document.getElementById("image").src = "bg" + num + ".jpg"; 
    index += 1; 
} 
var i = setInterval(bgChange, 3000); 
+0

你的意思是setTimeout() – magreenberg

+2

@magreenberg嗯? 'setTimeout'只执行一次。 – Stijn

+0

我的代码适合我。事实上,我只是做了完全一样的事情。我有一个函数来修改一个img标签的src attrb。编辑,以显示我如何实现 –

-1

jQuery(function($) { 
 

 
    var $bg = $('.bg') 
 
    var root = '<?php echo $siteroot; ?>' 
 
    var i = 0 
 

 
    function bgChange() { 
 
    var background = root + '/img/bg' + (++i) + '.jpg' 
 
    console.log(background) 
 
    $bg.attr('src', background) 
 
    i %= 6 
 
    setTimeout(bgChange, 1000) 
 
    } 
 

 
    bgChange() 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

为什么downvote? – Endless

0

要一次启动所有的计时器。如果它执行了任何操作(我不确定它是否确实如此),它将等待1000ms,然后再一次调用该函数5次,然后再次不再调用该函数。

你可以做的是一个函数,会在延迟后自行调用,看看代码片段。

var imageRoot = "/images/backgrounds/" 
 
var backgrounds = [ 
 
    "http://www.planwallpaper.com/static/images/desktop-year-of-the-tiger-images-wallpaper.jpg", 
 
    "http://www.freedigitalphotos.net/images/img/homepage/87357.jpg", 
 
    "http://www.planwallpaper.com/static/images/desktop-year-of-the-tiger-images-wallpaper.jpg", 
 
    imageRoot + "bg4.jpg", 
 
    imageRoot + "bg5.jpg", 
 
] 
 
function UpdateImageBackground(i, images) { 
 
    // Make sure i doesn't go past images.length 
 
    i = i%images.length; 
 
    
 
    var bgs = document.getElementsByClassName("bg"); 
 
    for(var j=0; j<bgs.length; j++) { 
 
    bgs[j].src = images[i]; 
 
    } 
 
    
 
    // Call itself again after 3000 miliseconds 
 
    setTimeout(function() { 
 
    UpdateImageBackground(i+1, images); 
 
    }, 3000); 
 
} 
 
UpdateImageBackground(0, backgrounds);
<img class="bg" />

1

可以使用setInterval()

$(document).ready(function(){ 
    // run background change function 
    bgChange(5); // 5 is number of images 
}); 

// functions 
function bgChange(num_of_images) { 
    var $bg = $('.bg'); 
    var i = 1; 
    setInterval(function(){ 
     i = (i < num_of_images) ? i + 1 : 1; 
     var background = '<?php echo $siteroot; ?>/img/bg' + i + '.jpg'; 
     $bg.attr('src', background); 
    } , 3000); 
} 

测试代码

$(document).ready(function(){ 
 
    // run background change function 
 
    bgChange(5); // 5 is number of images 
 
}); 
 

 
// functions 
 
function bgChange(num_of_images) { 
 
    var $bg = $('.bg'); 
 
    var i = 1; 
 
    setInterval(function(){ 
 
    i = (i < num_of_images) ? i+1 : 1; 
 
    \t /* 
 
     var background = '<?php echo $siteroot; ?>/img/bg' + i + '.jpg'; 
 
     $bg.attr('src', background); 
 
    */ 
 
    $bg.html('bg'+i); 
 
    
 
    } , 3000); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="bg">bg1</div>