Вы присваиваете новое значение переменной
lastPosY уже после того, как вывели предыдущее значение в консоль, так как предыдущее значение равно 0, то и в консоль всегда попадает 0.
Можно пройтись дебаггером в Chrome DevTools и быстро понять, что происходит.
function move_modal(ev) {
console.log(lastPosY); // Шаг 3. выводиться значение из Шага 1
if (!isDragging) {
isDragging = true;
lastPosY = modal_addproduct.offset().top; // Шаг 4. lastPosY === modal_addproduct.offset().top
}
// Шаг 5. console.log(lastPosY) Выведеться информация из Шага 4
var posY = ev.gesture.deltaY + lastPosY;
modal_addproduct.css('top', posY + "px");
if (ev.isFinal) {
isDragging = false;
}
}
var lastPosY = 0; // Шаг 1. lastPosY === 0
var isDragging = false;
var modal_header = $('.modal-header');
var modal_addproduct = $('#addproduct');
modal_header.hammer({direction: Hammer.DIRECTION_ALL, threshold: 0}).bind("pan", function (ev) {
move_modal(ev); // Шаг 2. вызываем функцию
});
Вот облегченный пример того, что происходит
function move_modal(ev) {
console.log(lastPosY) // 0
lastPosY = 4;
console.log(lastPosY) //4
}
var lastPosY = 0;
move_modal();