2015-07-27 15 views
6

Mam div, który ma contenteditable = "true" i który zawiera niektóre html. Ten html może zawierać obrazy.Otrzymuj powiadomienia o przeciągniętych obrazach w treści div.

Od contenteditable = "true" użytkownik może przenosić obrazy, przeciągając je do nowej pozycji. Ale potrzebuję, aby mój kod był powiadamiany za każdym razem, gdy obraz jest przenoszony, w taki sposób, w jaki otrzymuję zarówno element obrazu, który jest przenoszony, jak i docelowy węzeł, w którym obraz jest upuszczany. Jak mogę to zrobić?

Moje obecne rozwiązanie dodaje do elementu div div detektor upuszczania, który jest contenteditable, a następnie dostaję zdarzenie drop za każdym razem, gdy użytkownik przenosi obraz, ale nie mogę uzyskać węzła dom z obrazem, który użytkownik przeniósł.

Również: Przeciąganie obrazu, wydaje się skopiować węzeł DOM, zamiast go przenosić. Czy to prawda? (Testowane w firefox).

+0

pokażesz nam swój kod, a jeśli naprawdę chcesz, aby uczynić nas szczęśliwymi nawet stworzyć http://jsfiddle.net – caramba

+0

jsfiddle jest nieco skomplikowana, bo używam gwt (Googles java do kompilatora javascript). Moje obecne, prawie działające rozwiązanie jest napisane w Javie. – MTilsted

Odpowiedz

4

Proponuję po czystym rozwiązaniu JavaScript

HTML:

<div id="space" contenteditable="true"> 
    Hello <img width="300" class="contentImg" src='http://www.independent.co.uk/incoming/article9859555.ece/alternates/w620/Dr-Talyor.jpg'/> dude! 
</div> 

CSS:

#space { 
    width: 500px; 
    height: 500px; 
    background-color: #000000; 
    color: #ffffff; 
} 

JavaScript:

var draggedImg; 
document.addEventListener("dragstart", function(event) { 
    // IE uses srcElement, others use target 
    var targ = event.target ? event.target : event.srcElement; 
    if (targ.className == 'contentImg'){ 
     draggedImg = event.target; 
    } 
}, false); 

document.addEventListener("dragend", function(event) { 
    if(draggedImg){ 
     alert("It's moved!"); 
     console.log('Here is data', draggedImg); 
     draggedImg = null; 
    } 
}, false); 

Musisz znaleźć węzeł obrazu w zmiennej draggedImg.

Proszę przejrzeć pracy przykład tutaj: http://jsfiddle.net/o09hLtch/2/

+0

Podoba mi się pomysł, ale jeśli spróbuję przykładu w jsfiddle i przesunąć obrazek o 20 pikseli w lewo, otrzymuję to moja konsola: – MTilsted

+0

Podoba mi się ta koncepcja i wygląda na to, że działa. Krótka notka: powinieneś przenieść alert poniżej parametru draggedImg = null, w przeciwnym razie otrzymasz nieskończoną rekurencję w Firefoksie. – MTilsted

+0

Dzięki za notatkę. Ten alert jest po prostu sposobem na wyświetlenie komunikatu o zdarzeniu. Może być łatwo usunięty lub zastąpiony przez konsolę.log lub inną logikę obsługi tego zdarzenia. –

0

jQueryUI funkcji draggable i droppable interakcji. Przeciąganie ma wartość drag event, która daje element przeciągany, a opcja droppable ma wartość drop event, która zawiera upuszczony element oraz miejsce jego upuszczenia.

Krótki przykład: clickety

$('#content .dr').draggable(
{ 
    addClasses: false, 
    drag: function(event, ui) 
    { 
     $('#notify').text('Bird (#' + $(this).attr('id') + ') being dragged: ' + JSON.stringify(ui)); 
    }, 
    stop: function(event, ui) 
    { 
     $('#notify').text(''); 
    } 
}); 
0

myślę, że patrząc na to,

$(function() { 
$(".image").draggable({helper: 'original'}); 
    $(".container").droppable({ 
     drop: function (event, ui) { 
     $(this).append(ui.draggable.css({position: 'static'})); 
     alert('dropped!'); 
    } 
}); 
}); 

Dla JSFiddle Demo Let's see

Good Luck [ '}

Powiązane problemy