2016-11-24 8 views
4

Wie kann ich das Bildfenster schrittweise nach unten scrollen, während die Maustaste über ein position: fixed Element gedrückt wird?Allmählich scrollen auf Mousedown bis mouseup

+0

Scrollt der Mauszeiger beim Scrollen nicht von dem Element, das er gedrückt hält? Wenn Sie "auf einen Klick" statt auf "halten" verstanden haben, dann sollten Sie folgendes beachten: [Javascript smooth scroll OHNE Verwendung von jQuery] (https://stackoverflow.com/questions/10063380/javascript-smooth-scroll-without-the-use -of-jquery) oder [dies] (https://www.sitepoint.com/smooth-scrolling-vanilla-javascript/) –

+0

Danke, aber es wäre ein festes Element, das sie halten –

Antwort

2

Hier können Sie dies mit jQuery.animate() in Kombination erreichen mit setTimeout() und clearTimeout():

$('.button').on('mousedown', function() { 
    console.log('Start Animate'); 
    (function smoothSrcroll() { 
     console.log(Math.max($('html').scrollTop(), $('body').scrollTop())); 
     $('html, body').stop().animate({ 
      scrollTop: Math.max($('html').scrollTop(), $('body').scrollTop()) + 100 
     }, 1000, 'linear', function() { 
      window.timeout = setTimeout(smoothSrcroll(), 0); 
     }); 
    })(); 
}).on('mouseup', function() { 
    console.log('Stop Animate'); 
    $('html, body').stop(); 
    clearTimeout(window.timeout); 
}); 

CodePen Demo

Ich bin Targeting $('html, body'), so dass es in Firefox und Chrome funktionieren. Dies wird ein wenig schwierig, weil die animate() wegen der zwei Selektoren tatsächlich zweimal läuft. Um das zu lösen, habe ich jQuery.stop() verwendet. Da Firefox die $('html').scrollTop() verwenden kann und Chrome die $('body').scrollTop() verwendet, berechnete ich die Schrittweite mit Math.max(). Die Funktion wird nach Beendigung automatisch ausgeführt und verwendet clearTimeout() und jQuery.stop(), wenn die Maus losgelassen wird.

+0

Funktioniert gut, danke! Gibt es einen Weg, es ein wenig glatter zu machen? –

+0

@ScottHunter Es gibt zusätzliche Skripts, die zur Beschleunigung in der standardmäßigen jQuery-Bibliothek beitragen. Es gibt wirklich nur 3 Einstellungen: linear, swing und default. Sie können Skripts finden, die glattere Übergänge erstellen. – Daerik

Verwandte Themen