【问题标题】:Javascript banner slides overlaying eachother on pageloadJavascript 横幅滑块在页面加载时相互重叠
【发布时间】:2012-03-02 15:36:33
【问题描述】:

我的 JavaScript 横幅有问题。我只想让第一张幻灯片出现在页面加载中。目前,横幅会在瞬间跳到最后一张幻灯片,然后跳回第一张幻灯片。这是我的 JavaScript。我是新手,我一直在互联网上搜索,但没有运气,希望能得到帮助。谢谢。

var jqb_vCurrent = 0;
var jqb_vTotal = 0;
var jqb_vDuration = 6000;
var jqb_intInterval = 0;
var jqb_vGo = 1;
var jqb_vIsPause = false;
var jqb_tmp = 20;
var jqb_title;
var jqb_imgW = 680;
var jqb_imgH = 200;

jQuery(document).ready(function() { 
jqb_vTotal = $(".jqb_slides").children().size() -1;
$(".jqb_info").text($(".jqb_slide").attr("title")); 
jqb_intInterval = setInterval(jqb_fnLoop, jqb_vDuration);

//Horizontal
$("#jqb_object").find(".jqb_slide").each(function(i) { 
    jqb_tmp = ((i - 1)*jqb_imgW) - ((jqb_vCurrent -1)*jqb_imgW);
    $(this).animate({"left": jqb_tmp+"px"}, 500);
});


$("#btn_pauseplay").click(function() {
    if(jqb_vIsPause){
        jqb_fnChange();
        jqb_vIsPause = false;
        $("#btn_pauseplay").removeClass("jqb_btn_play");
        $("#btn_pauseplay").addClass("jqb_btn_pause");
    } else {
        clearInterval(jqb_intInterval);
        jqb_vIsPause = true;
        $("#btn_pauseplay").removeClass("jqb_btn_pause");
        $("#btn_pauseplay").addClass("jqb_btn_play");
    }
});
$("#btn_prev").click(function() {
    jqb_vGo = -1;
    jqb_fnChange();
});

$("#btn_next").click(function() {
    jqb_vGo = 1;
    jqb_fnChange();
});
});

function jqb_fnChange(){
clearInterval(jqb_intInterval);
jqb_intInterval = setInterval(jqb_fnLoop, jqb_vDuration);
jqb_fnLoop();
}

function jqb_fnLoop(){
if(jqb_vGo == 1){
    jqb_vCurrent == jqb_vTotal ? jqb_vCurrent = 0 : jqb_vCurrent++;
} else {
    jqb_vCurrent == 0 ? jqb_vCurrent = jqb_vTotal : jqb_vCurrent--;
}


$("#jqb_object").find(".jqb_slide").each(function(i) { 
    if(i == jqb_vCurrent){
        jqb_title = $(this).attr("title");
        $(".jqb_info").animate({ opacity: 'hide', "left": "-50px"}, 250,function(){
            $(".jqb_info").text(jqb_title).animate({ opacity: 'show', "left": "0px"}, 500);
        });
    } 


    //Horizontal Scrolling
    jqb_tmp = ((i - 1)*jqb_imgW) - ((jqb_vCurrent -1)*jqb_imgW);
    $(this).animate({"left": jqb_tmp+"px"}, 500);


});


}

【问题讨论】:

    标签: javascript jquery banner


    【解决方案1】:

    也许您不应该为document.ready 上的每个#jqb_object.jqb_slide 元素设置动画?

    编辑

    代替

    //Horizontal
    $("#jqb_object").find(".jqb_slide").each(function(i) { 
        jqb_tmp = ((i - 1)*jqb_imgW) - ((jqb_vCurrent -1)*jqb_imgW);
        $(this).animate({"left": jqb_tmp+"px"}, 500);
    });
    

    试试

    //Horizontal
    i = 1;
    jqb_tmp = ((i - 1)*jqb_imgW) - ((jqb_vCurrent -1)*jqb_imgW);
    $("#jqb_object").find(".jqb_slide:first").animate({"left": jqb_tmp+"px"}, 500);
    

    如果您希望最后一张幻灯片在页面加载时出现并带有自己的标题,请更改 jqb_vCurrent 索引:

    jqb_vCurrent = jqb_vTotal;
    

    【讨论】:

    • 我试过了,但我无法让它工作。我非常坚持这一点。自从我发布此内容后,我添加了一些其他代码来阻止我遇到的动画构建问题。所以你告诉我把代码放在哪里
    • 对不起,被切断了。所以 sn-p oc de 现在看起来像这样:
    • 非常感谢您回复我。所以我输入了你建议的代码,但我仍然无法让它工作。我收到语法错误。我做错了什么吗?代码让我太疯狂了! $("#jqb_object").find(".jqb_slide:first").animate({"left": jqb_tmp+"px"}, 500); { jqb_tmp = ((i - 1)*jqb_imgW) - ((jqb_vCurrent -1)*jqb_imgW); $(this).stop().animate({"left": jqb_tmp+"px"}, 500); });
    • 我不太确定这个解决方案,但请检查我编辑的答案
    • @h4bo 我快到了。非常感谢。现在最后一张幻灯片单独出现在页面加载中,但我可以解决这个问题。我确实有另一个小问题正在发生。在每张幻灯片上,我在每张幻灯片的 div 中都有标题标签,它在每张相应幻灯片的底部显示为标题。现在在页面加载时,最后一张幻灯片首先出现,并带有第一张幻灯片的标题。如果有帮助,我可以发布 html 代码。再次感谢。你是救生员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多