使用javascript自动更改图像

使用javascript自动更改图像,javascript,web,sliders,Javascript,Web,Sliders,我有当前的JavaScript问题。我的网站上有四个相邻的分区,它们以10秒的间隔不断旋转图像。我需要这些时间间隔来保持旋转图像的当前时间间隔,但开始时彼此间隔5秒,以获得良好的瀑布效果。如何使用JavaScript实现这一点 这是我当前用于显示单个分区和处理图像旋转的代码示例 <div class = "TestRotator"> <img src="http://bushveld.info/wp-content/uploads/2013/07/image1.png" al

我有当前的JavaScript问题。我的网站上有四个相邻的分区,它们以10秒的间隔不断旋转图像。我需要这些时间间隔来保持旋转图像的当前时间间隔,但开始时彼此间隔5秒,以获得良好的瀑布效果。如何使用JavaScript实现这一点

这是我当前用于显示单个分区和处理图像旋转的代码示例

<div class = "TestRotator">
<img src="http://bushveld.info/wp-content/uploads/2013/07/image1.png" alt="rotating" width="100" height="232" id="rotator">
<script type="text/javascript">
(function () {
    var rotator = document.getElementById('rotator'); // change to match image ID
    var imageDir = 'http://bushveld.info/wp-content/uploads/2013/07/';
    var delayInSeconds = 5;
    // set number of seconds delay
    // list image names
    var images = ['image2.png', 'image3.png', 'image4.png'];
    var num = 0;
    var changeImage = function () {
        var len = images.length;
        rotator.src = imageDir + images[num++];
        if (num == len) {
            num = 0;
        }
    };
    setInterval(changeImage, delayInSeconds * 1000);
})();
</script>
</div>

(功能(){
var rotator=document.getElementById('rotator');//更改以匹配图像ID
var imageDirhttp://bushveld.info/wp-content/uploads/2013/07/';
var=5;
//设置延迟的秒数
//列出图像名称
var images=['image2.png','image3.png','image4.png'];
var num=0;
var changeImage=函数(){
var len=images.length;
rotator.src=imageDir+images[num++];
如果(num==len){
num=0;
}
};
设置间隔(changeImage,DelayUnseconds*1000);
})();
我已经做了很多了!(我改变了很多次。)

使用
setTimeout()
和其他许多方法来设置
setInterval()

这是你想要的吗

PS:
状态
保存imgs更改到的第一个图像。超时时间的不同(200毫秒只是为了在它们之间产生一些差异,如果你想的话,你可以把它改成一个整数)。

我一直在摆弄它!(我改变了很多次。)

使用
setTimeout()
和其他许多方法来设置
setInterval()

这是你想要的吗


PS:
状态
保存imgs更改到的第一个图像。超时时间的不同(200毫秒只是为了在它们之间产生一些差异,如果您愿意,您可以将其更改为整数)。

如果我正确理解了您的问题,您需要这样的信息:

window.onload = function () {
    var // Customable parameters
        imageDir = 'http://bushveld.info/wp-content/uploads/2013/07/',
        interval = 2, // Interval between "flushes" in seconds. Must be > speed * maxScreens
        speed = 0.1, // "Flush" speed in seconds
        maxScreens = 4, // amount of used image tags
        images = 4, // amount of image sources, can be > maxScreens
        dir = 1, // 1 = from left to right, -1 = from right to left
        // Program
        flush,
        target = (dir > 0) ? 1 : maxScreens,
        targetOrigo = target,
        changeImage = function() {
            var img = document.getElementById('rotator' + target),
                id = parseInt(img.src.substr(img.src.length - 5, 1), 10) - dir;
            if (id < 1) {
                id = images;
            }
            if (id > images) {
                id = 1;
            }
            img.src = imageDir + 'image' + id + '.png';
            if (target !== maxScreens - targetOrigo + 1) {
                target += dir;
                setTimeout(changeImage, speed * 1000);
            }  else {
                target = targetOrigo;
                setTimeout(runRotation, interval * 1000);
            }
            return;
        },
        runRotation = function () {
            setTimeout(changeImage, speed * 1000);
        };  
    setTimeout(runRotation, 1000);
}
window.onload=函数(){
var//可定制参数
imageDir=http://bushveld.info/wp-content/uploads/2013/07/',
间隔=2,//以秒为单位的“刷新”间隔。必须是>速度*最大屏幕
速度=0.1,/“冲洗”速度(秒)
maxScreens=4,//已使用图像标记的数量
images=4,//图像源的数量,可以>最大屏幕
dir=1,//1=从左到右,-1=从右到左
//节目
脸红
目标=(目录>0)?1:maxScreens,
targetOrigo=目标,
changeImage=函数(){
var img=document.getElementById('rotator'+target),
id=parseInt(img.src.substr(img.src.length-5,1),10)-dir;
if(id<1){
id=图像;
}
如果(id>图像){
id=1;
}
img.src=imageDir+'image'+id+'.png';
如果(目标!==maxScreens-targetOrigo+1){
target+=dir;
设置超时(更改图像,速度*1000);
}否则{
target=targetOrigo;
设置超时(运行旋转,间隔*1000);
}
返回;
},
runRotation=函数(){
设置超时(更改图像,速度*1000);
};  
setTimeout(runRotation,1000);
}

请注意,我已将函数置于
窗口。onload
,在旋转开始之前,当所有图像都已加载时,效果会更好

该代码段根本不使用
setInterval()
,而是基于嵌套的
setTimeout()
s。通过这种方式,如果用户访问其他选项卡,然后返回到您的站点,您可以避免(取决于使用的浏览器)

您可以使用间隔、“刷新”速度、旋转时的图像数量,甚至您喜欢使用的不同图像数量(最大=9)。也可以切换旋转方向

如果要避免同时显示两个相似的图像,可以将
image5.png
添加到图像文件夹中,并设置
images=5


还可以使用可用的图像源阵列。

如果我正确理解了您的问题,您需要以下内容:

window.onload = function () {
    var // Customable parameters
        imageDir = 'http://bushveld.info/wp-content/uploads/2013/07/',
        interval = 2, // Interval between "flushes" in seconds. Must be > speed * maxScreens
        speed = 0.1, // "Flush" speed in seconds
        maxScreens = 4, // amount of used image tags
        images = 4, // amount of image sources, can be > maxScreens
        dir = 1, // 1 = from left to right, -1 = from right to left
        // Program
        flush,
        target = (dir > 0) ? 1 : maxScreens,
        targetOrigo = target,
        changeImage = function() {
            var img = document.getElementById('rotator' + target),
                id = parseInt(img.src.substr(img.src.length - 5, 1), 10) - dir;
            if (id < 1) {
                id = images;
            }
            if (id > images) {
                id = 1;
            }
            img.src = imageDir + 'image' + id + '.png';
            if (target !== maxScreens - targetOrigo + 1) {
                target += dir;
                setTimeout(changeImage, speed * 1000);
            }  else {
                target = targetOrigo;
                setTimeout(runRotation, interval * 1000);
            }
            return;
        },
        runRotation = function () {
            setTimeout(changeImage, speed * 1000);
        };  
    setTimeout(runRotation, 1000);
}
window.onload=函数(){
var//可定制参数
imageDir=http://bushveld.info/wp-content/uploads/2013/07/',
间隔=2,//以秒为单位的“刷新”间隔。必须是>速度*最大屏幕
速度=0.1,/“冲洗”速度(秒)
maxScreens=4,//已使用图像标记的数量
images=4,//图像源的数量,可以>最大屏幕
dir=1,//1=从左到右,-1=从右到左
//节目
脸红
目标=(目录>0)?1:maxScreens,
targetOrigo=目标,
changeImage=函数(){
var img=document.getElementById('rotator'+target),
id=parseInt(img.src.substr(img.src.length-5,1),10)-dir;
if(id<1){
id=图像;
}
如果(id>图像){
id=1;
}
img.src=imageDir+'image'+id+'.png';
如果(目标!==maxScreens-targetOrigo+1){
target+=dir;
设置超时(更改图像,速度*1000);
}否则{
target=targetOrigo;
设置超时(运行旋转,间隔*1000);
}
返回;
},
runRotation=函数(){
设置超时(更改图像,速度*1000);
};  
setTimeout(runRotation,1000);
}

请注意,我已将函数置于
窗口。onload
,在旋转开始之前,当所有图像都已加载时,效果会更好

该代码段在al中未使用
setInterval()