Jquery 旋转图像横幅第一图像问题

发布于 2024-12-07 01:49:51 字数 3685 浏览 1 评论 0原文

我为内部 CMS 创建了一个旋转图像横幅模块。我没有为此编写所有的jquery,这就是为什么我有点困惑。

基本上,问题是页面重新加载后横幅中显示的第一个图像不会像其余图像那样淡出。我知道这可能是因为它是加载的默认图像,而不是导致图像横幅旋转的循环的一部分。横幅可以在这里看到:http://www.easyspacedesign.com/craig/dentalwise/

请注意重新加载排序后的第一张图像如何跳转到下一张图像,但随后所有图像都会平滑地淡入和淡出。

如何在重新加载后抓取第一张图像并使其像休息一样淡出?

这是代码:

<script type="text/javascript">
<!--

var doLooop = true;

$(document).ready(function(){
setInterval("loop()",5000);
});

function loop(){
if(!doLooop){ return; }
var $total = parseInt($("input[name=total_slides]").val());
var $id = parseInt($("a._active").attr("rel"));
var $new = $id+1;
if($new>$total){$new=1;}
changeSlide($new);
}

function changeSlide($id){
// Prepare selectors
var $total = $("input[name=total_slides]").val();
var $txtSlt = "#_slideText_"+$id;
var $imgSlt = "#_slideImg_"+$id;
var $active = $("a._active").attr("id");
var $new_img_href = "#animation_selectors a:nth-child("+$id+") img";
var $new_active = "#animation_selectors a:nth-child("+$id+")";
// Hide active images and text    
$(".slideImg").css("display","none");
$(".slideTxt").css("display","none");
// Display selected images and text 
$($txtSlt).fadeIn(1200);
$($imgSlt).fadeIn(1200);
$($txtSlt).delay(2500).fadeOut(1200);
$($imgSlt).delay(2500).fadeOut(1200);   
// Update active anchor image
$("a._active img").attr("src","<?php echo ROOT; ?>Images/StyleImages/off.png");
$("a._active").removeClass("_active");
$($new_img_href).attr("src","<?php echo ROOT; ?>Images/StyleImages/on.png");
$($new_active).addClass("_active");
}

$(function(){
$("#animation_selectors a").click(function(e){
          e.preventDefault();                                  
    var $id = $(this).attr("rel");
    doLooop = false;
    changeSlide($id);
});
});

-->
 </script>
<div id="animation">

<div id="animation_slides">
    <?php
    $img_sql = "SELECT strImageUrl FROM tbl_mod_Animation ORDER BY intAnimationID";
    if($img = $db->get_results($img_sql)){ $i=1;
        foreach($img as $img){ 
            if($i!=1){ $display = " style=\"display:none;\""; } else { $display  = ""; }
            echo "<div id=\"_slideImg_$i\" class=\"slideImg\" $display><img   src=\"".ROOT."Images/Uploads/Slides/".$img->strImageUrl."\" alt=\"\"  /></div>"; 
            $i++;
        }
    }
    ?>
</div>
<div id="animation_text">
    <?php
    $text_sql = "SELECT strText FROM tbl_mod_Animation ORDER BY intAnimationID";
    if($text = $db->get_results($text_sql)){ $i=1;
        foreach($text as $text){ 
        if($i!=1){ $display = " style=\"display:none;\""; } else { $display = ""; }
        echo "<div id=\"_slideText_$i\" class=\"slideTxt\" $display>".$text->strText."</div>"; 
        $i++;
        }
    }

    ?>
</div>

<div id="animation_selectors">
    <?php
    for($x=1;$x<$i;$x++){
        if($x==1){ 
            ?><a  id="slide_opt<?php echo $x; ?>" href="#" rel="<?php echo $x; ?>" class="_active"><img class="slideOpt" src="<?php echo ROOT; ?>Images/StyleImages/on.png" alt="" /></a><?php 
            } else {
            ?><a  id="slide_opt<?php echo $x; ?>" href="#" rel="<?php echo $x; ?>"><img class="slideOpt" src="<?php echo ROOT; ?>Images/StyleImages/off.png" alt="" /></a><?php 
            }
        }
    echo "<input type=\"hidden\" name=\"total_slides\" value=\"".($i-1)."\" />";

    ?>
</div>

</div><!--end of animation-->
<?php

?>

I have created an rotating image banner module for an in house CMS. I did not write all the jquery for this and that's why I'm a little confused.

Basically the problem is the first image displayed in the banner after a page reload does not fade out like the rest of the images do. I understand that this probably because it is the default image loaded and is not part of the loop that's causing the image banner to rotate. The banner can be seen here: http://www.easyspacedesign.com/craig/dentalwise/

Notice how the first image after a reload sort just jumps to the next image but then all he images afterwards smoothly fade in and out.

How do I grab that first image after a reload and make it fadeout like rest?

here is the code:

<script type="text/javascript">
<!--

var doLooop = true;

$(document).ready(function(){
setInterval("loop()",5000);
});

function loop(){
if(!doLooop){ return; }
var $total = parseInt($("input[name=total_slides]").val());
var $id = parseInt($("a._active").attr("rel"));
var $new = $id+1;
if($new>$total){$new=1;}
changeSlide($new);
}

function changeSlide($id){
// Prepare selectors
var $total = $("input[name=total_slides]").val();
var $txtSlt = "#_slideText_"+$id;
var $imgSlt = "#_slideImg_"+$id;
var $active = $("a._active").attr("id");
var $new_img_href = "#animation_selectors a:nth-child("+$id+") img";
var $new_active = "#animation_selectors a:nth-child("+$id+")";
// Hide active images and text    
$(".slideImg").css("display","none");
$(".slideTxt").css("display","none");
// Display selected images and text 
$($txtSlt).fadeIn(1200);
$($imgSlt).fadeIn(1200);
$($txtSlt).delay(2500).fadeOut(1200);
$($imgSlt).delay(2500).fadeOut(1200);   
// Update active anchor image
$("a._active img").attr("src","<?php echo ROOT; ?>Images/StyleImages/off.png");
$("a._active").removeClass("_active");
$($new_img_href).attr("src","<?php echo ROOT; ?>Images/StyleImages/on.png");
$($new_active).addClass("_active");
}

$(function(){
$("#animation_selectors a").click(function(e){
          e.preventDefault();                                  
    var $id = $(this).attr("rel");
    doLooop = false;
    changeSlide($id);
});
});

-->
 </script>
<div id="animation">

<div id="animation_slides">
    <?php
    $img_sql = "SELECT strImageUrl FROM tbl_mod_Animation ORDER BY intAnimationID";
    if($img = $db->get_results($img_sql)){ $i=1;
        foreach($img as $img){ 
            if($i!=1){ $display = " style=\"display:none;\""; } else { $display  = ""; }
            echo "<div id=\"_slideImg_$i\" class=\"slideImg\" $display><img   src=\"".ROOT."Images/Uploads/Slides/".$img->strImageUrl."\" alt=\"\"  /></div>"; 
            $i++;
        }
    }
    ?>
</div>
<div id="animation_text">
    <?php
    $text_sql = "SELECT strText FROM tbl_mod_Animation ORDER BY intAnimationID";
    if($text = $db->get_results($text_sql)){ $i=1;
        foreach($text as $text){ 
        if($i!=1){ $display = " style=\"display:none;\""; } else { $display = ""; }
        echo "<div id=\"_slideText_$i\" class=\"slideTxt\" $display>".$text->strText."</div>"; 
        $i++;
        }
    }

    ?>
</div>

<div id="animation_selectors">
    <?php
    for($x=1;$x<$i;$x++){
        if($x==1){ 
            ?><a  id="slide_opt<?php echo $x; ?>" href="#" rel="<?php echo $x; ?>" class="_active"><img class="slideOpt" src="<?php echo ROOT; ?>Images/StyleImages/on.png" alt="" /></a><?php 
            } else {
            ?><a  id="slide_opt<?php echo $x; ?>" href="#" rel="<?php echo $x; ?>"><img class="slideOpt" src="<?php echo ROOT; ?>Images/StyleImages/off.png" alt="" /></a><?php 
            }
        }
    echo "<input type=\"hidden\" name=\"total_slides\" value=\"".($i-1)."\" />";

    ?>
</div>

</div><!--end of animation-->
<?php

?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑脸一如从前 2024-12-14 01:49:51

changeSlide() 将每张幻灯片设置为淡入,然后在 2.5 秒内淡出。 Loop() 每 5 秒调用一次 changeSlide() 并传递要显示的下一张幻灯片的 id。问题是第一张幻灯片在页面重新加载时的设置方式不同。它可能只是用 _active 类静态地写在页面上。

您最好不要设置延迟以在 2.5 秒后淡出每张幻灯片,而是将上一张和下一张幻灯片传递给 ChangeSlide 函数,然后淡出上一张并淡入下一张。

function loop() {
    ... 
    changeSlide($id, $new);
}

然后在changeSlide中:

function changeSlide($prev, $next) { 
     ...
     var $prevTxtSlt = "#_slideText_" + $prev;
     var $prevImgSlt = "#_slideImg_" + $prev;
     var $nextTxtSlt = "#_slideText_" + $prev;
     var $nextImgSlt = "#_slideImg_" + $prev;
     ...
     $($prevTxtSlt).fadeOut(1200);
     $($prevImgSlt).fadeOut(1200);
     $($nextTxtSlt).fadeIn(1200);
     $($nextImgSlt).fadeIn(1200);
}

changeSlide() sets up each slide to fade in and then fade out in 2.5 seconds. loop() calls changeSlide() every 5 seconds and passes the id of the next slide to be shown. The problem is that the first slide isn't set up the same way on page reload. It's probably just statically written on the page with the _active class.

You'd be better off, instead of setting a delay to fade each slide out after 2.5 seconds, to pass in both the previous and next slide to the changeSlide function and then fade out the previous and fade in the next.

function loop() {
    ... 
    changeSlide($id, $new);
}

and then in changeSlide:

function changeSlide($prev, $next) { 
     ...
     var $prevTxtSlt = "#_slideText_" + $prev;
     var $prevImgSlt = "#_slideImg_" + $prev;
     var $nextTxtSlt = "#_slideText_" + $prev;
     var $nextImgSlt = "#_slideImg_" + $prev;
     ...
     $($prevTxtSlt).fadeOut(1200);
     $($prevImgSlt).fadeOut(1200);
     $($nextTxtSlt).fadeIn(1200);
     $($nextImgSlt).fadeIn(1200);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文