![](/img/trans.png)
[英]How to change a div background colour every X seconds in jQuery without effect?
[英]JavaScript, How to change the background of a div tag every x seconds
我正在尝试编写一些JavaScript代码,以每X秒更改两个div标签的背景。 这是我的代码:
的HTML
<div id="bg_left"></div>
<div id="bg_right"></div>
CSS主体{高度:100%; }
#bg_left{
height:100%;
width:50%;
left:0;
position:fixed;
background-position:left;
}
#bg_right{
height:100%;
width:50%;
right:0;
position:fixed;
background-image:url(http://presotto.daterrawebdev.com/d/img/pp_hey_you_bg.png);
background-position:right;
}
Java脚本
function carousel_bg(id) {
var bgimgs = [ 'pp_hey_you_bg.png', 'burningman_bg.png' ];
var img1 = bgimgs[id];
var img2 = bgimgs[id+1];
var cnt = 2;
$('#bg_left').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img1+")");
$('#bg_right').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img2+")");
id = id + 1;
if (id==cnt) id = 0;
setTimeout("carousel_bg("+id+")", 10000);
}
$(document).ready(function() {
carousel_bg(0);
});
background背景图像应该随机变化,但它们甚至根本没有变化。
好的,我在您的jsFiddle中看到了问题。 因为您要将字符串传递给setTimeout()
,所以该字符串仅在顶级范围内进行评估。 但是,您传递的函数名称不在顶级范围内(它在jsFiddle的onload处理程序中)。 因此,我更改了您的JS在jsFiddle中的放置方式,使其现在处于顶级范围。 我还固定了选择图像的逻辑,现在可以在这里使用: http : //jsfiddle.net/jfriend00/awVYP/
并且,这是一个清理后的版本,该版本不会将字符串传递给setTimeout()
(这是编写JavaScript的一种更好的方法),后者会传递一个本地函数并使用闭包来跟踪当前索引: http : //jsfiddle.net / jfriend00 / LVGNN /
function carousel_bg(id) {
var bgimgs = [ 'pp_hey_you_bg.png', 'burningman_bg.png' ]; // add images here..
function next() {
if (id >= bgimgs.length) {
id = 0;
}
var img1 = bgimgs[id];
id++;
if (id >= bgimgs.length){
id = 0;
}
var img2 = bgimgs[id];
$('#bg_left').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img1+")");
$('#bg_right').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img2+")");
setTimeout(next, 1000);
}
next();
}
$(document).ready(function() {
carousel_bg(0);
});
先前对早期版本的评论是OP的代码:
$('#body')
应该:
$('body')
甚至更快:
$(document.body)
另外,您的jsFiddle显示了一个奇怪的问题。 您的CSS在HTML标签上具有背景图片,但是您的javascript在body标签上设置了半透明背景图片。 那真的是你想要的吗?
为了进行测试,我在数组中添加了另一个图像,以便我们在排序时有所区别。
function carousel_bg(id) {
var bgimgs = [ 'http://presotto.daterrawebdev.com/d/img/pp_hey_you_bg.png', 'http://presotto.daterrawebdev.com/d/img/burningman_bg.png', 'http://gallery.orobouros.net/var/albums/2012/NewYorkComicCon2012/Legend-of-Korra/nycc_20121013_164625_0041.jpg?m=1354760251' ]; // add images here..
var img1 = bgimgs[id+1];
var img2 = bgimgs[id];
var cnt = bgimgs.length; // change this number when adding images..
$('#bg_left').css("background-image", "url("+img1+")");
$('#bg_right').css("background-image", "url("+img2+")");
id = id + 1;
if (id== (cnt - 1) ) id = 0;
setTimeout("carousel_bg("+id+")", 10000);
}
这里有两个变化:
尽管此代码确实遍历了数组,但并不是随机的。 那是另一个话题。
对于不使用JQuery的用户,只需执行以下操作:
document.body.style.backgroundImage="url(images/mybackgroundimage.jpg)";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.