Stałe pozycjonowanie w mobilnym Safari

Czy w mobilnej przeglądarce Safari można ustawić element stały względem viewportu? Jak wielu zauważyło, position: fixed nie działa, ale Gmail właśnie wyszedł z rozwiązaniem, które prawie jest tym, czego chcę – zobacz pływający pasek menu w widoku wiadomości.

Uzyskanie zdarzeń przewijania w czasie rzeczywistym w JavaScript byłoby również rozsądnym rozwiązaniem.

Author: Yi Jiang, 2009-04-13

11 answers

 34
Author: vava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-05 01:33:59

Ta stała pozycja div może być osiągnięta w zaledwie 2 liniach kodu, który przesuwa div na przewijanie do dołu strony.

window.onscroll = function() {
  document.getElementById('fixedDiv').style.top =
     (window.pageYOffset + window.innerHeight - 25) + 'px';
};
 74
Author: Abhijit Kalamkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-17 22:00:53

Zobacz rozwiązanie tego problemu przez Google . Zasadniczo musisz przewijać zawartość samodzielnie za pomocą JavaScript. Sencha Touch zapewnia również bibliotekę do uzyskiwania tego zachowania w bardzo wydajnym dworku.

 10
Author: JoshNaro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 18:05:29

U mnie zadziałało:

function changeFooterPosition() {   
  $('.footer-menu').css('top', window.innerHeight + window.scrollY - 44 + "px");
}

$(document).bind('scroll', function() {
  changeFooterPosition();
});

(44 to wysokość mojego baru)

Chociaż Pasek porusza się tylko na końcu przewijania...

 6
Author: Raphael Petegrosso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 18:35:31

To może Cię zainteresować. To strona pomocy deweloperów Apple.
http://developer.apple.com/library/ios/#technotes/tn2010/tn2262/

Przeczytaj Punkt " 4. Zmodyfikuj kod bazujący na CSS fixed positioning " a przekonasz się, że istnieje bardzo dobry powód, dla którego Apple podjęło świadomą decyzję o obsłudze stałej pozycji jako statycznej.

 5
Author: iDevGeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-24 18:43:04

Myślę, że gmail po prostu śledzi pozycję przewijania na timerze i odpowiednio zmienia pozycję div.

Najlepsze rozwiązanie jakie widziałem jest w doctyper .

Prostsze rozwiązanie jQuery, które przesuwa element onscroll: link

 4
Author: rpetrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-17 21:14:09

Możesz spróbować użyć touch-scroll, wtyczki jQuery, która naśladuje przewijanie ze stałymi elementami w mobilnym Safari: https://github.com/neave/touch-scroll

Zobacz przykład z urządzenia iOS w http://neave.github.com/touch-scroll/

Lub alternatywą jest iScroll: http://cubiq.org/iscroll

 3
Author: neave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-15 15:12:11

Tak to zrobiłem. Mam blok nawigacyjny, który znajduje się pod nagłówkiem po przewinięciu strony w dół, "przykleja się" do górnej części okna. Jeśli przewiń do góry, nav powróci na swoje miejsce Używam position: fixed w CSS dla platform non mobile i iOS5. Inne wersje mobilne mają to "opóźnienie", dopóki ekran nie przestanie przewijać, zanim zostanie ustawiony.

// css
#sticky.stick {
    width:100%;
    height:50px;
    position: fixed;
    top: 0;
    z-index: 1;
}

// jquery 
//sticky nav
    function sticky_relocate() {
      var window_top = $(window).scrollTop();
      var div_top = $('#sticky-anchor').offset().top;

      if (window_top > div_top)
        $('#sticky').addClass('stick');
      else
        $('#sticky').removeClass('stick');
     }

$(window).scroll(function(event){

    // sticky nav css NON mobile way
       sticky_relocate();

       var st = $(this).scrollTop();

    // sticky nav iPhone android mobile way iOS<5

       if (navigator.userAgent.match(/OS 5(_\d)+ like Mac OS X/i)) {
            //do nothing uses sticky_relocate() css
       } else if ( navigator.userAgent.match(/(iPod|iPhone|iPad)/i) || navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) ) {

            var window_top = $(window).scrollTop();
            var div_top = $('#sticky-anchor').offset().top;

            if (window_top > div_top) {
                $('#sticky').css({'top' : st  , 'position' : 'absolute' });
            } else {
                $('#sticky').css({'top' : 'auto' });
            }
        };
 1
Author: gary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-20 17:58:11
<meta name="viewport" content="width=320, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/> 

Również upewnienie się, że height=device-height nie jest obecny w tym meta tagu pomaga zapobiec dodatkowemu wypełnieniu stopki, które normalnie nie istniałoby na stronie. Wysokość paska menu dodaje się do wysokości paska widoku, powodując przewijanie stałego tła.

 1
Author: Talvi Watia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-11 22:52:53

Tutaj możesz zobaczyć jakie (mobilne) przeglądarki obsługują pozycję css fixed + tam Wersja.

Http://caniuse.com/css-fixed

 0
Author: Anna Smother,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-12 08:37:41

Nasza aplikacja internetowa wymaga stałego nagłówka. Mamy szczęście, że musimy tylko obsługiwać najnowsze przeglądarki, ale zachowanie Safari w tym obszarze sprawiło nam prawdziwy problem.

Najlepszą poprawką, jak zauważyli inni, jest napisanie własnego kodu przewijania. Jednak nie możemy uzasadnić tego wysiłku, aby rozwiązać problem, który występuje tylko na iOS. Bardziej sensowne jest mieć nadzieję, że Apple może rozwiązać ten problem, tym bardziej, że, jak sugeruje QuirksMode, Apple stoi teraz sam w ich interpretacji "pozycja: stała".

Http://www.quirksmode.org/blog/archives/2013/12/position_fixed_1.html

Zadziałało dla nas przełączanie między "position:fixed" i "position:absolute" w zależności od tego, czy użytkownik powiększył. Zastępuje to nasz" pływający " nagłówek przewidywalnym zachowaniem, co jest ważne dla użyteczności. Po powiększeniu zachowanie nie jest tym, czego chcemy, ale użytkownik może łatwo obejść to, odwracając powiększenie.

// On iOS, "position: fixed;" is not supported when zoomed, so toggle "position: absolute;".
header = document.createElement( "HEADER" );
document.body.appendChild( header );
if( navigator.userAgent.match( /iPad/i ) || navigator.userAgent.match( /iPhone/i )) {
    addEventListener( document.body, function( event ) {
        var zoomLevel = (( Math.abs( window.orientation ) === 90 ) ? screen.height : screen.width ) / window.innerWidth;
        header.style.position = ( zoomLevel > 1 ) ? "absolute" : "fixed";
    });
}
 0
Author: Heman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 13:38:00