Yep, c'est pas trop compliqué.
Au mousedow, tu enregistres la postion x,y de l'évènement. Tu lances un timer qui va appeler une fonction f et se relancer (timer récursif).
Au mouseup, tu cancel le timer.
bon, setTimeout c'est pas forcément le meilleur pour lancer une fonction asynchrone mais bon, y en a d'autres
voilà, pour implémenter currentScrollLeft (et Top) tu as $.scrollLeft sur jQuery qui le fait bien, tu peux copier leur implémentation (et si tu utilises jQuery bah c'est encore plus simple)
pareil pour $.scrollLeft(value) qui est un setter afin d'implémenter setScrollLeft
et pour getMouseX() je ne sais pas mais ça doit être natif et simple.
Sinon bien sur au lieu du timer il faut tester avec onMouseMove qui devrait être plus gourmand mais plus fluide
edit: et je me suis probablement planté dans l'algo (genre soustraction au lieu de addition ou des mauvais remplacements de variables), mais en gros tu as compris le truc: tu calcules de combien de pixels tu as bougé (éventuellement en négatif) et tu ajoutes cette valeur à la valeur du scroll de ton div ; pour les x puis pour les y.
Au mousedow, tu enregistres la postion x,y de l'évènement. Tu lances un timer qui va appeler une fonction f et se relancer (timer récursif).
Au mouseup, tu cancel le timer.
// je code à l'arrache dans la réponse rapide donc bon ...
var x, y, currentX, currentY,
div = document.getMachinById('qzdqzdqzd'),
timer
function onDown(evt) {
x = evt.clientX, y = evt.clientY,
currentX = currentScrollLeft(div), currentY = currentScrollTop(div)
timer = timerLoop()
}
function onUp(evt) {
clearTimeout(timer)
}
function timerLoop() {
timer = setTimeout(function(){
// ici on check le déplacement
var newX = getMouseX(),
newY = getMouseY(),
var moveX = newX - x,
moveY = newY - y,
x = newX,
y = newY,
currentX += moveX,
currentY += moveY,
setScrollLeft(currentX)
setScrollTop(currentY)
timerLoop()
},1)
}
// alors là chuis pas du tout sur pour la syntaxe, je le fais en mode hideux,
// il faut bien entendu utiliser les event listeners hein !
// PS: c'est quoi ces "strong" moisis qui se rajoutent dessous ?
div.onmousedown = onDown, div.onmouseup = onUp
bon, setTimeout c'est pas forcément le meilleur pour lancer une fonction asynchrone mais bon, y en a d'autres
voilà, pour implémenter currentScrollLeft (et Top) tu as $.scrollLeft sur jQuery qui le fait bien, tu peux copier leur implémentation (et si tu utilises jQuery bah c'est encore plus simple)
pareil pour $.scrollLeft(value) qui est un setter afin d'implémenter setScrollLeft
et pour getMouseX() je ne sais pas mais ça doit être natif et simple.
Sinon bien sur au lieu du timer il faut tester avec onMouseMove qui devrait être plus gourmand mais plus fluide
edit: et je me suis probablement planté dans l'algo (genre soustraction au lieu de addition ou des mauvais remplacements de variables), mais en gros tu as compris le truc: tu calcules de combien de pixels tu as bougé (éventuellement en négatif) et tu ajoutes cette valeur à la valeur du scroll de ton div ; pour les x puis pour les y.