web-dev-qa-db-ja.com

ロードとしてdotdot dotdotdotしませんか?

次のように、ロードドットを作成します。

0000ミリ秒のスパンコンテンツは次のとおりです。.

0100ミリ秒では、スパンのコンテンツは次のとおりです。..

0200ミリ秒のスパンコンテンツは次のとおりです。...

ループで。

それを作るための最良/最も簡単な方法は何ですか?

40
Thew
<span id="wait">.</span>

<script>
var dots = window.setInterval( function() {
    var wait = document.getElementById("wait");
    if ( wait.innerHTML.length > 3 ) 
        wait.innerHTML = "";
    else 
        wait.innerHTML += ".";
    }, 100);
</script>

または、空想を得て、それらを前後に移動させることができます:

<span id="wait">.</span>

<script>
    window.dotsGoingUp = true;
    var dots = window.setInterval( function() {
        var wait = document.getElementById("wait");
        if ( window.dotsGoingUp ) 
            wait.innerHTML += ".";
        else {
            wait.innerHTML = wait.innerHTML.substring(1, wait.innerHTML.length);
            if ( wait.innerHTML === "")
                window.dotsGoingUp = true;
        }
        if ( wait.innerHTML.length > 9 )
            window.dotsGoingUp = false;



        }, 100);
    </script>

または、それらをランダムに行き来させることができます。

<span id="wait">.</span>

<script type="text/javascript">
    var dots = window.setInterval( function() {
        var wait = document.getElementById("wait");
        if ( Math.random() < .7 )
            wait.innerHTML += ".";
        else
            wait.innerHTML = wait.innerHTML.substring(1, wait.innerHTML.length);
        }, 100);
</script>

または、私は人生を得て、追加のスニペットを投稿するのをやめることができました....:D

Ivoがコメントで述べたように、特に待機が終了した後に新しいページをロードしていない場合、ある時点で 間隔をクリア する必要があります。 :D

50

または.. CSSでそれを行うことができます;)

<p class="loading">Loading</p>

.loading:after {
  content: ' .';
  animation: dots 1s steps(5, end) infinite;
}

@keyframes dots {
  0%, 20% {
    color: rgba(0,0,0,0);
    text-shadow:
      .25em 0 0 rgba(0,0,0,0),
      .5em 0 0 rgba(0,0,0,0);}
  40% {
    color: white;
    text-shadow:
      .25em 0 0 rgba(0,0,0,0),
      .5em 0 0 rgba(0,0,0,0);}
  60% {
    text-shadow:
      .25em 0 0 white,
      .5em 0 0 rgba(0,0,0,0);}
  80%, 100% {
    text-shadow:
      .25em 0 0 white,
      .5em 0 0 white;}}

Codepenサンプル

41
Veiko Jääger

これは、VeikoJäägerのソリューションに似ています。このソリューションでは、ドットの色は関連付けられているテキストと同じです。

<html>
<head>
    <style>
.appendMovingDots:after {
    content: ' .';
    animation: dots 3s steps(1, end) infinite;
}
@keyframes dots {
    0%, 12.5% {
        opacity: 0;
    }
    25% {
        opacity: 1;
    }
    37.5% {
        text-shadow: .5em 0;
    }
    50% {
        text-shadow: .5em 0, 1em 0;
    }
    62.5% {
        text-shadow: .5em 0, 1em 0, 1.5em 0;
    }
    75% {
        text-shadow: .5em 0, 1em 0, 1.5em 0, 2em 0;
    }
    87.5%, 100%{
        text-shadow: .5em 0, 1em 0, 1.5em 0, 2em 0, 2.5em;
    }
}       
                </style>
        </head>
        <body>    
                <span class="appendMovingDots" style="font-size:20px">This is a test</span> 
        </body>
</html>
4
HockChai Lim

例:http://jsfiddle.net/subTZ/

var span = document.getElementById('myspan');

var int = setInterval(function() {
    if ((span.innerHTML += '.').length == 4) 
        span.innerHTML = '';
    //clearInterval( int ); // at some point, clear the setInterval
}, 100);
4
user113716

私の考えでは、最も簡単な方法はif/elseステートメントです。

ただし、ドット長と有名なArray.join-hack dot-charを繰り返すには、トリックも行う必要があります。

function dotdotdot(cursor, times, string) {
  return Array(times - Math.abs(cursor % (times * 2) - times) + 1).join(string);
}

var cursor = 0;
setInterval(function () {
  document.body.innerHTML = dotdotdot(cursor++, 3, '.')
}, 100);

「count-up-and-down」部分と「string-repetition」を別々の関数でラップすることにより、読みやすさを少し改善できます。

0
yckart

例: https://codepen.io/lukaszkups/pen/NQjeVN

CSS contentもアニメーション化できます!

// HTML
<p>Loading<span></span><p>

// CSS (nested SASS)
p
  span
    &:before
      animation: dots 2s linear infinite
      content: ''

  @keyframes dots
    0%, 20%
      content: '.'
    40%
      content: '..'
    60%
      content: '...'
    90%, 100%
      content: ''
0
lukaszkups