2016-06-17 16 views
1

Ich habe einen Schieberegler von 6 Bildern, die ich nahtlos auf Mouseover wie ein Karussell durchlaufen möchte. Auf Mausbewegungen verschiebe ich sie nach links, bis sie außer Sichtweite sind. Wenn der erste außer Sichtweite ist, füge ich ihn an das Ende an. Aber wenn der erste an das Ende angehängt wird, kann ich jQuery nicht dazu bringen, colors.eq (0) auf das neue erste Bild zu aktualisieren. Er behält die Farben bei. Das ist die, die ich bereits am Ende angehängt habe. Wie kann ich jQuery mitteilen, dass eq (0) das neue erste Element sein soll?jQuery append eq() durchlaufen alle Elemente

images.on('vmousemove', function(event) {  
    $(this).each(function() { 
     var marginLeft = parseInt($(this).css('margin-left'), 10); 
     $(this).css("margin-left", "-=" +(speed % window.innerWidth/6)); 
     if (marginLeft <= -30) { 
      allImages.append(images.eq(0)); 
     } 
     }) 
    }) 
+0

Haben Sie das erste Element entfernen, nachdem Sie es am Ende angehängt? Wenn nicht, ist es immer noch als Element 0 vorhanden, obwohl es möglicherweise nicht sichtbar ist. –

+0

Durch das Verschieben von Elementen innerhalb des DOM wird die Elementsequenz innerhalb eines vorhandenen jQuery-Objekts nicht geändert. (Warum sollte es in Anbetracht dessen, dass ein jQuery-Objekt mehrere nicht verwandte Elemente enthalten könnte?) Anstatt 0 zu verwenden, könnten Sie eine Indexvariable verwenden, um zu verfolgen, welcher der aktuell am weitesten links liegende Punkt ist. Warum auch die .each() Schleife? Will $ (this) ein jQuery-Objekt mit nur einem Element sein? – nnnnnn

Antwort

0

Wie wäre es damit? Verwenden Sie DOMsubtreeModified Ereignis zu aktualisieren Farben Variable. Und vergessen Sie nicht, das mousemove Ereignis erneut auf die aktualisierten Farben zu binden.

var colors = $('.color'); 
 

 
$('.container').on('DOMSubtreeModified', function() { 
 
    colors = $('.color'); 
 
}); 
 

 
console.log('First element:' + colors.eq(0).attr('id')); 
 

 
$('.container').append(colors.eq(0)); 
 

 
console.log('First element:' + colors.eq(0).attr('id'));
.color { 
 
    background: green; 
 
    box-sizing: border-box; 
 
    color: white; 
 
    float:left; 
 
    margin-right: 5px; 
 
    padding: 15px; 
 
    text-align: center; 
 
    height: 50px; 
 
    width: 50px; 
 
} 
 
.color:nth-of-type(even) { 
 
    background: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<div class="container"> 
 
    <div class="color" id='1'>1</div> 
 
    <div class="color" id='2'>2</div> 
 
    <div class="color" id='3'>3</div> 
 
    <div class="color" id='4'>4</div> 
 
</div>

+0

Ich denke das OP versucht * Elemente * zu bewegen, keine Kopien zu machen. – nnnnnn

+0

Danke für Ihren Kommentar. – Anson