Событие mouseup не всегда срабатывает

javascript
Вопрос:У меня есть функция, которая позволяет мне что-то перетаскивать. Мои js: $(function() { $( svgcanv ).css('cursor', '-moz-grab'); var leftButtonDown = false; $(document).mousedown(function(e){ console.log('pressed'); // Left mouse button was pressed, set flag if(e.which === 1) leftButtonDown = 1; }); $(document).mouseup(function(e){ console.log('released'); // Left mouse button was released, clear flag leftButtonDown = 0; $( svgcanv ).css('cursor', '-moz-grab');

Вопрос:

У меня есть функция, которая позволяет мне что-то перетаскивать. Мои js:

$(function() { $( svgcanv ).css(‘cursor’, ‘-moz-grab’); var leftButtonDown = false; $(document).mousedown(function(e){ console.log(‘pressed’); // Left mouse button was pressed, set flag if(e.which === 1) leftButtonDown = 1; }); $(document).mouseup(function(e){ console.log(‘released’); // Left mouse button was released, clear flag leftButtonDown = 0; $( svgcanv ).css(‘cursor’, ‘-moz-grab’); firstDragCanvas = 1; }); $( mainGroup ).mousemove(function(e){ if (leftButtonDown == 1) { $( svgcanv ).css(‘cursor’, ‘-moz-grabbing’); var posX = e.pageX; var posY = e.pageY; if (firstDragCanvas == 0) { posX = e.pageX — canvasPosX; posY = e.pageY — canvasPosY; } else { canvasPosX = e.pageX — translateX; canvasPosY = e.pageY — translateY; posX = translateX; posY = translateY; firstDragCanvas = 0; } if (posX > 0) posX = 0; if (posX < -canvasWidth + $(«#holder»).width()) posX = -canvasWidth + $(«#holder»).width(); translateX = posX; translateY = posY; mainGroup.setAttribute(«transform»,»translate(«+posX+»,»+posY+») scale(«+currentZoomLevel+»)»); } }); });

Проблема заключается в том, что событие mouseup не всегда запускается. Остальные 2 отлично работают. Первый раз, когда я двигаюсь, все работает нормально. Но во-вторых, если я нажимаю и ташу сразу, мышь не запускается. Если я перестаю перетаскивать, нажмите где-нибудь, а затем снова перетяните script снова.

Моя консоль (с двумя перетаскиваниями, затем нажмите и снова перетащите. обратите внимание на две последовательные “нажатые” строки – занесенные в журнал):

enter image description here

И нет… это SVG и нужно перетащить внутрь, поэтому нельзя использовать jQuery draggable.

Лучший ответ:

Попробуйте добавить e.preventDefault(); в каждый, чтобы предотвратить любое действие UA по умолчанию.

например.

$(document).mousedown(function(e){ e.preventDefault(); console.log(‘pressed’); // Left mouse button was pressed, set flag if(e.which === 1) leftButtonDown = 1; });

и т.д.

Оцените статью
Добавить комментарий