Я использую kineticjs для рисования виджета на холсте. Этот виджет имеет ширину 600 пикселей и состоит из нескольких прямоугольников (по умолчанию 24). На этот прямоугольник можно перетащить другой, назовем его «курсор».
Вместо плавного перетаскивания я хочу, чтобы курсор переходил к другим прямоугольникам только тогда, когда моя мышь находится достаточно далеко (например, ступенчатое перетаскивание, если хотите).
Например, если курсор находится на 0,0, а у меня всего 24 прямоугольника, я хочу, чтобы мой курсор перемещался к следующему прямоугольнику только тогда, когда моя мышь находится на 25,0 (600 пикселей / 24 прямоугольника = 25 пикселей).
Итак, чтобы сделать это, я реализовал:
cursor.setDragBoundFunc(function(pos){
var caseSize = WIDTH / caseNum;
var posX = Math.round(pos.x/caseNum) * caseSize;
if(posX > (WIDTH - caseSize)) {
posX = WIDTH - caseSize;
}
if(posX < 0 ) {
posX = 0;
}
return {
x: posX,
y: cursor.getAbsolutePosition().y
}
});
Проблема в том, что pos.x
представляет не положение мыши на холсте, а положение мыши с начала события перетаскивания (pos будет равно 0,0, даже если я начну перетаскивание с середины холста).
Вот пример проблемы: http://jsfiddle.net/H9rpz/
Как я могу получить положение мыши на холсте в setDragBoundFunc()
?
Спасибо
console.log(pos)
для регистрации содержимогоpos
в вашем браузере. Затем вы можете осмотреть объект и посмотреть, содержит ли он то, что вам нужно. - person Jan   schedule 14.11.2012pos
на случай, если он содержит больше переменных. Но это не так, просто х и у... - person Jan   schedule 14.11.2012draw
, что приводит к созданию нового холста в DOM. - person Shmiddty   schedule 14.11.2012