Ich weiß, das scheint seltsam, weil es bereits ein Update-Ereignis gibt. Aber ich verwende die Bibliothek touch-punch
, um die jQuery UI-Funktionen auf Touch-Geräten zu ermöglichen. Aber z. B. im Chrome-Browser des Nexus 7 wird das Update-Ereignis nicht ausgelöst. Deshalb versuche ich es zu beheben, indem ich das Ereignis sortupdate
aus dem Ereignis sortover
auslöst.Wie erhält man den Index eines Elements unter dem gezogenen Ereignis "sortover" mit jQuery UI Sortable?
Das Problem ist, dass ich nicht weiß, wie man den Index des Elements unter dem gezogenen Element erhält. ui.item
gibt nur den Index des gezogenen Elements zurück. Gibt es dafür eine eingebaute jQuery UI-Funktion? Den Index per Mouseover/Hover Checks zu erhalten, würde nicht funktionieren, da das gezogene Element größer ist als das mousecursor
. von Cursorposition die Elemente Index immer scheint auch sehr schwierig ...
Hier ist eine Geige: https://jsfiddle.net/8sjLw6kL/2/
Code: HTML:
<div id="sortable">
<div class="sortable"> bla </div>
<div class="sortable"> ble </div>
<div class="sortable"> blu </div>
</div>
JS:
var start_sort_index,
over_sort_index,
update_sort_index;
$('#sortable').sortable({
helper: 'clone',
containment: 'parent',
cursor: 'move'
});
$('#sortable').on('sortstart', function(event, ui){
start_sort_index = ui.item.index();
console.log('start: '+start_sort_index);
});
$('#sortable').on('sortover', function(event, ui){
over_sort_index = ui.item.index();
console.log('over: '+over_sort_index);
$('#sortable').trigger('sortupdate');
});
$('#sortable').on('sortover', function(event, ui){
update_sort_index = (typeof ui !== 'undefined')?ui.item.index():over_sort_index;
over_sort_index = undefined;
//my other code here
});
CSS:
#sortable{
width: 100%;
background-color: #ebebeb;
position: relative;
margin-top: 10px;
height: 60px;
}
.sortable{
padding: 5px 10px;
background-color: red;
margin: 5px;
float: left;
}
Der klassische Weg für unter jedem ziehbar Element immer zu '.hide' der Helfer,' .elementFromPoint' der Maus erhalten, dann '.show' der Helfer wieder. In diesem Fall wäre es jedoch wahrscheinlich besser herauszufinden, warum der post-update-Handler überhaupt nicht ausgelöst wurde. – blgt
Danke für den Tipp! Ich wünschte, ich würde wissen, warum das sortupdate-Ereignis manchmal nicht ausgelöst wird, aber ich konnte es noch nicht herausfinden. Die "elementFromPoint" -Funktion kann den Job nicht so einfach ausführen, weil der Cursor sich nicht an der Position befindet, an der sich die divs überlappen. Daher wählt er meistens das übergeordnete Element aus, selbst wenn set pointer-events: none und ui-sortable to pointer- Ereignisse: Automatisch. Die Berechnung zur Überlappung ist etwas kompliziert. ... – user2718671
... Zeiger Ereignisse funktionieren auch nicht IE und beim Versuch, die Position zu erhalten, kann es auch Unterschiede zwischen Touch und Maus geben. Zu kompliziert für ein kleines sortierbares Element. ;) Aber danke für den Tipp trotzdem! :) – user2718671