Dies ist eine Folge von einem previous question Ich fragte vor ein paar Wochen.Scroll-Validierung auf HTML5-Canvas-Elementen
Ich habe zwei Zeilen mit Scrollboxen, in denen jetzt eine Validierung vorhanden ist, um Scrollen über die erste Box hinaus zu verhindern, aber ich habe Schwierigkeiten, etwas Ähnliches in umgekehrter Richtung zu tun, um Scrollen zu vermeiden letzte Box.
Dies ist der Code, der das Scroll-Ereignis von einer Reihe Griffe:
first = Object.keys(boxes)[0];
lScroll += e.deltaY;
if (lScroll < 0) {
canlScroll = true;
} else {
canlScroll = false;
lScroll = 0;
}
Object.keys(boxes).forEach(function(key) {
if(canlScroll && boxes[key]['s'] == 'l') {
boxes[key]['y'] += e.deltaY;
}
});
if (!canlScroll && lScroll == 0) {
if (boxes[first]['y'] < 10) {
var delta = 10 - boxes[first]['y'];
Object.keys(boxes).forEach(function(key){
if(boxes[key]['s'] == 'l') {
boxes[key]['y'] += delta;
}
});
}
}
Voll Beispiel, hier zu arbeiten: https://jsfiddle.net/hbd6nL4e/1/
Das scheint Ihnen zu erlauben, weiter zu blättern, als ich will. Ich möchte, dass es aufhört, wenn sich die letzte Box am unteren Bildschirmrand befindet. Ich nehme an, dies könnte getan werden, indem man die Höhe des Canvas dem if hinzufügt, aber es scheint auch wieder nach oben zu springen, wenn es den Boden erreicht? – LoboDemon
Sie müssen nur die zweite Bedingung des ersten if ändern: if (lScroll <0 && (lScroll> = (Object.keys (boxes) .length/2) * (- 100))) zu etwas, das für Sie arbeiten könnte . Z.B. Wenn die Anzahl der Kästchen immer 12 ist, ändern Sie sie einfach in (-800). Das bedeutet, dass Sie berechnen müssen, wie viele Kästchen auf dem Bildschirm angezeigt werden sollen, und rechnen Sie. – iomv
Alternativ können Sie (Object.keys (boxes) .length/2 * 100) - Math.abs (lScroll) verwenden, um die Anzahl der angezeigten Boxen zu berechnen und das Scrollen zu stoppen, wenn die Anzahl niedriger ist. Die Möglichkeiten sind reichlich – iomv