旧版浏览器中的Javascript图像旋转速度慢

时间:2011-12-20 18:21:46

标签: php javascript jquery html rotator

我用javascript创建了一个简单的图像旋转器,但是对于“旧浏览器”(例如IE 6,7和8)来说速度很慢。我认为图像将首先加载,然后启动旋转器。一些提示使它更快?

为什么我自己创造了一个旋转器?我找到的所有旋转器都剪切(裁剪)了图像。我需要完整的图像...必要时左/右或上/下有一些空白区域。

Javascript部分:

//Loop through pictures
var tid = setInterval(mycode, 3000);
function mycode() {

    if($.random(0,1) == 1){
        //Fade
        $('#alleplaatjes img.active').fadeOut(500,function(){
            $(this).removeClass();

            if($(this).next().length == 0){
                $('#alleplaatjes img').first().fadeIn(500);
                $('#alleplaatjes img').first().addClass('active');
            } else {
                $(this).next().fadeIn(500);
                $(this).next().addClass('active');
            }
        });
    } else {
        //Slide
        $('#alleplaatjes img.active').slideUp(500,function(){
            $(this).removeClass();

            if($(this).next().length == 0){
                $('#alleplaatjes img').first().slideDown(500);
                $('#alleplaatjes img').first().addClass('active');
            } else {
                $(this).next().slideDown(500);
                $(this).next().addClass('active');
            }
        });
    }
};

PHP部分:

<?php

$dir = "/home/zwuq/domains/***/public_html/afbeelding/";
foreach(glob($dir."*") as $file){
    $afbeelding = 'afbeelding/'.str_replace($dir, '', $file);
    $toevoeging = FALSE;
    if(!$eerste_plaatje){
        $toevoeging = ' class="active"';
        $eerste_plaatje = $afbeelding;
    }
    $plaatjes .= '<img'.$toevoeging.' src="'.$afbeelding.'" style="max-width: 99%; max-height: 99%;">';
}

?>

HTML部分:

<div id="alleplaatjes" style="width:100%; height:100%; margin:0px; padding:0px; z-index:1; text-align: center;">
    <? echo $plaatjes; ?>
</div>

1 个答案:

答案 0 :(得分:1)

一个建议是不要使用setInterval。如果操作时间过长(在您的情况下,超过3秒),累积的延迟将导致您的动画变得更糟。

要尝试我的建议,只需拨打setTimeout而不是setInterval,然后在mycode的末尾,再次调用setTimeout。理想情况下,您可以跟踪调用函数的时间,并调整传递给下一次超时的时间间隔。

为了在StackOverflow上获得最佳效果,在http://jsfiddle.net上发布示例会让其他人看到问题并帮助我们为您提供帮助。

另一个建议

缓存jQuery对象。例如,而不是:

    $(this).removeClass();
    if($(this).next().length == 0){
        $('#alleplaatjes img').first().fadeIn(500);
        $('#alleplaatjes img').first().addClass('active');
    } else {
        $(this).next().fadeIn(500);
        $(this).next().addClass('active');
    }

你应该

    // prepending jquery variables with $ to distinguish them
    var $this = $(this),
        $next = $this.next();
    $this.removeClass();

    if( $next.length == 0 ){
        var $first = $('#alleplaatjes img').first();
        $first.fadeIn(500);
        $first.addClass('active');
    } else {
        $next.fadeIn(500);
        $next.addClass('active');
    }