Nerviger Scroll an den Seitenanfang im Contao Isotope Shop uvm.

Wenn eine Webseite bei einer Aktion an die Top-Position (nach oben) springt kann dies sehr stören. Dies kann z.B. auftreten wenn man im Contao Isotope Shop ein Produkt in den Warenkorb legt. Je nach länge der Produktliste muss man dann weit nach unten scrollen um weiter einkaufen zu können. Nicht gerade gut gelöst.

Ein einfaches Javascript kann helfen dieses Problem zu lösen:

<script>
var pathName = document.location.pathname;
var scrollPositionStored = false;
window.onbeforeunload = function () {

        var scrollPosition = Math.max(document.body.scrollTop, window.pageYOffset, document.documentElement.scrollTop, $(document).scrollTop());
        sessionStorage.setItem("scrollPosition_" + pathName, scrollPosition.toString());
        scrollPositionStored = true;

};

var scrollPosRestored = false;

var restoreToScrollPosition  = function()
{
        if (!scrollPosRestored && sessionStorage["scrollPosition_" + pathName]) {
            var historyScrollPos = sessionStorage.getItem("scrollPosition_" + pathName);
            $('html, body').animate({ scrollTop: historyScrollPos }, 200);
            scrollPosRestored = true;
        }

}

window.addEventListener("load", function () {
    restoreToScrollPosition();
}); 
</script>

Verwendung auf eigene Gefahr...

Nachtrag: 2. Lösungsansatz aus dem Contao Forum:

In "vendor/omosde/contao-om-backend/src/Resources/contao/config/config.php" Zeile #L50-L51

$objUser = BackendUser::getInstance();

$objUser->authenticate();

ersetzen mit:

$arrPackages = \System::getContainer()->getParameter('kernel.packages');

    if ($arrPackages['contao/core-bundle'] >= '4.9.0')

    {

        $strUsername = Contao\System::getContainer()->get('contao.security.token_checker')->getBackendUsername();

        if ($strUsername !== null)

        {

            $objUser = \Contao\BackendUser::loadUserByUsername($strUsername);

        }

    }

    else

    {

        $objUser = BackendUser::getInstance();

        $objUser->authenticate();

    }

Nachtrag: 3. Lösungsansatz da am iPhone nicht jede Methode geht:

<script>
$(window).scroll(function () {
    //set scroll position in session storage
    sessionStorage.scrollPos = $(window).scrollTop();
});
var init = function () {
    //get scroll position in session storage
    $(window).scrollTop(sessionStorage.scrollPos || 0)
};
window.onload = init; 
</script>

Zurück