我用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>
答案 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');
}