2013-03-13 21 views
11

Poszukuję dobrego sposobu wyświetlania "animacji" z interpunkcją.Ładowanie interpunkcyjne "animacja", javascript?

Co chcę jest coś takiego:

This will display at second 1: "Waiting for your input." 
This will display at second 2: "Waiting for your input.." 
This will display at second 3: "Waiting for your input..." 
This will display at second 4: "Waiting for your input...." 
This will display at second 5: "Waiting for your input." 
This will display at second 6: "Waiting for your input.." 
This will display at second 7: "Waiting for your input..." 
This will display at second 8: "Waiting for your input...." 

I tak dalej.

Zacząłem od otaczania kropek w spans i myślałem, że mogę przejrzeć je za pomocą jquery i wyświetlić jeszcze jeden, jeden, jeszcze jeden, a następnie zresetować do 1. Ale kod jest bardzo niezgrabny, więc zastanawiam się, jak byś Zrób to?

+0

użycie klucza klatek animacji, ze związkiem :: Po elementów o różnej zawartości być może .. – techfoobar

Odpowiedz

13

Sztuczka polegająca na tworzeniu sznurka kropek polega na zrobieniu rzadkiej tablicy, a następnie na połączeniu wszystkich elementów z żądaną postacią.

var count = 0; 
setInterval(function(){ 
    count++; 
    var dots = new Array(count % 10).join('.'); 
    document.getElementById('loadingtext').innerHTML = "Waiting for your input." + dots; 
    }, 1000); 

Oto Live demo.

+0

działa jak czar , dzięki :) –

+0

Można również wstępnie buforować ciągi kropek, aby uniknąć ponownego utworzenia tablicy na e it iteracja (ale z drugiej strony przyrost wydajności może być minimalny). – monsur

+0

Przysmak. Nie jestem wielkim fanem stenografii, ale zmniejsza to czytelność. Co oznacza "count% 10"? –

1

Teraz wiem, jak kod wymknęła się spod kontroli, może po prostu zrobić:

setInterval(function() { 
    var span = $("#text-loader").children("span:eq(0)"); 
    var ellipsis = span.html(); 
    ellipsis = ellipsis + "."; 
    if (ellipsis.length > 5) { 
    ellipsis = "."; 
    } 
    span.html(ellipsis); 
}, 1000); 

<div id="text-loader"> 
    This will display at second 1: "Waiting for your input<span>.</span> 
</div> 

A co do 1 można zamienić że się z liczbą okresów.

0

wypróbować tę funkcję: I'v umieścić tu przykład http://jsfiddle.net/XFd39/

var i=0; 
function f() { 
if(i<=4) 
$('#a').append("."); 
i++; 
if(i==4){ 
    $('#a').html(""); 
    i=0; 
} 
setTimeout(f,500); 
} 
f(); 
0

Oto bardzo prosty wariant: http://jsfiddle.net/psycketom/FusdC/

Czytaj komentarzach poniżej, aby zrozumieć, co robi tam wszystko.

var span = $('.dots'); // take the element where you have the maximum count of dots 
var text = span.text(); // cahce it's text value 

// we set up a function here, so we can loop it all the time 
var loading = function() 
{ 
    $({ 
     count : 1 // we start at one dot 
    }).animate({ 
     count : text.length // together forming all of it 
    }, { 
     duration : 1000, // make the animation complete in one second 
     step : function() { 
      span.text(text.substring(0, Math.round(this.count))); // on each step, change the text accordingly to current iteration 
     }, 
     complete : function() { 
      loading(); // once complete, start all over again 
     } 
    }); 
}; 

loading(); // start it up for the first time 

Tu również zyskać przewagę stosując easing jeśli chcesz, łatwo zmienia całkowity czas trwania i kilka innych świadczeń w przypadku jesteś dobry z jQuery.

0

Koleś, chyba że chcesz wyświetlić tę animację na zawsze potrzebujesz sposobu na zatrzymanie animacji, lub?

Nawet nie myśl o zmiennych globalnych, to JavaScript i to musi za to zamknięcia :)

<p>please wait<span id="wait"></span></p> 

<input type="submit" id="start" value="start"> 
<input type="submit" id="stop" value="stop"> 

<script type="text/javascript"> 
    $(document).ready(function() { 

     var animator = function($el) { 
      var dotCount = 1; 
      var started = true; 
      return { 
       "start" : function step() { 
        dotCount = (dotCount + 1) % 10; 
        $el.text(new Array(dotCount).join('.')); 
        if (started) { 
         setTimeout(step, 100); 
        } 
       }, 
       "stop" : function() { 
        started = false; 
       } 
      } 
     }; 

     var animatedWait = animator($("#wait")); 

     $("#start").click(animatedWait.start); 
     $("#stop").click(animatedWait.stop); 
    }); 
</script> 
10

czystym CSS rozwiązanie

Demo: jsfiddle.net/feklee/D59P9

  • HTML:

    Waiting<span class="dots"><span>.</span><span>.</span><span>.</span></span> for more. 
    
  • CSS:

    @keyframes dots-1 { from { opacity: 0; } 25% { opacity: 1; } } 
    @keyframes dots-2 { from { opacity: 0; } 50% { opacity: 1; } } 
    @keyframes dots-3 { from { opacity: 0; } 75% { opacity: 1; } } 
    @-webkit-keyframes dots-1 { from { opacity: 0; } 25% { opacity: 1; } } 
    @-webkit-keyframes dots-2 { from { opacity: 0; } 50% { opacity: 1; } } 
    @-webkit-keyframes dots-3 { from { opacity: 0; } 75% { opacity: 1; } } 
    
    .dots span { 
        animation: dots-1 1s infinite steps(1); 
        -webkit-animation: dots-1 1s infinite steps(1); 
    } 
    
    .dots span:first-child + span { 
        animation-name: dots-2; 
        -webkit-animation-name: dots-2; 
    } 
    
    .dots span:first-child + span + span { 
        animation-name: dots-3; 
        -webkit-animation-name: dots-3; 
    } 
    

WebKit tylko alternatywa

Zaleta: Brak zagnieżdżone znaczniki. Oznacza to, że elipsa może zostać umieszczona jako zawartość pseudo elementu .

Demo: jsfiddle.net/feklee/vFT7W

  • HTML:

    Waiting<span>...</span> for more. 
    
  • CSS:

    body { 
        font-family: 'Roboto', sans-serif; 
        font-size: 50px; 
    } 
    
    @-webkit-keyframes dots { 
        0% { background-position: 0px; } 
        100% { background-position: 50px; } 
    } 
    
    span { 
        background: linear-gradient(to right, white 50%, black 50%); 
        color: transparent; 
        -webkit-background-clip: text; 
        -webkit-animation: dots 1s infinite steps(4); 
        padding-right: 40px; 
        margin-right: -40px; 
    } 
    
+0

Oczekiwanie na dane wejściowe ...

3

To może być bardzo proste:

HTML

<span class="dots"></span> 

JQuery

setInterval(function() { 
    var th = $('.dots'); 
    if(th.text().length < 5){ 
     th.text(th.text()+"."); 
    }else{ 
     th.text(""); 
    } 
}, 500); 

Demo