私のドラッグとの2つの問題がli
のdiv
へのドロップには問題があります。divでドラッグアンドドロップjquery UI、またはdivに
最初に、私はdivにテキストをドロップしていますが、うまくいきません。私は行の中の文字を判別するためのより良い関数が必要です。
第2 - 私はdivに既にドロップされた要素の上に要素をドロップするたびに、私は別のものにドロップすると、その要素の終わりまたは最初の位置を与える機能が必要です。
ここで問題を見るのに役立つフィドルです。 Link to fiddle
ここでのjQueryコード:
var i = 0;
$(".draggable").draggable({
connectToSortable: '#fullText',
revert: "invalid",
helper: "clone",
cursor: "pointer"
});
$("#createButton").click(function(e) {
$("#draggableList ul").append('<li class="draggable" style="border:1px solid;padding:1px 5px" >' + $('#word').val() + '</li>');
$(".draggable").draggable({
connectToSortable: '#fullText',
revert: "invalid",
helper: "clone",
cursor: "pointer"
});
});
$('#fullText').droppable({
drop: function(e, ui) {
var height = $('#fullText').height();
var line_height = $('#fullText').css('line-height');
line_height = parseFloat(line_height);
var lines = height/line_height;
var height = $('#fullText').height();
var lineHeight = $('#fullText').css('line-height');
lineHeight = parseFloat(lineHeight);
var dropPositionX = event.pageX - $(this).offset().left;
var dropPositionY = event.pageY - $(this).offset().top;
// Get mouse offset relative to dragged item:
var dragItemOffsetX = event.offsetX;
var dragItemOffsetY = event.offsetY;
// Get position of dragged item relative to drop target:
var dragItemPositionX = dropPositionX - dragItemOffsetX;
var dragItemPositionY = dropPositionY - dragItemOffsetY;
var lineNo = Math.round(dragItemPositionY/lineHeight);
var charWidth = getCharWidth(this);
var charactersinline = Math.round($('#fullText').width()/charWidth);
//var chartPerrRow=Math.round(length/lineNo);
// var el = document.getElementById("fullText"),
// lines = el.innerHTML.split("\n");
var position = (Math.round(ui.offset.left/charWidth));
position = position + (charactersinline * (lineNo));
position = (position - 1 >= 0) ? position - 1 : position;
i += 1;
ui.draggable.remove();
document.getElementById('fullText').innerHTML = $(this).html().substr(0, position + 1) + '<p style="padding:0; margin:0;display:inline;" id="' + i + '" contenteditable="false" class="draggableP" > ' + ui.draggable.text() + '</p> ' + $(this).html().substr(position + 1);
$(".draggableP").draggable({
connectToSortable: '#fullText',
revert: "invalid"
});
ui.draggable.remove();
},
out: function(event, ui) {
// alert("out");
},
over: function(event, ui) {
}
});
function getCharWidth(ele) {
var f = window.getComputedStyle(ele)['font'],
o = $('<div>' + ele.textContent + '</div>')
.css({
'position': 'absolute',
'float': 'left',
'white-space': 'nowrap',
'visibility': 'hidden',
'font': f
})
.appendTo($('body')),
w = o.width()/ele.textContent.length;
o.remove();
return w;
}
おかげ
thks、それは私が必要とするほとんどdoindです、私はドロップされたテキストをテキストの間にドロップした後再びdragglableにする必要があります。 – edounl
@edounlこれはできません。 '.new'やすべての単語の' span'ラップを保持することでこれを行うことができます。あなたの最終目標が何であるかははっきりしていないので、どちらが最善であるか分かりません。 – Twisty
には、文字をカウントする方法、またはdivの行にある単語はありますか?私はすでに、行数とそれが落とされた行を見つけました。 – edounl