Also hier, ich "verschmolzen" die beiden Pfeil-Handler.
Dann wird eine Berechnung benötigt, um die "Scroll" -Geschwindigkeit basierend auf der zu scrollenden Breite zu bestimmen, die nicht immer 100% der Breite des Elements betragen darf.
Mit diesem Skript können Sie leicht eine Geschwindigkeit für 100% Scrollen bestimmen.
Dann berechnet es die Geschwindigkeit, wenn bereits eine Strecke gescrollt ist.
$(document).ready(function(){
function moveit(arrow){
// Adjust you delay here
var delay = 2000; // delay to scroll 100%
var animationDelay;
var slider = arrow.siblings(".g_scroll");
var distance = slider.width();
var scrolled = slider.scrollLeft()+1; // +1 is to avoid infinity in the math below
if(arrow.hasClass("scroller_l")){
distance = -distance;
animationDelay = -distance * (-distance/delay)*(-distance+scrolled);
}else{
animationDelay = distance * (distance/delay)*(distance-scrolled);
}
slider.stop().animate({scrollLeft:distance}, animationDelay, 'linear');
}
function stop(arrow){
arrow.siblings(".g_scroll").stop();
}
$('.scroller_l, .scroller_r').hover(function(){
moveit($(this));
},function() {
stop($(this));
});
}); // ready
CodePen
--first answer--
Erstens können Sie nicht das gleiche id
mehr als einmal verwendet werden.
So entfernte ichund id="right"
von Ihrem HTML.
Jetzt ist der Trick zu übergeben, welcher Pfeil auf Ihre Funktionen mit $(this)
schwebt.
Und finden Sie das .g_scroll
Element, das ein Geschwister davon ist.
$(document).ready(function(){
function loopRight(arrow){
arrow.siblings(".g_scroll").stop().animate({scrollLeft:'+=20'}, 'fast', 'linear', loopRight);
}
function loopLeft(arrow){
arrow.siblings(".g_scroll").stop().animate({scrollLeft:'-=20'}, 'fast', 'linear', loopLeft);
}
function stop(arrow){
arrow.siblings(".g_scroll").stop();
}
$('.scroller_r').hover(function(){
loopRight($(this));
},function() {
stop($(this));
});
$('.scroller_l').hover(function(){
loopLeft($(this));
},function() {
stop($(this));
});
});
CodePen
Das sieht gut aus! Einziges Problem ist jetzt, dass der Hover ausgelöst wird, um vorzeitig zu stoppen - irgendwelche Ideen? – Scott
Es scrollt + oder - 20 px ... Sie könnten es auf die Slider-Breite wie in diesem [CodePen v2] (https://codepen.io/Bes7web/pen/yXbaYY?editors=0010) –
fast perfekt einstellen! Jetzt wird die Geschwindigkeit jedes Mal zurückgesetzt, wenn ich einen bestimmten Betrag scrolle. dh wenn die verbleibende Schieberbreite verkürzt wird, wird die Geschwindigkeit angepasst.Bevor es 20px loopte - gibt es eine Möglichkeit, dieses Verhalten zu replizieren? – Scott