2009-04-08 3 views
11

В Jquery UI можно настроить элемент как перетаскивание, вызвавJquery UI, вызов начать перетаскивание вручную

$("#drag").draggable(); 

Но есть способ запуска и остановки функции перетаскивания вручную из другой функции? Ie

someOtherFunction = function() { 
    $("#drag").startdrag(); 
} 
yetAnotherFunction = function() { 
    $("#drag").stopdrag(); 
} 
+0

может быть, вы заинтересованы в scrollTo, потому что я не считаю, перетаскиваемым может перемещать объект без взаимодействия с мышью? – TStamper

+0

Я никогда не говорил, что не хочу использовать мышь. Я должен вызывать перетаскивание за пределами div, потому что он должен быть инициирован из файла Flash с помощью FScommand. – Jan

ответ

12

Ответы выше кажутся сложными.

$('.nonDraggableObjectWhichTriggersDrag').mousedown(function(e) { 
    $('.draggableObject').trigger(e); 
}); 
+0

Я не совсем уверен, что это сработало бы в моем первоначальном проекте (так как это связано с Flash и 'fsCommand'), но это ближе всего к рабочему решению, которое было опубликовано. В проекте я закончил загрузку над файлом Flash и установил div на кнопки флэш-памяти, вызывая команды флэш-памяти через 'fsCommand'. Не очень, но это сработало. – Jan

+1

Не работает для меня. – wh1t3cat1k

+1

+1 - Я знаю, что этот комментарий немного запоздал, но вместо этого следует использовать 'triggerHandler (e)'. Когда я использовал 'trigger', у меня закончилось переполнение стека из-за того, что у меня были другие функции/DOM. Изменение этого параметра на 'triggerHandler' разрешило эту проблему, потому что не произошло никакого барботажа. 'triggerHandler' также будет более эффективным. –

1

Начало перетаскивания начинается с скрипта, просматривающего события мыши. мышь вниз, а затем движение мыши. Если вы можете имитировать эти движения мыши с помощью Javascript (я не знаю, где, как, или даже если это возможно), тогда он должен сбить начало перетаскивания.

Примечание: только что было установлено, что YUI имеет способ имитировать перемещения мыши и щелчки мыши. Выезд http://developer.yahoo.com/yui/yuitest/#useractions

+0

Звучит слишком сложно. Может быть, это было бы легче выполнить с другими библиотеками? Может быть, prototype.js или что-то подобное? – Jan

+0

Пойдите для этого. Если прототип может имитировать события движения мыши, то это будет так же «сложно», как с yui. – DMCS

1

, чтобы остановить перетаскивание вы просто должны возвращать ложь в перетягивания обратного вызова, что-то вроде этого:

$("#unlock-handle").draggable({axis:'x', containment:'parent', drag:onDrag}); 

... 

var onDrag = function(e) {  
    if ($(this).position().left > 200) return false; 
}; 

Надеется, что это помогает :-)

1

я не найти способ запуска перетаскивая вручную, но я нашел обходное решение для моей подобной ситуации.

У меня была эта ситуация с двумя перекрывающимися изображениями (см. Изображение ниже), оба частично прозрачные. В начале (событии) draggable я хотел проверить, попадает ли он в прозрачные пиксели. Если это так, я посмотрел под ним еще один элемент, чтобы узнать, попал ли он в него. И если бы это было так, я хотел начать его перетаскивание.

enter image description here

решение? Я меняю порядок изображений на mousemove, а затем перетаскивается для этого самого верхнего изображения.

Для выбора элементов пиксельного точным, увидеть мой другой ответ на: registering clicks on an element that is under another element