jQuery jak uzyskać obrazek, aby zniknąć przy ładowaniu?

Wszystko, co chcę zrobić, to zniknąć moje logo podczas ładowania strony. Jestem dziś nowy w jQuery i nie mogę się fadeIn przy ładowaniu proszę o pomoc. Przepraszam, jeśli to pytanie zostało już odpowiedział miałem spojrzenie i spróbuj dostosować inne odpowiedzi na różne pytania, ale nic nie wydaje się działać i jego zaczyna mnie frustrować.

Dzięki.

Kod:

<script type="text/javascript">                                         
$(function () {
.load(function () {
      // set the image hidden by default    
      $('#logo').hide();.fadeIn(3000);
                                }}                     
 </script>                
    <link rel="stylesheet" href="challenge.css"/>  
<title>Acme Widgets</title>         
  </head>     
  <body> 
     <div id="wrapper"> 
     <div id="header">
     <img id="logo" src="logo-smaller.jpg" /> 
     </div>
      <div id="nav">
      navigation
     </div>
      <div id="leftCol">
      left col
     </div>
      <div id="rightCol">
        <div id="header2">
        header 2
        </div>
        <div id="centreCol">
        body text
        </div>
        <div id="rightCol2">
        right col
        </div>
     </div>
     <div id="footer">
     footer
     </div>
     </div>
  </body>
</html>
Author: TM., 2009-09-05

13 answers

Ten wątek wydaje się niepotrzebnie kontrowersyjny.

Jeśli naprawdę chcesz rozwiązać to pytanie poprawnie, używając jQuery, zobacz Rozwiązanie poniżej.

Pytanie brzmi: "jQuery jak sprawić, by obrazek przy ładowaniu znikał?"

Najpierw krótka notka.

To nie jest dobry kandydat na $(dokument).gotowy...

Dlaczego? Ponieważ dokument jest gotowy po załadowaniu HTML DOM. Obraz z logo nie będzie w tym momencie gotowy - może nadal być pobierany w fakt!

Więc najpierw odpowiem na ogólne Pytanie " jQuery jak uzyskać obrazek, aby zniknąć przy ładowaniu?"- obrazek w tym przykładzie ma atrybut id = "logo":

$("#logo").bind("load", function () { $(this).fadeIn(); });
To robi dokładnie to, o co prosi pytanie. Gdy obraz zostanie załadowany, zniknie. Jeśli zmienisz źródło obrazu, po załadowaniu nowego źródła zniknie.

Jest komentarz o używaniu window.onload obok jQuery. Jest to całkowicie możliwe. To działa. Można to zrobić. Jednak okno.Zdarzenie onload wymaga szczególnej troski. Dzieje się tak, ponieważ jeśli użyjesz go więcej niż jeden raz, Nadpisz poprzednie zdarzenia. Przykład (zachęcamy do wypróbowania...).

function SaySomething(words) {
    alert(words);
}
window.onload = function () { SaySomething("Hello"); };
window.onload = function () { SaySomething("Everyone"); };
window.onload = function () { SaySomething("Oh!"); };

Oczywiście, nie mielibyście w swoim kodzie trzech zdarzeń onload tak blisko siebie. Najprawdopodobniej masz skrypt, który robi coś onload, a następnie dodać swoje okno.onload handler to fade in your image - " Dlaczego mój pokaz slajdów przestał działać!!?"- z powodu okna.problem z ładowaniem.

Jeden wielki cechą jQuery jest to, że podczas wiązania zdarzeń za pomocą jQuery, wszystkie one są dodawane.

NO i proszę-pytanie zostało już oznaczone jako odpowiedź, ale odpowiedź wydaje się niewystarczająca na podstawie wszystkich komentarzy. Mam nadzieję, że pomoże to każdemu przybywającemu z światowych wyszukiwarek!

 48
Author: user75525,
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-02-03 22:33:25

Masz błąd składni w linii 5:

$('#logo').hide();.fadeIn(3000);

Powinno być:

$('#logo').hide().fadeIn(3000);
 19
Author: Traveling Tech Guy,
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-06-19 16:06:26

Po prostu ustaw styl logo na display:hidden i wywołaj fadeIn, zamiast pierwszego wywołania hide:

$(document).ready(function() {
    $('#logo').fadeIn("normal");
});

<img src="logo.jpg" style="display:none"/>
 10
Author: karim79,
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-09-05 17:51:53

Aby to zrobić z wieloma obrazami, musisz uruchomić funkcję .each(). To działa, ale nie jestem pewien, czy to jest skuteczne.

$('img').hide();
$('img').each( function(){
    $(this).on('load', function () {
        $(this).fadeIn();
    });
});
 6
Author: Craig,
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-11-06 22:49:22

Okno.onload nie jest godny zaufania.. Użyłbym:

<script type="text/javascript">
    $(document).ready(function () {
        $('#logo').hide().fadeIn(3000);
    });
</script>
 4
Author: J. Hendrix,
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-01-11 01:54:05

Używając przykładów z Sohnee i karim79. Przetestowałem to i działało zarówno w FF3. 6, jak i IE6.

<script type="text/javascript">
    $(document).ready(function(){
        $("#logo").bind("load", function () { $(this).fadeIn('slow'); });
    });
</script>

<img src="http://www.gimp.org/tutorials/Lite_Quickies/quintet_hst_big.jpg" id="logo" style="display:none"/>
 4
Author: Max,
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-09-21 20:38:16

Kluczem jest użycie $(window).load(function(){}, więc wiemy, że obraz jest załadowany. Ukryj obraz za pomocą funkcji css, a następnie zniknij za pomocą fadeIn:

$(function() {

  $(window).load(function(){
    $('#logo').css({visibility: 'visible', opacity: 0}).fadeIn(1000);
  });

});

Pomysł z: http://www.getpeel.com/

 4
Author: BlissOfBeing,
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-05-09 16:19:40

Using desandro ' s imagesloaded plugin

1-Ukryj Obrazy w css:

#content img { 
    display:none; 
}

2-fade in images on load with javascript:

var imgLoad = imagesLoaded("#content");
imgLoad.on( 'progress', function( instance, image ) {
    $(image.img).fadeIn();
});
 4
Author: François Romain,
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-09-30 10:05:56

OK więc zrobiłem to i działa. To jest w zasadzie zhakowane z różnych odpowiedzi tutaj. Ponieważ nie ma nadal jasnej odpowiedzi w tym wątku postanowiłem to zamieścić.

<script type="text/javascript">
  $(document).ready(function () {
    $("#logo").hide();
    $("#logo").bind("load", function () { $(this).fadeIn(); });
  });
</script>
Wydaje mi się, że to najlepszy sposób. Pomimo najlepszych intencji Sohnee nie wspomniał, że obiekt musi być najpierw ustawiony na display: none za pomocą CSS. Problem polega na tym, że jeśli z jakiegoś powodu JS użytkownika nie działa, obiekt nigdy się nie pojawi. Niedobrze., zwłaszcza, jeśli to jest to cholerne logo.

To rozwiązanie pozostawia element sam w CSS, i najpierw ukrywa, a następnie zanika we wszystkich za pomocą JS. W ten sposób, jeśli JS nie działa poprawnie, element załaduje się normalnie.

Mam nadzieję, że pomoże to każdemu, kto natknie się na ten niezbyt pomocny wątek w rankingu google #1.

 3
Author: user607972,
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-08 11:00:57

Jak wspomina Sohne, ale dodałbym to:

$("img").hide();

$("img").bind("load", function () { $(this).fadeIn(); });

Lub:

$("img").bind("load", function () {
 $(this).css({opacity: 0, visibility: "visible"}).animate({opacity: 1}, "slow"); 
});
 3
Author: Victor S,
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-04-05 23:34:28

[[2]}próbowałem następnego, ale nie zadziałało;

    <span style="display: none;" id="doneimg">
        <img alt="done" title="The process has been complated successfully..." src="@Url.Content("~/Content/App_Icons/icos/tick_icon.gif")" />
    </span>

    <script type="text/javascript">
        //$(document).ready(function () {
            $("#doneimg").bind("load", function () { $(this).fadeIn('slow'); });
        //});
    </script>

BU następny działał dobrze;

<script type="text/javascript">
        $(document).ready(function () {
            $('#doneimg').fadeIn("normal");
        });
</script>

            <span style="display: none;" id="doneimg">
                <img alt="done" title="The process has been complated successfully..." src="@Url.Content("~/Content/App_Icons/icos/tick_icon.gif")" />
            </span>
 2
Author: tugberk,
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-19 10:37:00

CSS3 + jQuery Solution

Chciałem rozwiązania, które nie wykorzystywałoby efektu zaniku jQuery, ponieważ powoduje to opóźnienia w wielu urządzeniach mobilnych.

Zapożyczenie z odpowiedź Steve ' a Fentona zaadaptowałem wersję tego, która zanika obraz z właściwością przejścia CSS3 i nieprzezroczystością. Uwzględnia to również problem buforowania przeglądarki, w którym to przypadku obraz nie pojawi się przy użyciu CSS.

Oto Mój kod i Działa :

HTML

<img src="http://placehold.it/350x150" class="fade-in-on-load">

CSS

.fade-in-on-load {
    opacity: 0;
    will-change: transition;
    transition: opacity .09s ease-out;
}

JQuery Snippet

$(".fade-in-on-load").each(function(){
    if (!this.complete) {
        $(this).bind("load", function () {
            $(this).css('opacity', '1');
        });
    } else {
        $(this).css('opacity', '1');
    }
});

To, co się tutaj dzieje, to obraz (lub dowolny element), który chcesz blaknąć podczas ładowania, będzie musiał wcześniej zastosować do niego klasę .fade-in-on-load. Spowoduje to przypisanie mu krycia 0 i przypisanie efektu przejścia, możesz edytować szybkość zanikania, aby posmakować w CSS.

Następnie JS przeszukuje każdy element, który ma klasę i powiązuje z nią Zdarzenie load. Raz gotowe, krycie zostanie ustawione na 1, a obraz zniknie. Jeśli obraz był już przechowywany w pamięci podręcznej przeglądarki, natychmiast zniknie.

Używanie tego na stronie z listą produktów.

To może nie jest najładniejsza implementacja, ale działa dobrze.

 2
Author: gillytech,
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-05-23 12:00:31

Znam odpowiedź! Musisz użyć okna.funkcja onload jak pokazano poniżej. Dzięki Tec guy I Karim za pomoc. Uwaga: nadal musisz korzystać z funkcji document ready.

window.onload = function() {$('#logo').hide().fadeIn(3000);};
$(function() {$("#div").load(function() {$('#div').hide().fadeIn(750);); 

Zadziałało również dla mnie, gdy zostało umieszczone tuż po obrazie...Dzięki

 -3
Author: Cool Hand Luke UK,
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-02-14 20:58:48