Mam ukryty formularz kontaktowy, który jest uruchamiany po kliknięciu przycisku. Jego pola są ustawione jako obrazy tła CSS i zawsze pojawiają się nieco później niż zmieniony element div.
Używałem tego fragmentu w <head>
sekcji, ale bez powodzenia (po wyczyszczeniu pamięci podręcznej):
<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>
Używam jQuery jako mojej biblioteki i byłoby fajnie, gdybym mógł go również użyć do uporządkowania tego wydania.
Dzięki za przemyślenia.
Odpowiedzi:
Wstępne ładowanie obrazów tylko przy użyciu CSS
W poniższym kodzie losowo wybieram
body
element, ponieważ jest to jeden z jedynych elementów, które mogą istnieć na stronie.Aby „sztuczka” zadziałała, użyjemy
content
właściwości, która pozwala wygodnie ustawić wiele adresów URL do załadowania, ale jak pokazano,::after
pseudoelement jest ukryty, więc obrazy nie będą renderowane:Próbny
lepiej jest użyć obrazu sprite, aby zmniejszyć liczbę żądań http ... (jeśli jest wiele obrazów o stosunkowo małych rozmiarach) i upewnić się, że obrazy są hostowane tam, gdzie używany jest protokół HTTP2 .
źródło
body
tego, ponieważ te obrazy zostaną załadowane na każdą stronę, która odwołuje się do arkusza stylów. Zamiast tego powinieneś użyć.contact_form:after {...}
lub innej klasy, która jest mniej globalna. Chyba że, oczywiście, twój formularz kontaktowy znajduje się na każdej stronie;)Mogę potwierdzić, że mój oryginalny kod wydaje się działać. Od niechcenia trzymałem się obrazu z niewłaściwą ścieżką.
Oto test: http://paragraphe.org/slidetoggletest/test.html
źródło
Wstępne ładowanie obrazów za pomocą tagu HTML <link>
Wydaje mi się, że większość odwiedzających to pytanie szuka odpowiedzi „Jak mogę wstępnie załadować obraz przed rozpoczęciem renderowania strony?” a najlepszym rozwiązaniem tego problemu jest użycie
<link>
tagu, ponieważ<link>
tag może blokować dalsze renderowanie strony. Zobacz zapobiegawczeTe dwie opcje wartości atrybutu
rel
( związek między bieżącym dokumentem a połączonym dokumentem ) są najbardziej istotne w przypadku problemu:Jeśli więc chcesz załadować zasób ( w tym przypadku obraz ) przed rozpoczęciem renderowania
<body>
tagu, użyj:a jeśli chcesz załadować zasób podczas
<body>
renderowania, ale planujesz użyć go później dynamicznie i nie chcesz zawracać użytkownikowi głowy czasem ładowania, użyj:źródło
prefetch
wtedy, gdy przeglądarka jest bezczynna, co jest określane przeznsIWebProgressListener
API. Zobacz to aby uzyskać więcej informacji.<link rel="preload">
czy nie blokuje renderowania, uważam, że autor źle definicji. Z MDN Preloading content with rel = "preload" , "... który chcesz rozpocząć ładowanie na wczesnym etapie cyklu życia strony, zanim włączy się główna maszyna renderująca przeglądarki." Chodzi o to, że zasoby są pobierane tak szybko, jak to możliwe, co zwiększa prawdopodobieństwo, że zasób będzie dostępny w razie potrzeby, na przykład podczas<img>
renderowania elementu.http://css-tricks.com/snippets/css/css-only-image-preloading/
Technika nr 1
Załaduj obraz na zwykły stan elementu, przesuń go tylko z pozycją w tle. Następnie przesuń położenie tła, aby wyświetlić je po najechaniu kursorem.
Technika nr 2
Jeśli dany element ma już zastosowany obraz tła i musisz go zmienić, powyższe nie zadziała. Zazwyczaj wybrałbyś tutaj sprite'a (połączony obraz tła) i po prostu przesunąłbyś pozycję tła. Ale jeśli to nie jest możliwe, spróbuj tego. Zastosuj obraz tła do innego elementu strony, który jest już używany, ale nie ma obrazu tła.
źródło
spróbuj z tym:
Za pomocą tego kodu wstępnie ładujesz obraz tła i renderujesz formularz po załadowaniu
źródło
Jeśli chodzi o wstępne ładowanie obrazów tła ustawionych za pomocą CSS, najbardziej wydajną odpowiedzią, jaką wymyśliłem, była zmodyfikowana wersja kodu, który nie działał:
Ogromną zaletą tego jest to, że nie musisz go aktualizować, gdy w przyszłości wprowadzisz nowe obrazy tła, znajdzie nowe i wstępnie je załaduje!
źródło
Jeśli ponownie używasz tych obrazów bg gdziekolwiek indziej w witrynie do wprowadzania formularzy, prawdopodobnie chcesz użyć sprite'a obrazu. W ten sposób możesz centralnie zarządzać swoimi obrazami (zamiast mieć pic1, pic2, pic3 itd ...).
Sprity są generalnie szybsze dla klienta, ponieważ żądają tylko jednego (choć nieco większego) pliku z serwera zamiast wielu plików. Zobacz artykuł SO, aby uzyskać więcej korzyści:
Obrazek CSS
Z drugiej strony może to wcale nie być pomocne, jeśli używasz ich tylko w jednym formularzu i naprawdę chcesz je załadować tylko wtedy, gdy użytkownik zażąda formularza kontaktowego ... może jednak mieć sens.
http://www.alistapart.com/articles/sprites
źródło
co powiesz na załadowanie tego obrazu tła gdzieś ukrytego. W ten sposób zostanie załadowany po otwarciu strony i nie zajmie czasu po utworzeniu formularza przy użyciu ajax:
źródło
Możesz użyć tej wtyczki jQuery waitForImage lub możesz umieścić obrazy w ukrytym div lub (szerokość: 0 i wysokość: 0) i użyć zdarzenia onload na obrazach.
Jeśli masz tylko 2-3 obrazy, możesz wiązać zdarzenia i uruchamiać je w łańcuchu, więc po każdym obrazie możesz wykonać kod.
źródło
Jedynym sposobem jest zakodowanie obrazu w Base64 i umieszczenie go w kodzie HTML, aby nie musiał kontaktować się z serwerem w celu pobrania obrazu.
Spowoduje to zakodowanie obrazu z adresu URL, dzięki czemu możesz skopiować kod pliku obrazu i wstawić go na swoją stronę w ten sposób ...
źródło
Gdy nie ma możliwości zmodyfikowania kodu CSS i wstępnego załadowania obrazów z regułami CSS
:before
lub:after
pseudoelementami, można zastosować inne podejście z przechodzeniem kodu JavaScript w regułach CSS załadowanych arkuszy stylów. Aby to działało, skrypty powinny być dołączane po arkuszach stylów w HTML, na przykład przedbody
tagiem zamykającym lub zaraz po arkuszach stylów.źródło
Jeśli elementy strony i ich obrazy tła są już w DOM (tj. Nie tworzysz / nie zmieniasz ich dynamicznie), to ich obrazy tła zostaną już załadowane. W tym momencie możesz przyjrzeć się metodom kompresji :)
źródło