ваш div "divInnerDiv" должен иметь стиль
positition: relative;
для img с
position: absolute;
для позиционирования от источника div. в противном случае, он абсолютно позиционируется с начала страницы. я думаю, что вы также можете сойти с абсолютного позиционирования вашего div, если вы хотите разместить его вручную, а не в потоке документа.
у вас есть некоторые проблемы с firefox / chrome, но пора возвращаться домой, и это по крайней мере предотвратит выпадение вашего изображения из контейнера, как только вы к нему прикоснетесь.
edit: проблемы с Firefox / Chrome
в функции mouseMove, где вы устанавливаете положение элемента, для firefox и chrome требуются единицы со значением. это должно выглядеть примерно так:
dragObject.style.top = (mousePos.y - mouseOffset.y).toString() + 'px';
dragObject.style.left = (mousePos.x - mouseOffset.x).toString() + 'px';
Существует также общая проблема с тем, как скрипт определяет, куда перемещать элемент, но я не уверен, что это сейчас.
edit2: как исправить нервное изображение
мы собираемся немного изменить процедуры. Вместо того, чтобы размещать изображение на основе того, насколько далеко мышь отошла от последнего события перемещения, мы увидим, где мышь сравнивается с тем, где она находилась при запуске mousedown, и переместим изображение так далеко от места, где оно началось. *
добавить новую переменную (вверху) для хранения начальных координат элемента img
var imgStartLoc = null;
мы установим это в функции onmousedown (возможно, это не самый чистый способ сделать это, но это работает)
imgStartLoc = {
x: isNaN(parseInt(dragObject.style.left)) ? 0 : parseInt(dragObject.style.left),
y: isNaN(parseInt(dragObject.style.top)) ? 0 : parseInt(dragObject.style.top)
};
также в функции mousedown заменить
mouseOffset = getMouseOffset(this, ev);
с
ev = ev || window.event;
mouseOffset = mouseCoords(ev);
так как мы хотим знать, где находится мышь на странице, а не в div.
в функции mouseMove изменить верхнюю / левую строки назначения на
var mouseDelta = { x: mousePos.x - mouseOffset.x, y: mousePos.y - mouseOffset.y }
dragObject.style.top = (imgStartLoc.y + mouseDelta.y).toString() + 'px';
dragObject.style.left = (imgStartLoc.x + mouseDelta.x).toString() + 'px';
все должно быть хорошо после этого.