imagem de inicialização cross-device javascript / css

Configurar uma tela inicial do iOS pode ser um verdadeiro desafio em termos de número de imagens necessárias, formatação e exibição regular em um aplicativo da web HTML5. Além disso, eles são limitados apenas ao iOS.

Este é um pequeno snippet em Javascript / CSS que adiciona uma imagem inicial genérica:

(1) adicione a classe .splash a um elemento do corpo da página e defina este CSS, que gera uma “tela” em branco e uma tela de carregamento

 .splash:before { 
/* dimensions */
width
: 100%;
position
: absolute;
top
: 0;
bottom
: 0;
left
: 0;
right
: 0;
display
: block;
height
: 105% ;
z
-index: 999999;

/* background canvas */
background
-color: #fff;

/* loading... text */
content
: "Birdseye";
text
-align: center;
font
-size: 24px;
font
-family: Arial;
color
: #fff;
text
-shadow: none;
line
-height: 150px;
vertical
-align: bottom;
}

O CSS é necessário para cobrir a página enquanto a imagem de fundo é carregada. Isso também cuida de piscar, marcação não aprimorada ao usar, por exemplo, requireJS junto com Jquery Mobile).

(2) adicionar o seguinte script ao cabeçalho da página

 <script type="text/javascript">
var screenSize = Math.max(screen.width,screen.height)

, x

, dir

, w=screen.width

, h=screen.height

, o = window.orientation

, sheet = document.styleSheets[0];


if ( navigator.platform ==="iPad" ){

dir = ( o == 0 || o == 180) ? "p" : "l";

} else {

dir = ( w < h || ( o == 0 || o == 180) ) ? "p" : "l";

}


if ( screenSize < 320 ){

x = "img/s_background_" + dir + ".jpg";

} else if ( screenSize > 320 && screenSize <= 767 ){

x = "img/m_background_" + dir + ".jpg";

} else if ( screenSize > 768 && screenSize <= 1279 ){

x = "img/l_background_" + dir + ".jpg";

} else {

x = "img/xl_background_" + dir + ".jpg";

}


if ('addRule' in sheet) {

sheet.addRule(".splash:before", "background: url('" + x + "') no-repeat center center fixed; -webkit-background-size: 100%; -moz-background-size: 100%; -o-background-size: 100%; background-size: 100%; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;", 0);

} else if ('insertRule' in sheet) {

sheet.insertRule(".splash:before { background: url('" + x + "') no-repeat center center fixed; -webkit-background-size: 100%; -moz-background-size: 100%; -o-background-size: 100%; background-size: 100%; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;" + " }", 0);

}


window.setTimeout(function(){

document.getElementsByTagName("body")[0].className = document.getElementsByTagName("body")[0].className.replace(/bsplashb/,'');

},4000);

</script>

O snippet está usando apenas Javascript, portanto, pode ser executado antes que qualquer biblioteca seja carregada e inicializada.

Primeiro, as dimensões e a orientação da tela são definidas. Isso não é realmente necessário se estiver usando uma única imagem inicial, mas o exemplo usa imagens diferentes dependendo do tamanho da tela (s, m, l, xl) e orientação (p, l) para capacidade de resposta em dispositivos diferentes.

Em seguida, a imagem é adicionada à classe inicial como plano de fundo CSS usando addRule / insertRule. background-size: cover é usado para expandir imagens em tela cheia com background-size: 100% sendo usado como um substituto para dispositivos não suportados.

Por último, a imagem é removida novamente removendo a classe inicial via setTimeout.

O snippet pode ser estendido (proporção min-dispositivo-pixel) e ainda precisa de um pouco de mágica para o IE8 e versões anteriores.

Código completo no Github https://github.com/frequent/splashview
Demo http://www.franckreich.de/jqm/splashview/demo.html