12

「アニメーション」をロードする句読点を表示する良い方法を探しています。

私が欲しいのは次のようなものです:

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...."

等々。

ドットを囲むことから始めてspans、jquery でそれらをループして、もう 1 つ、もう 1 つ、もう 1 つ表示してから、1 にリセットできると考えました。

4

8 に答える 8

18

純粋な CSS ソリューション

デモ: 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 のみの代替手段

利点: ネストされたタグはありません。::afterこれは、省略記号をコンテンツとして疑似要素に入れることができることを意味します。

デモ: 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;
    }
    
于 2014-06-22T09:07:14.397 に答える
14

ドットの文字列を作成する秘訣は、まばらな配列を作成してから、すべての要素を目的の文字で結合することです。

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

これがライブデモです。

于 2013-03-13T10:30:08.907 に答える
1

コードが手に負えなくなったことを確認してください。次のようにすることができます。

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>

そして、については1、それを期間の数と交換することができます。

于 2013-03-13T10:35:04.067 に答える
0

おい、このアニメーションを永遠に表示したいのでなければ、アニメーションを停止する方法が必要になるでしょう、または?

グローバル変数についても考えないでください。これはJavaScriptであり、そのためのクロージャがあります:)

<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>
于 2013-03-13T11:39:58.507 に答える
0

この機能を試してください: ここに例を示します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();
于 2013-03-13T10:37:11.147 に答える
0

これは非常に単純なバリアントです: http://jsfiddle.net/psycketom/FusdC/

以下のコメントを読んで、すべてがそこで何をしているのかを理解してください。

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

ここでは、必要に応じて使用する利点も得easingられます。jQuery に慣れている場合は、合計期間を簡単に変更したり、その他の多くの利点を得ることができます。

于 2013-03-13T10:39:24.307 に答える
0

これは、しばらくするとドットをオフにする修正バージョンです。

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

  if (count == 10){ // show two iterations of the array.
    clearInterval(dots); // stop the dots.
  }
}, 100); // sets the speed

http://jsfiddle.net/Ty4gt/331/

于 2018-04-12T20:15:50.553 に答える