私のスライドショーは不安定な動作に苦しんでいます。これは、ユーザーがクリックするポケットベルによって駆動されます。対応するポケットベルをクリックすると、次の画像が表示され(不透明度/フィルター)、現在の画像の下に配置されるようにz-index 5(z-index 10)として設定されます。次に、現在の画像がフェードアウトされ、最後に次の画像が現在の画像に設定され、フェードアウトされた画像がz-index 0に設定されます。ただし、これは前の画像に戻った場合にのみ機能します(Chromeでは、はさらに奇妙な振る舞いをしています。)画像の順序で。つまり、
- クロム:
- 「list_slide1」から「list_slide3」へのフェードなしのインスタントジャンプ
- 「list_slide3」から「list_slide1」へのフェードは正しく動作します
- それから...
- 「list_slide1」から「list_slide3」へのインスタントジャンプ「フェードなし」への「list_slide3」への
- 「list_slide2」フェードは正しく動作します
- また...
- 「list_slide1」から「list_slide6」へのインスタントジャンプフェードなし
- 前のリストへの「list_slide6」-slide1-5フェードは正しく動作します
- IE:
- 「list_slide1」から「list_slide3」へのフェードなしのインスタントジャンプ
- 「list_slide3」から「list_slide1」への2回目の一時停止、ジャンプ
ポケットベルと画像はデータベースから動的に生成されます(したがって、コードの下部にあるPHPの小さな部分)。データベース内のページにリストされている数のアイテムが含まれています。
いくつかの注意:
1)フェード機能は、 http://javascript.info/tutorial/animationに対する私自身の見解であり、サイトの他の場所にある別のスライドショーで問題なく機能しました。
2)getElementsByClassはhttp://www.robertnyman.comからのものであり、要求されたクラスの親要素と子要素を配列で返します(したがって、current [0]などを呼び出す理由)
ありがとう。
<script type="text/javascript">
var pager = document.getElementById('pager1');
var list_pagers = document.getElementById('pagers')
var i = 0;
var next_slide = function(next) {
if (next.className !== 'slide_current') {
if (getElementsByClassName('slide_pending').length === 0) {
var current = getElementsByClassName('slide_current');
next.className = 'slide_pending';
next.style.zIndex = 5;
next.style.opacity = 1;
next.style.filter = 'alpha(opacity = 100)';
next.style.display = 'block';
fade(current[0], linear, 1000);
var fadeSlide = switcher(next, current);
}
}
}
var switcher = function(now, then) {
setTimeout(function() {
now.className = 'slide_current';
now.style.zIndex = 10;
now.style.opacity = 1;
now.style.filter = 'alpha(opacity = 100)';
then[0].className = 'slide_hide';
then[0].style.zIndex = 0;
then[0].style.opacity = 0;
then[0].style.filter = 'alpha(opacity = 0)';
then[0].style.display = 'none';
}, 1001);
}
<?php
// dynamically build event for each pager/slide in the show.
for ($k = 1; $k <= $i; $k++) {
echo 'var next_slide' .$k. ' = document.getElementById("list_slide" +' .$k. '); ',
'addEvent(list_pagers.childNodes[' .($k - 1). '], "click", function () {next_slide(next_slide' .$k. ')}); ';
}
?>