Zoals ik in een ander topic al zei, ben ik bezig met een custom scrollbar. Werkt opzich prima, de slider is te verschuiven, en er zijn ook knopjes om mee te scrollen. In die laatste zit echter het probleem. Ik zal eerst even mn code plaatsen:
Ik heb de niet relevante code weggelaten, ook wat variabele-declaraties, dus begin daar maar niet over te zeuren
.
Zoals ik al zei, dit werkt opzich prima. Het probleem is alleen dat als ik met de knopjes aan het scrollen ga, dat dan de slider niet helemaal tot het einde komt. Dat komt door deze if-statement:
Omdat in het geval dat ik de knoppen gebruik 'by' 5 is, moet het maar net het toeval zijn dat de lengte 'rail.offsetWidth - slider.offsetWidth' een veelvoud van 5 is. Ik kan natuurlijk scrollspeed wel op 1 zetten oid, maar dan schiet het scrollen weer voor geen meter op. Hoe los ik dit nou elegant op?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| var setScroll = false;
var drag = false;
var scrolling = false;
var scrollSpeed = 5;
function init() {
document.onmousemove = slide;
document.onmouseup = function() { drag = false; stopScroll(); };
slider.onmousedown = function() { drag = true; };
scrollLeft.onmousedown = function() { scroll('left'); };
scrollRight.onmousedown = function() { scroll('right'); };
}
function scroll(direction) {
if (scrolling) { stopScroll(); }
if (direction == 'left')
scrolling = setInterval('doscroll(' + -scrollSpeed + ')', 20);
else if (direction == 'right')
scrolling = setInterval('doscroll(' + scrollSpeed + ')', 20);
}
function doscroll(by) {
//Scroll slider
var current = parseInt(slider.style.left, 10);
if (isNaN(current))
current = 0;
current += by;
if (current >= 0 && current < rail.offsetWidth - slider.offsetWidth)
slider.style.left = current + 'px';
//Scroll pictures
var move = -1 * slider.offsetLeft * (1 / scrollLength);
pictures.style.left = parseInt(move) + 'px';
}
function slide(e) {
if (drag == true && setScroll == true) {
getMouse(e);
dX = X - prevX;
if (isNaN(dX))
dX = 0;
doscroll(dX);
prevX = X;
return false;
}
}
onload = init(); |
Ik heb de niet relevante code weggelaten, ook wat variabele-declaraties, dus begin daar maar niet over te zeuren
Zoals ik al zei, dit werkt opzich prima. Het probleem is alleen dat als ik met de knopjes aan het scrollen ga, dat dan de slider niet helemaal tot het einde komt. Dat komt door deze if-statement:
code:
1
2
3
4
| current += by;
if (current >= 0 && current < rail.offsetWidth - slider.offsetWidth)
slider.style.left = current + 'px'; |
Omdat in het geval dat ik de knoppen gebruik 'by' 5 is, moet het maar net het toeval zijn dat de lengte 'rail.offsetWidth - slider.offsetWidth' een veelvoud van 5 is. Ik kan natuurlijk scrollspeed wel op 1 zetten oid, maar dan schiet het scrollen weer voor geen meter op. Hoe los ik dit nou elegant op?