0

我用 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>
4

1 回答 1

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');
    }
于 2011-12-20T18:36:37.883 回答