2017-10-12 9 views
0

これでSOコミュニティにバグを残して申し訳ありませんが、私は自分の人生で進む必要があります:クリック可能な画像の潜在的な無限リストが将来これらの画像をクリックすると、別々の要素で最大2つのスポットを埋めることができます。これの次のステップは、未塗りの次の要素を塗りつぶすだけでなく、リストから再度選択すると、元の画像に置き換えてスポット1に戻ります。私はこれを達成するための正しいロジックを適用する方法を考えることができません。ここまで私がこれまで持っていたことがあります。クローンし、潜在的に無限のリストから要素を追加します

<div class="spot-1"></div><!--start here --> 
<div class="spot-2"></div><!--then here --> 

<div class="img-wrap"> 
<div><img class="PutinSpot"src="someIMG0.jpg" alt="dufuq?"></div> 
<div><img class="PutinSpot"src="someIMG1.jpg" alt="dufuq?"></div> 
<div><img class="PutinSpot"src="someIMG2.jpg" alt="dufuq?"></div> 
<div><img class="PutinSpot"src="someIMG3.jpg" alt="dufuq?"></div> 
<div><img class="PutinSpot"src="someIMG4.jpg" alt="dufuq?"></div> 
</div><!--potentially^^^^^ infinite list--> 

ここにはJqueryがあります。

明確にする。 リストを無期限に拡張できる必要があります。しかし、img-wrap divからクリックした画像をspot-1に入れ、次にspot-2にクリックされた次の画像をいっぱいにして、両方がいっぱいであるかどうかを確認してください。appendTo spot-再び1。これはループだろうか?スイッチケース?

+0

divの "spot-1"と "spot-2"には最後に選択した2つの画像がありますか? – nicooga

+0

Infinite?あんまり。あなたの質問は何ですか? – PHPglue

+0

最大100枚の画像があれば、私はこのリストを非常に広範囲にするつもりです。 – MessatsuX

答えて

1

プログラミング時に、データがどのように流れるかを考えよう。最終的な動作を達成するためにDOMを操作することは、二次懸案事項です。

ユーザーが2つの 最大数を選択することができ、そこから画像の可変サイズのリストがあります:のは、私が正しく要件を理解仮定して、あなたの問題をこのように言い換えてみましょう。

$(document).ready(function() { 
 
    $('.PutinSpot').click(function() { 
 
    selectImage(this); 
 
    }); 
 
}); 
 

 
var selectedImages = []; 
 

 
function selectImage(imageEl) { 
 
    // Remove an element from the front of the array if length is 2 
 
    // This way the array will allways have 2 elements maximum 
 
    if (selectedImages.length == 2) selectedImages.shift(); 
 

 
    selectedImages.push(imageEl); 
 

 
    // For each selected image, find the correct div and 
 
    // replace the content completely with the correct image 
 
    selectedImages.forEach(function(img, i) { 
 
    var targetDiv = $('.spot-' + (i + 1)); 
 
    targetDiv.html($(img).clone()); 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
Selected Image 1: <div class="spot-1"></div> 
 
<!--start here --> 
 
Selected Image 2: <div class="spot-2"></div> 
 
<!--then here --> 
 
<hr/> 
 
<div class="img-wrap"> 
 
    <div><img class="PutinSpot" src="http://placehold.it/50x50/000000" alt="dufuq?"></div> 
 
    <div><img class="PutinSpot" src="http://placehold.it/50x50/ff0000" alt="dufuq?"></div> 
 
    <div><img class="PutinSpot" src="http://placehold.it/50x50/ffff00" alt="dufuq?"></div> 
 
    <div><img class="PutinSpot" src="http://placehold.it/50x50/f110f2f" alt="dufuq?"></div> 
 
    <div><img class="PutinSpot" src="http://placehold.it/50x50/0000ff" alt="dufuq?"></div> 
 
</div>

:現在選択されている画像はイメージがすでにDOMにあるコンテキストでこの問題を解決するには、次のようになり2つの 別々のスポット

に表示されます

+0

私は見るので、あなたはそれらを配列に格納しています。非常に素晴らしい。それらが逆の方法で配列を塗るようにするには、 "var targetDiv = $( '。spot-' +(i + 1));" "var targetDiv = $( '。スポット - ' +(i - 1));"正しい? – MessatsuX

+0

本当に。配列は0でインデックス付けされているので、最初の要素のiは0、2番目の要素は '1'などとなります。 'i - 1'を使うと、' spot-1'クラスと 'spot-1'クラスのdivをループが探します。順番を逆にするには、それぞれ 'shift'と' push'の代わりに 'pop'と' unshift'を使います。この方法では、新しい要素は背面の代わりに配列の前面に格納されます。 – nicooga

+0

私は今、それを得る、私はこのプロジェクトのデザインの男だ。私のパートナーは電話を拾っていないので、私はそれを刺すと思った。私はポップ/プッシュやシフト/アンシフトを使用したことはありません...これまで。どうもありがとうございます。 – MessatsuX

関連する問題