Это не ошибка как таковая, это особенность.Это все вопрос определений.Вы определили допуск ваших указателей для предметов, которые могут быть помечены, согласно документам:
указатель : указатель мыши перекрывает пометку
Когда указатель мыши находится в точке (10,10), а верхний левый угол окна заканчивается в (10,10), это перекрывается?Это зависит от вашего определения.Определение jQueryUI - сильное неравенство или сильное перекрытие ( см. соответствующий код ).Это имеет смысл (для меня), так как я не в поле, если я только на краю, поэтому я не хотел бы, чтобы событие запускалось.
Хотя, если для ваших целей вам требуется слабоенеравенство в условии перекрытия (т.е. слабое перекрытие), вы можете изменить эту строку кода в вашем источнике или переопределить ее, добавив:
$.ui.isOverAxis = function( x, reference, size ) {
return ( x >= reference ) && ( x <= ( reference + size ) );
};
Рабочий пример: http://jsfiddle.net/vwLhD/8/
Имейте в виду, что со слабым неравенством возникают другие препятствия на пути: ваше событие out
сработает после вашего события over
, поэтому у вас может быть два события over до того, как сработает один out
.Это не так сложно, но вам нужно убедиться, что вы имеете дело с этим делом.
ОБНОВЛЕНИЕ:
Важно отметить, что если вы добавите код Iвставленный выше, он повлияет на все другие виджеты пользовательского интерфейса в области $
, если это важно.Возможно, подузел $
мог бы этого избежать.
В любом случае, у меня есть второй обходной путь, который полностью решит вышеуказанную проблему, и теперь при каждом движении мыши указатель находится внутри или вне каждого элемента исключительно:
$.ui.isOverAxis2 = function( x, reference, size ) {
return ( x >= reference ) && ( x < ( reference + size ) );
};
$.ui.isOver = function( y, x, top, left, height, width ) {
return $.ui.isOverAxis2( y, top, height ) && $.ui.isOverAxis( x, left, width );
};
Рабочий пример: http://jsfiddle.net/vwLhD/10/
По сути, я сделал верхнее условие слабым неравенством, а нижнее - сильным.Таким образом, границы полностью соседствуют.Теперь события происходят практически идеально.Почти и не полностью, потому что плагин по-прежнему проходит по порядку в буксируемых элементах, поэтому, если я перетаскиваю сверху вниз, порядок запуска хорош, потому что сначала он обнаруживает, что я покинул верхний элемент, а затем обнаруживает, что я вошел внижний элемент, в то время как при перетаскивании снизу вверх порядок стрельбы меняется на противоположный - сначала стреляет, входя в верхний, и только потом оставляя нижний.
Разница между этим и предыдущим обходным решением заключается в том, что даже в половине случаевпорядок не хороший, все происходит в один тик, то есть овер-аут или аут-аут всегда вместе, пользователь никогда не может застрять, как в исходном случае и первом обходном пути.
Вы можете дополнительно отточитьэто должно быть абсолютно идеально, если изменить код пользовательского интерфейса для циклического перебора элементов вначале в соответствии с теми, над которыми наведена мышь, и только затем с остальными (в функции $.ui.ddmanager
).Таким образом, мышь уйдет всегда первым.В качестве альтернативы вы можете поменять порядок и получить обратный порядок;все, что подходит вам лучше.
Это определенно решит вашу проблему полностью.