Я относительно новичок в jQuery, поэтому прошу прощения, если задаю элементарный вопрос, но у меня проблема с запуском событий. Прямо сейчас я пытаюсь создать своего рода инструмент панорамирования изображений, где пользователь может панорамировать изображение в любом направлении в окне просмотра (фиксированный div). При нажатии кнопки мыши функция начнет выполнять пару вычислений, а при перемещении мыши выполнит еще несколько вычислений перед передачей значений в

$(this).css('background-position', both);

Строка, где обе - это вновь рассчитанная позиция.

Это работает до этого момента, но у меня возникают проблемы с освобождением от события mousemove. После начального нажатия мыши и перемещения мыши я не могу отключить панорамирование с помощью мыши вверх, и пользователь может панорамировать изображение, не щелкая.

Вот основной скелет (#test относится к блоку просмотра):

$("#test").mousedown( function(e) {
                
/* Various Calculations*/
            
$(this).mousemove( function(f) {

/* More Calculations, variable 'both' is assigned new coord value */
                
$(this).css('background-position', both);
    });         
});

Я пытался прикрепить событие mouseup в разных местах, но я не уверен, где именно нужное место и как его освободить. Любая помощь приветствуется!

1
outcastillusion 20 Авг 2009 в 02:01

2 ответа

Для удаления события нужно отвязать его от объекта:

$("#test").unbind("mousemove");

Остальная часть вашего вопроса мне не понятна

2
mkoryak 20 Авг 2009 в 02:04
Извините, если это звучит запутанно. То, что я пытаюсь сделать, это в основном создать инструмент панорамирования изображения. У меня есть div размером около 200 x 200 пикселей с фоновым изображением, установленным в качестве изображения, которое я хочу панорамировать. Когда пользователь удерживает щелчок и перемещается, изображение также должно двигаться. Когда пользователь отпускает (нажимает кнопку мыши), изображение должно отпустить и остаться неподвижным (аналогично панорамированию в Google Книгах или Adobe Acrobat). Спасибо за совет, он помог!
 – 
outcastillusion
20 Авг 2009 в 03:55

В качестве альтернативы есть перетаскиваемый элемент в пользовательском интерфейсе jQuery, который может удовлетворить ваши потребности. Он включает события для запуска, остановки и перетаскивания.

Все зависит от того, хотите ли вы другую зависимость.

По крайней мере, вы можете изучить, как они выполняют свою последовательность событий, чтобы имитировать такое же поведение.

1
Marc 20 Авг 2009 в 02:20
Интересно, посмотрю. Спасибо за совет! Знаете ли вы, является ли ui.draggable.js популярной библиотекой? Я видел только одну или две страницы, использующие подобную функциональность. Такое ощущение, что такой классной библиотеки можно было бы избежать только из-за какой-то ошибки или проблемы =\
 – 
outcastillusion
20 Авг 2009 в 03:58
В библиотеке есть больше, чем просто перетаскивание, но вы можете настроить включенные плагины, чтобы уменьшить занимаемую площадь во время загрузки. Что касается ошибок/проблем, то им уделяется почти такое же внимание (я понимаю, что рисую широкой кистью в этом утверждении), что и ядру jQuery, imo, которое вы, кажется, принимаете как приемлемое.
 – 
Marc
20 Авг 2009 в 04:34
В качестве продолжения вы можете просмотреть следующее, чтобы не начинать с нуля: plugins.jquery.com/search/node/pan+and+zoom
 – 
Marc
20 Авг 2009 в 04:38