Javascript 使用jquery创建公告牌幻灯片

Javascript 使用jquery创建公告牌幻灯片,javascript,jquery,css,callback,slideshow,Javascript,Jquery,Css,Callback,Slideshow,我在中看到了一个教程,我做了一些修改,使其看起来更像一个广告牌,但有些地方出了问题,我不知道它是什么!问题到底出在哪里,这真让我抓狂! 你第一次跑的时候,这正是我想要的,但随着时间的流逝,它变得越来越难看!我做了这样的修改: $(function() { $('#ad_1 > img').each(function(i,e){ rotate($(this),500,3000,i); }); function rotate(elem1,speed,timeout,i){ el

我在中看到了一个教程,我做了一些修改,使其看起来更像一个广告牌,但有些地方出了问题,我不知道它是什么!问题到底出在哪里,这真让我抓狂! 你第一次跑的时候,这正是我想要的,但随着时间的流逝,它变得越来越难看!我做了这样的修改:

$(function() {
$('#ad_1 > img').each(function(i,e){
    rotate($(this),500,3000,i);
});
function rotate(elem1,speed,timeout,i){
    elem1.animate({'marginLeft':'18px','width':'0px'},speed,function(){
        var other;
        if(elem1.parent().attr('id') == 'ad_1')
            other = $('#ad_2').children('img').eq(i);
        else
            other = $('#ad_1').children('img').eq(i);
            other.animate({'marginLeft':'0px','width':'35px'},speed,function(){
            var f = function() { rotate(other,speed,timeout,i) };
            setTimeout(f,timeout+i*100);
        });
    });
}});
其余的一切都是一样的
谢谢

不看代码的其余部分就很难判断,但是您的else语句缺少括号。我想你是有意这么做的:

$(function() {
$('#ad_1 > img').each(function(i,e){
    rotate($(this),500,3000,i);
});
function rotate(elem1,speed,timeout,i){
    elem1.animate({'marginLeft':'18px','width':'0px'},speed,function(){
        var other;
        if(elem1.parent().attr('id') == 'ad_1') {
            other = $('#ad_2').children('img').eq(i);
        } else {
            other = $('#ad_1').children('img').eq(i);
            other.animate({'marginLeft':'0px','width':'35px'},speed,function(){
            var f = function() { rotate(other,speed,timeout,i) };
            setTimeout(f,timeout+i*100);
        });
       }
    });
}});
*编辑:您记得包含jQuery吗

<script src="jquery-1.3.2.js" type="text/javascript"></script>

将来,描述你希望实现的目标会对你有所帮助,而不是把它留给你寻求帮助的人自己去解决。通过一些修改,我确定您想要的不是每个面板同时设置动画,而是从左到右稍微延迟动画,以便每个面板在其左邻居开始其动画后开始设置动画

您试图通过向面板旋转之间的持续时间添加增量来实现这一点。作为面板索引的函数计算的增量,对于较高的索引来说更大。这种方法的问题是,每个面板在其显示状态下花费的时间不同——因此,随着时间的推移,整个图像变得越来越混乱

所有面板都需要具有相同的显示持续时间,因此将更改还原为
setTimeout

setTimeout(f, timeout);
实际上,您要做的是延迟每个面板开始旋转的时间。这可以通过在启动旋转的每个处理程序中添加一个
setTimeout
来实现:

$('#ad_1 > img').each(function (i, e) {
    setTimeout($.proxy(function () {
        rotate($(this), 500, 7000, i);
    }, this), (i * 100));
});
您会注意到,我增加了传递给
rotate
timeout
值,因为需要更多的时间来适应顺序动画


我还建议您在更好地格式化代码方面付出一些努力。由于缩进不良、缺少间距以及省略了大括号,您的示例使阅读成为一件苦差事。

谢谢您的回答,但没有其他代码了!HTML和CSS正是原始教程中的文件,else没有括号,因为这里的if和else代码只有一行,您知道您可以在没有括号的情况下完成它,看看这是否适合您。如果代码完全相同,则需要确保包含正确的文件(即jquery)在正确的目录中,好的,看,我没有语法问题,我知道,我说,当你运行页面时,第一张幻灯片会很完美,但随着时间的推移,它变得越来越糟糕,你知道这就像我有symantic问题,我不知道这是什么,如果你声明你更改了
设置超时
与教程中的内容一致。你希望通过修改实现什么?就像第一次运行幻灯片一样。就像我在第一次运行页面之前所说的,幻灯片的变化方式是我想要的,但随着时间的推移,它会变差。谢谢你的回答。在我的问题中,我说当运行页面时,第一张幻灯片正是我想要的,但随着时间的推移,它会变差真糟糕