Sie jQuery verwenden können animate
Funktion einen reibungslosen-Scrolling-Effekt auf click
oder mouseover
zu erreichen:
var step = 25;
var scrolling = false;
// Wire up events for the 'scrollUp' link:
$("#scrollUp").bind("click", function(event) {
event.preventDefault();
// Animates the scrollTop property by the specified
// step.
$("#content").animate({
scrollTop: "-=" + step + "px"
});
}).bind("mouseover", function(event) {
scrolling = true;
scrollContent("up");
}).bind("mouseout", function(event) {
// Cancel scrolling continuously:
scrolling = false;
});
$("#scrollDown").bind("click", function(event) {
event.preventDefault();
$("#content").animate({
scrollTop: "+=" + step + "px"
});
}).bind("mouseover", function(event) {
scrolling = true;
scrollContent("down");
}).bind("mouseout", function(event) {
scrolling = false;
});
function scrollContent(direction) {
var amount = (direction === "up" ? "-=1px" : "+=1px");
$("#content").animate({
scrollTop: amount
}, 1, function() {
if (scrolling) {
// If we want to keep scrolling, call the scrollContent function again:
scrollContent(direction);
}
});
}
Arbeitsbeispiel: http://jsfiddle.net/andrewwhitaker/s5mgX/
(Du musst um die mouseover
und mouseout
Ereignisse zu deaktivieren, um die Auswirkungen des Ereignishandlers click
ordnungsgemäß anzuzeigen)
Wie es funktioniert:
- die oben erwähnte
animate
Funktion verwendet um einen bestimmten Betrag auf Klick zu bewegen reibungslos.
- Verwendet ein Flag, um kontinuierliches Scrollen zu aktivieren, wenn der Ereignishandler
mouseover
aufgerufen wird, und das Scrollen beim Ereignishandler der Verbindung mouseout
zu deaktivieren.
- Wenn
scrollContent
aufgerufen wird, wenn das scrolling
Flag noch true
ist, nachdem die Animation abgeschlossen ist, animieren Sie erneut in der gleichen Richtung. Der Rückruffunktionsparameter von animate
ermöglicht es uns, eine Aktion auszuführen, nachdem die Animation abgeschlossen wurde.
Andrew - du rockst. Große Erklärung und Lösung. – sevens
@sevens: Danke! Froh, dass es für dich funktioniert hat. –