Я сталкивался с этим методом, любезно предоставил этот кодовый блок (Это чистый JS, но имеет некоторые недостатки)
Я переписал его с помощью JQuery и отредактировал, чтобы устранить проблемы с браузером (расстояния прокрутки, полученные из document
, а не body
), и включил preventDefault
, поскольку это устраняет проблему, когда перетаскивание иногда продолжалось после мышь отпущена.
var curYPos = 0;
var curXPos = 0;
var curDown = false;
$(document).on("mousemove", function (event) {
if (curDown === true) {
$(document).scrollTop(parseInt($(document).scrollTop() + (curYPos - event.pageY)));
$(document).scrollLeft(parseInt($(document).scrollLeft() + (curXPos - event.pageX)));
}
});
$(document).on("mousedown", function (e) { curDown = true; curYPos = e.pageY; curXPos = e.pageX; e.preventDefault(); });
$(window).on("mouseup", function (e) { curDown = false; });
$(window).on("mouseout", function (e) { curDown = false; });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img src="http://miriadna.com/desctopwalls/images/max/Ideal-landscape.jpg" />
Чистый JS оригинал (довольно сломанный, но включен для справки):
var curYPos = 0,
curXPos = 0,
curDown = false;
window.addEventListener('mousemove', function(e) {
if (curDown === true) {
window.scrollTo(document.body.scrollLeft + (curXPos - e.pageX), document.body.scrollTop + (curYPos - e.pageY));
}
});
window.addEventListener('mousedown', function(e) {
curDown = true;
curYPos = e.pageY;
curXPos = e.pageX;
});
window.addEventListener('mouseup', function(e) {
curDown = false;
});
<img src="http://miriadna.com/desctopwalls/images/max/Ideal-landscape.jpg" />