2017-08-09 5 views
0

JavaScriptの画像ギャラリーにはいくつか問題があります。何でも動作しますが、少数の操作の後に次の画像をロードする処理には時間がかかります。ここで コードです:jsギャラリーの次のボタンを解決するには

function showbox(x) 
{ 
    document.getElementById("box").style.visibility = "visible"; 
    for(i=1; i<5; i++){ 
    document.getElementById("d"+i).innerHTML="&#9675;"; 
    } 
    if (x==1){ 
    document.getElementById("myImg").src = "img1.gif"; 
    document.getElementById("d"+x).innerHTML="&#9679;"; 
    $('#rightbutton').click(function() { showbox(x+1); }); 
    $('#leftbutton).click(function() { showbox(x-1); }); 
    return 0; 
    } else if (x==2){ 
    document.getElementById("myImg").src = "img2.gif"; 
    document.getElementById("d"+x).innerHTML="&#9679;"; 
    $('#rightbutton').click(function() { showbox(x+1); }); 
    $('#leftutton').click(function() { showbox(x-1); }); 
    return 0; 
    } 
    E.t.c 


    function nextimg(y){ 
    showbox(y); 
    } 

    function prvimg(y){ 
    showbox(y); 
    } 
+0

なぜ 'show'は' if'文の結果に関係なく '0'を返しますか? 'if'の後ろに' return 0'行を入れてください。また、2つの 'nextimg'と' prvimg'関数を持つ必要はありません。両者は同じことをしています。 DOMの準備ができたらすぐに、必要なときにはすぐに、次に次回にはDOMに必要なことを知っているDOM参照を取得して、変数に格納してください。 –

+0

対応するHTMLも表示する必要があります。 –

答えて

0

showboxが呼び出されるたびに、あなたは以前のものを削除せずに、あなたの#rightbutton#leftbutton要素のための新しいclickイベントハンドラを設定します。したがって、これらのボタンをクリックするほど、イベントハンドラが増え、イベントなどが増えます。ドキュメントのロード時に、イベントハンドラを一度割り当てるだけです。

さらにステートメントの結果に関係なく、は返り値0となり、返された値は何も決して与えられないのですか?あなたがそれを必要としているとは思われません(もしあなたがそうならば、はifの文の1回後にある)。

また、を呼び出すだけで、両方が同じことを行うと、2つのnextimgprvimg関数を持つ必要はありません。これらの関数を呼び出す代わりに、showboxを呼び出してください。

最後に、DOMの準備ができたらすぐに、必要なときには最後の瞬間ではなく、次回には再び変数に格納するように、必要なことを知っているDOM参照を取得してください。

+0

変数を使うとさらに悪くなりましたが、$( '#leftbutton')を追加するとremoveAttr( "onclick");大丈夫です – user7342089

関連する問題