Eu trabalhei com <body>
e<div class="wrapper">
Quando o pop-up é aberto ...
<body>
obtém uma altura de 100% e um estouro: hidden
<div class="wrapper">
obtém posição: relativa; estouro: oculto; altura: 100%;
Eu uso JS / jQuery para obter a posição de rolagem real da página e armazenar o valor como atributo de dados ao corpo
Então eu rolar para a posição de rolagem no .wrapper DIV (não na janela)
Aqui está a minha solução:
JS / jQuery:
// when popup opens
$('body').attr( 'data-pos', $(window).scrollTop()); // get actual scrollpos
$('body').addClass('locked'); // add class to body
$('.wrapper').scrollTop( $('body').attr( 'data-pos' ) ); // let wrapper scroll to scrollpos
// when popup close
$("body").removeClass('locked');
$( window ).scrollTop( $('body').attr( 'data-pos' ));
CSS:
body.locked {position:relative;overflow:hidden;height:100%;}
body.locked .wrapper {position:relative;overflow:hidden;height:100%;}
Funciona bem em ambos os lados ... desktop e celular (iOS).
Dicas e melhorias são bem-vindas :)
Felicidades!