1

画像を置き換える方法の可能なすべての組み合わせを試しましたが、機能する解決策は見つかりませんでした。

問題のあるコードをここにアップロードしました:http://dl.dropbox.com/u/2959730/index.html

ソースをダウンロードしてコードを試すことをお勧めします。問題は、#playButt imgにアタッチする必要があるplayer.playPause()関数にあります。

私が今何時間も苦労しているのを手伝ってください!

編集:

私はすべてを修正しました。提案に従って、現在このコードをplayPause()に使用していますが、それでも機能しません。。これは私が今まで扱った中で最も苛立たしいことです...

this.playPause = function(){  
    this.status = !this.status;  
    var status = this.status;
    var playEl = document.getElementById('play');
    $("#play").fadeOut(200, function(){  
        if(status)  
            playEl.src = "img/pauseButton.png";
        else  
            playEl.src = "img/playButton.png";
        $("#play").fadeIn(200); 
    }) 
} 
4

3 に答える 3

1

playPause()var playerは、playlist.jsののプロパティとして定義されています。

onclickonclick="playPause(); return false;"は、グローバルスコープで関数を見つけることができないため、playPauseを呼び出していません。onclickを次のように変更する必要があります。

onclick="player.playPause(); return false;"

アップデート:

問題はこのコールバックにあります:

$("#play").fadeOut(200, function(){  
    if(this.status)  
        playEl.src = "img/pauseButton.png";
    else  
        playEl.src = "img/playButton.png";
}).fadeIn(200);  

this.statusthis要素#playを参照するようになったため、そのコールバック内では未定義です。この問題を修正するvar status = this.statusには、コールバックの前に宣言し、コールバック内でテストする必要がありif(status)ます。

他の2つのこと:

  1. はコールバック内に配置する.fadeIn(200)必要があります。そうしないと、fadeOutが完了する前に実行されます(したがって、フェード効果はまったくありません)。
  2. var playEl = document.getElementById('play');jQueryを使用して要素を取得しているので、必要ありません。コールバック内で、thisキーワードはすでに要素を参照しています。

完全なコードは次のようになります。

var status = this.status = !this.status;
$("#play").fadeOut(200, function(){  
    if(status)  
        this.src = "img/pauseButton.png";
    else  
        this.src = "img/playButton.png";
    $(this).fadeIn(200);
});

別の更新:

上記の修正に加えて、さらに問題があります。ページに。が付いた要素が2つあるようid="play"です。実際、#ipod2全体が複製されています。ソースコードを確認しましたが、ライブDOMだけにあります。コンソールを使用している場合$("#play").remove();は、画像置換コードが機能することがわかります。ただし、JSでipod2が複製されている場所を見つけて、それを修正する必要があります。

于 2011-01-04T00:15:52.697 に答える
0

私の知る限り、あなたは実際には#playButt画像に添付していません。あなたがしているのは、その画像のonclick属性を定義し、playPause定義されていないを呼び出すことだけです。

質問してからドキュメントを変更しましたか?

onclick = "player.playPause(); return false;"がある場合は機能しますか?#playButt画像のonclickハンドラーで?

于 2011-01-03T23:56:25.587 に答える
0

playPause()だけでなく、player.playPause()が必要です。

また、Firebugがa [0]が未定義であると報告しているため、slider.jsのcssまたはheight関数に問題があるようです。

于 2011-01-04T00:28:46.103 に答える