Tenho um formulário de contato oculto que é implantado clicando em um botão. Seus campos são definidos como imagens de plano de fundo CSS e sempre aparecem um pouco depois do div que foi alternado.
Eu estava usando este snippet na <head>
seção, mas sem sorte (depois de limpar o cache):
<script>
$(document).ready(function() {
pic = new Image();
pic2 = new Image();
pic3 = new Image();
pic.src="<?php bloginfo('template_directory'); ?>/images/inputs/input1.png";
pic2.src="<?php bloginfo('template_directory'); ?>/images/inputs/input2.png";
pic3.src="<?php bloginfo('template_directory'); ?>/images/inputs/input3.png";
});
</script>
Estou usando o jQuery como minha biblioteca e seria legal se eu pudesse usá-lo também para resolver esse problema.
Obrigado por seus pensamentos.
Respostas:
Pré-carregando imagens usando apenas CSS
No código a seguir, estou escolhendo aleatoriamente o
body
elemento, uma vez que é um dos únicos elementos com garantia de existência na página.Para que o "truque" funcione, devemos usar a
content
propriedade que confortavelmente permite definir vários URLs a serem carregados, mas como mostrado, o::after
pseudo elemento é mantido escondido para que as imagens não sejam renderizadas:Demo
é melhor usar uma imagem sprite para reduzir as solicitações de http ... (se houver muitas imagens de tamanho relativamente pequeno) e ter certeza de que as imagens estão hospedadas onde HTTP2 é usado.
fonte
body
, pois essas imagens serão carregadas em todas as páginas que fazem referência à folha de estilo. Em vez disso, você deve usar.contact_form:after {...}
ou alguma outra classe que seja menos global. A menos, é claro, que seu formulário de contato esteja em todas as páginas;)Posso confirmar que meu código original parece funcionar. Eu estava casualmente aderindo a uma imagem com um caminho errado.
Aqui está um teste: http://paragraphe.org/slidetoggletest/test.html
fonte
Pré-carregando imagens usando tag HTML <link>
Acredito que a maioria dos visitantes desta pergunta está procurando a resposta de "Como posso pré-carregar uma imagem antes que a renderização da página comece?" e a melhor solução para esse problema é usar
<link>
tag, pois<link>
tag é capaz de bloquear a renderização posterior da página. Veja preemptivaEssas duas opções de valor do atributo
rel
( relação entre o documento atual e o documento vinculado ) são mais relevantes com o problema:Portanto, se você deseja carregar um recurso ( neste caso, é uma imagem ) antes de iniciar o processo de renderização da
<body>
tag, use:e se você deseja carregar um recurso durante a
<body>
renderização, mas planeja usá-lo mais tarde dinamicamente e não quer incomodar o usuário com o tempo de carregamento, use:fonte
prefetch
quando o navegador está ocioso, o que é determinado pelansIWebProgressListener
API. Veja isso para mais informações.<link rel="preload">
não não bloquear renderização, acredito que o autor entendeu mal a definição. De MDN Preloading content with rel = "preload" , "... que você deseja iniciar o carregamento no início do ciclo de vida da página, antes que o mecanismo de renderização principal do navegador seja acionado." A ideia é que os recursos sejam buscados o mais rápido possível, tornando mais provável que o recurso esteja disponível quando necessário, por exemplo, quando um<img>
elemento está sendo renderizado.http://css-tricks.com/snippets/css/css-only-image-preloading/
Técnica # 1
Carregue a imagem no estado regular do elemento, apenas desloque-a com a posição de fundo. Em seguida, mova a posição de fundo para exibi-la ao pairar.
Técnica # 2
Se o elemento em questão já tiver uma imagem de fundo aplicada e você precisar alterar essa imagem, o procedimento acima não funcionará. Normalmente, você escolheria um sprite aqui (uma imagem de fundo combinada) e apenas mudaria a posição do fundo. Mas se isso não for possível, tente isso. Aplique a imagem de plano de fundo a outro elemento da página que já está em uso, mas não tem uma imagem de plano de fundo.
fonte
tente com isto:
Com este código, você pré-carrega a imagem de fundo e renderiza o formulário quando é carregado
fonte
Para pré-carregar imagens de fundo definidas com CSS, a resposta mais eficiente que encontrei foi uma versão modificada de algum código que descobri que não funcionava:
O grande benefício disso é que você não precisa atualizá-lo ao trazer novas imagens de fundo no futuro; ele encontrará as novas e as pré-carregará!
fonte
Se você estiver reutilizando essas imagens bg em qualquer outro lugar do seu site para entradas de formulário, provavelmente desejará usar um sprite de imagem. Dessa forma, você pode gerenciar suas imagens de forma centralizada (em vez de ter pic1, pic2, pic3, etc ...).
Sprites geralmente são mais rápidos para o cliente, pois eles estão solicitando apenas um arquivo (embora um pouco maior) do servidor em vez de vários arquivos. Veja o artigo SO para mais benefícios:
Sprites de imagem CSS
Então, novamente, isso pode não ser útil se você estiver usando apenas para um formulário e você realmente só deseja carregá-los se o usuário solicitar o formulário de contato ... pode fazer sentido.
http://www.alistapart.com/articles/sprites
fonte
que tal carregar aquela imagem de fundo em algum lugar escondido. Dessa forma, ele será carregado quando a página for aberta e não demorará mais depois que o formulário for criado usando ajax:
fonte
Você pode usar este plugin jQuery waitForImage ou pode colocar suas imagens em um div oculto ou (largura: 0 e altura: 0) e usar o evento onload nas imagens.
Se você tiver apenas 2-3 imagens, poderá vincular eventos e acioná-los em uma cadeia para que, após cada imagem, você possa fazer algum código.
fonte
A única maneira é codificar a imagem em Base64 e colocá-la dentro do código HTML para que não precise entrar em contato com o servidor para fazer o download da imagem.
Isso irá codificar uma imagem do url para que você possa copiar o código do arquivo de imagem e inseri-lo em sua página, assim ...
fonte
Quando não há como modificar o código CSS e pré-carregar imagens com regras CSS
:before
ou:after
pseudoelementos, pode ser usada outra abordagem com o código JavaScript que atravessa as regras CSS das folhas de estilo carregadas. Para fazê-lo funcionar, os scripts devem ser incluídos após as folhas de estilo em HTML, por exemplo, antes de fechar abody
tag ou logo após as folhas de estilo.fonte
Se os elementos da página e suas imagens de fundo já estiverem no DOM (ou seja, você não os está criando / alterando dinamicamente), suas imagens de fundo já estarão carregadas. Nesse ponto, você pode querer examinar os métodos de compressão :)
fonte