Chronos
Aktives Mitglied
Hallo Forum,
ich bin gerade dabei das Verhaltens des "Beitrag schreiben"-Buttons aus der Google Plus App nachzubauen.
Dieser macht folgendes;
scrollt man nach unten, wird er ausgeblendet (so verdeckt er beim stöbern keinen Inhalt),
scrollt man nach oben, wird er eingeblendet.
Ich habe eine Funktion über die per jQuery animate den bottom Wert des Buttons setze und eine die das scrollen abfängt.
Aber irgendwie ist das nicht besonders fix oder "smooth", das fällt besonders dann auf, wenn ich nach unten scrolle und dann direkt wieder hoch - im Chrome kann man ja angeschlossene Geräte und deren Tabs im Browser untersuchen und zu sehen ist, dass noch gerechnet wird also erst mal auf den Stand ausgeblendet und wenn das fertig ist, einblenden.
In meinem Fall ist das evtl. sowieso nicht so optimal gelöst, ich will ja nur einmal das Event auslösen, so wie ich das jetzt mache, wird es ja so oft wie man scrollt aufgerufen.
Egal ich zeige euch mal meinen Code, vllt. fällt uns ja was gescheites dazu ein.
JavaScript:
CSS:
und noch das bissl HTML dazu:
Das ganze schaue ich mir übrigens am Nexus 5 im Chrome und parallel dazu im Chrome Desktop / Remote an.
Hat so was schon mal jemand gemacht und kann mir helfen?
Edit: jetzt mit JSFiddle, auch wenn ich es da nicht so gut nachvollziehbar finde http://jsfiddle.net/Chronos90/mteve5ns/
ich bin gerade dabei das Verhaltens des "Beitrag schreiben"-Buttons aus der Google Plus App nachzubauen.

Dieser macht folgendes;
scrollt man nach unten, wird er ausgeblendet (so verdeckt er beim stöbern keinen Inhalt),
scrollt man nach oben, wird er eingeblendet.
Ich habe eine Funktion über die per jQuery animate den bottom Wert des Buttons setze und eine die das scrollen abfängt.
Aber irgendwie ist das nicht besonders fix oder "smooth", das fällt besonders dann auf, wenn ich nach unten scrolle und dann direkt wieder hoch - im Chrome kann man ja angeschlossene Geräte und deren Tabs im Browser untersuchen und zu sehen ist, dass noch gerechnet wird also erst mal auf den Stand ausgeblendet und wenn das fertig ist, einblenden.
In meinem Fall ist das evtl. sowieso nicht so optimal gelöst, ich will ja nur einmal das Event auslösen, so wie ich das jetzt mache, wird es ja so oft wie man scrollt aufgerufen.
Egal ich zeige euch mal meinen Code, vllt. fällt uns ja was gescheites dazu ein.
JavaScript:
Code:
// IIFE - Immediately Invoked Function Expression
(function($, window, document) {
// Listen for the jQuery ready event on the document
$(function() {
// The DOM is ready
var btn_floating = $('#btn-floating');
var previousScroll = 0;
// Den Code findet man so im Netz, ich glaub aber sehr viel anders würde man es eh nicht schreiben ;)
$(window).scroll(function() {
var currentScroll = $(this).scrollTop();
if (currentScroll > previousScroll){
setBtnFloatingPosition(btn_floating, "-100%", 500);
}
else {
setBtnFloatingPosition(btn_floating, "100", 100);
}
previousScroll = currentScroll;
});
});
// Bottom-Position des Buttons setzen
function setBtnFloatingPosition(element, bottomValue, time) {
element.animate({
bottom: bottomValue,
}, time);
};
}(window.jQuery, window, document));
CSS:
Code:
a {
text-decoration: none;
color: #000;
}
.btn {
display: block;
position: fixed;
left: 10px;
bottom: 100px;
border: 1px solid #000;
border-radius: 100%;
width: 150px;
height: 150px;
background: rgb(220, 220, 220);
}
.content-wrapper {
margin: 20px auto;
width: 240px;
height: 3000px;
border: 1px solid gray;
}
und noch das bissl HTML dazu:
HTML:
<!DOCTYPE html>
<html lang="de">
<head>
<link rel="stylesheet" type="text/css" href="./floating-button.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="./floating-button.js"></script>
</head>
<body>
<div class="content-wrapper"></div>
<a id="btn-floating" class="btn"></a>
</body>
</html>
Das ganze schaue ich mir übrigens am Nexus 5 im Chrome und parallel dazu im Chrome Desktop / Remote an.
Hat so was schon mal jemand gemacht und kann mir helfen?
Edit: jetzt mit JSFiddle, auch wenn ich es da nicht so gut nachvollziehbar finde http://jsfiddle.net/Chronos90/mteve5ns/