テキストが入ったDIVタグがあります。入力効果を使用してループ内のテキストコンテンツを変更し、入力してから、文字を逆方向に削除して、新しいテキストで最初からやり直すことはできますか?これはjqueryで可能ですか?
17898 次
3 に答える
38
簡単なアプローチ:
$("[data-typer]").attr("data-typer", function(i, txt) {
var $typer = $(this),
tot = txt.length,
pauseMax = 300,
pauseMin = 60,
ch = 0;
(function typeIt() {
if (ch > tot) return;
$typer.text(txt.substring(0, ch++));
setTimeout(typeIt, ~~(Math.random() * (pauseMax - pauseMin + 1) + pauseMin));
}());
});
/* PULSATING CARET */
[data-typer]:after {
content:"";
display: inline-block;
vertical-align: middle;
width:1px;
height:1em;
background: #000;
animation: caretPulsate 1s linear infinite;
-webkit-animation: caretPulsate 1s linear infinite;
}
@keyframes caretPulsate {
0% {opacity:1;}
50% {opacity:1;}
60% {opacity:0;}
100% {opacity:0;}
}
@-webkit-keyframes caretPulsate {
0% {opacity:1;}
50% {opacity:1;}
60% {opacity:0;}
100% {opacity:0;}
}
<span data-typer="Hi! My name is Al. I will guide you trough the Setup process."></span>
<h3 data-typer="This is another typing animated text"></h3>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
したがって、基本的にjQueryはdata-text
要素を取得し、文字ごとに挿入します。脈動する「キャレット」は:after
、そのSPANのCSS3アニメーション要素では何もありません。
于 2013-02-21T23:20:38.037 に答える
0
Jquery の text() メソッドを使用すると、要素のテキストを設定できます。
これをループで呼び出すことにより、これを使用してコンテンツをアニメートし、各フレームで見たいコンテンツを与えることができます。
var frames = ['t_', 'ty_', 'typ_', 'type_']
// loop over frames ... inner part reads frame and prints it
// use setInterval, etc.
$('#my-div').text( frames[i] );
テキスト要素を分割して文字を操作することで、より複雑なことを行いましたが、あなたの場合はやり過ぎだと思います。
于 2013-02-21T23:20:36.563 に答える
0
タイピング効果+消しゴム効果+点滅カーソル
Simon Shahriveriコードパンを修正して、カーソルの点滅効果をさらに追加しました。IEにも対応しています。
最終結果は次のとおりです: https://codepen.io/jerrygoyal/pen/vRPpGO
HTML:
<h1>
<a href="" class="typewrite" data-period="2000" data-type='[ "Hi, I am Jerry.", "I am Creative.", "I Love Design.", "I Love to Develop." ]'>
<span class="wrap"></span>
</a>
</h1>
CSS:
body {
background-color:#ce6670;
text-align: center;
color:#fff;
padding-top:10em;
}
* { color:#fff; text-decoration: none;}
.wrap{
animation: caret 1s steps(1) infinite;
border-right: 0.08em solid #fff;
padding-right: 1px;
}
@keyframes caret {
50% {
border-color: transparent;
}
}
JS:
var TxtType = function(el, toRotate, period) {
this.toRotate = toRotate;
this.el = el;
this.loopNum = 0;
this.period = parseInt(period, 10) || 2000;
this.txt = '';
this.tick();
this.isDeleting = false;
};
TxtType.prototype.tick = function() {
var i = this.loopNum % this.toRotate.length;
var fullTxt = this.toRotate[i];
if (this.isDeleting) {
this.txt = fullTxt.substring(0, this.txt.length - 1);
} else {
this.txt = fullTxt.substring(0, this.txt.length + 1);
}
this.el.innerHTML = '<span class="wrap">'+this.txt+'</span>';
var that = this;
var delta = 200 - Math.random() * 100;
if (this.isDeleting) { delta /= 2; }
if (!this.isDeleting && this.txt === fullTxt) {
delta = this.period;
this.isDeleting = true;
} else if (this.isDeleting && this.txt === '') {
this.isDeleting = false;
this.loopNum++;
delta = 500;
}
setTimeout(function() {
that.tick();
}, delta);
};
window.onload = function() {
var elements = document.getElementsByClassName('typewrite');
for (var i=0; i<elements.length; i++) {
var toRotate = elements[i].getAttribute('data-type');
var period = elements[i].getAttribute('data-period');
if (toRotate) {
new TxtType(elements[i], JSON.parse(toRotate), period);
}
}
};
js プロトタイプの代わりに関数だけを使用する別の方法: https://codepen.io/jerrygoyal/pen/vRPpGO
于 2018-04-11T09:09:34.200 に答える