2011-12-26 40 views
15

là có thể bắt đầu kéo bằng phần tử khác không?Bắt đầu kéo bằng phần tử khác

Ví dụ: http://jsbin.com/igohod/edit#preview

Tôi muốn bắt đầu kéo #ct khi tôi bấm vào #icon. Đáng chú ý, #icon không phải là hậu duệ của số #ct trong cây DOM.

html

<div style="position:absolute; top:20px; left:10px;"> 
    <div id="icon">Icon</div> 
    </div> 

    <div style="position:absolute; top:20px; right:10px;"> 
    <div id="ct">start this drag when you drag the icon</div> 
    </div> 

js

$(document).ready(function() 
{ 
    // $('#icon').draggable(); 
    $('#ct').draggable(); 
}); 


UPDATE:
dụ mới với sắp xếp được
http://jsbin.com/igohod/8/edit#preview

Giải pháp
http://jsbin.com/igohod/13/edit#preview

Trả lời

11

này hoạt động, nhưng luôn luôn gắn nó vào cuối danh sách:

$(document).ready(function() { 
    $('#icon').mousedown(function(e) { 
    $('#ct').trigger(e); 
    }); 
    $('#dropHere').sortable({ placeholder: 'ui-state-highlight' }); 
    $('#ct').draggable({ connectToSortable: '#dropHere' }); 

Tôi cũng đã thêm phong cách CSS và giảm các thẻ div lồng nhau:

#dropHere div{width:10; height:10; padding:10px; border:1px solid #000;} 

http://jsbin.com/igohod/9/

+0

Tôi nghĩ rằng lý do div mới chỉ xuất hiện ở dưới cùng của div sắp xếp là các tọa độ chuột và div mới không bao giờ trong div sắp xếp với nhau ... – shaun5

+0

Tôi đã chính xác. Nếu div được di chuyển đến con trỏ, có thể sắp xếp hoạt động bình thường. http://jsbin.com/igohod/11/ – shaun5

+0

Perfekt! Tôi chỉ cần thêm cursorAt: '{top: 15, left: 225}' vào draggable và nó hoạt động rất tốt! – user970727

3

Đây là một giải pháp khả thi:

$('#icon').draggable({drag: function(event, ui) { 
    $("#ct").parent().css("top", 20 + parseInt($(this).css("top"))); 
    $("#ct").parent().css("left", 200 + parseInt($(this).css("left"))); 
}}); 

Chỉ cần cập nhật các giá trị trái và đỉnh #ct khi bạn di chuyển biểu tượng xung quanh.

+0

Tôi không muốn thay đổi vị trí từ biểu tượng:/... Cảm ơn câu trả lời nhanh. – user970727

+0

Ah, ok. Đây là giải pháp: http://jsbin.com/igohod/5 – kufi

+0

Tôi xin lỗi, ví dụ của tôi không tốt lắm. Tôi muốn thả #ct vào danh sách có thể sắp xếp. Đó là lý do tại sao tôi cố gắng "bắt đầu" draggble với một yếu tố khác. đây là một ví dụ: http://jsbin.com/igohod/6/edit#javascript,html – user970727

3

Một giải pháp có thể khác bằng cách sử dụng một trình trợ giúp để gói gọn đối tượng có thể kéo được. Bằng cách này bạn không cần phải nắm bắt bất kỳ sự kiện chuột hoặc thiết lập bất kỳ vị trí tùy ý. jQuery xử lý việc này cho bạn.

$(document).ready(function() 
{ 

    $('#dropHere').sortable({ 
    placeholder: 'ui-state-highlight', 
    receive: function(event, ui) { 
     $(this).find('.drophandle').replaceWith(ui.helper); 
     $(ui.helper).attr('style',''); 
    } 
    }); 

    $('#icon').addClass('drophandle').draggable({ 
     connectToSortable: '#dropHere', 
     cursorAt: { top: 15, left: 225 }, 
     helper: function() { return $('#ct')[0]; } 
    }); 

}); 

http://jsbin.com/igohod/25

Các vấn đề liên quan