このウェブサイト: http://www.twosides.co/のメイン ページを数秒間見ていると、テキストが非常にクールな効果で変化し続けます。これを行うアイデアはありますか?
方法がまったくわからないので、stackoverflow コミュニティに助けを求めに来ました!
答えてくれてありがとう!
このウェブサイト: http://www.twosides.co/のメイン ページを数秒間見ていると、テキストが非常にクールな効果で変化し続けます。これを行うアイデアはありますか?
方法がまったくわからないので、stackoverflow コミュニティに助けを求めに来ました!
答えてくれてありがとう!
このようなものはメッセージを変更します:
<script src="http://code.jquery.com/jquery-1.7.min.js"></script>
<script>
$(function () {
var messages = [],
index = 0;
messages.push('Message 1');
messages.push('Message 2');
messages.push('Message 3');
function cycle() {
$('#some-id').html(messages[index]);
index++;
if (index === messages.length) {
index = 0;
}
setTimeout(cycle, 3000);
}
cycle();
});
</script>
<div id="some-id"></div>
アニメーション コードを追加するだけです。
ソース コードから、Masonryを使用しているようです。一般に、これはanimate 関数を使用して jQuery でかなり簡単に実行できます。
これは、アニメーションを使用したサンプル実装です。tmp 要素を使用してテキスト幅を決定します。
<script src="http://code.jquery.com/jquery-1.7.min.js"></script>
<script>
$(function () {
var messages = [],
index = 0;
messages.push('I am short.');
messages.push('Longer messages are nice.');
messages.push('And short again.');
var tmp = $('#tmp');
var el = $('#el');
function cycle() {
var i = index%message.length;
tmp.html(messages[i]);
el.html('').animate({width: tmp.width()+1}, function() {
el.html(messages[i]);
index++;
setTimeout(cycle, 3000);
});
}
cycle();
});
</script>
<style>
#tmp {
visibility: hidden;
}
</style>
I am a text. <span id="el"></span> Me too.
<span id='tmp'>foo<span>
テキストを x 秒ごとに変更するには、delay(x); を使用する必要があります。
そう:
$("#yourElem").delay(1000).text("Text changed");
そして、このコードをループ内に配置する必要があります...
twoSides のコードの作業バージョンについては、コメントを参照してください。
バニラJSといくつかのCSSを使用して、個人サイトにこのようなものを実装しました。これらの目的に合わせて、そのコードを修正したバージョンを次に示します。
var seconds = 5;
var madlibs = {
'a': ['eat pie', 'jump rope', 'write code', 'do things'],
'b': ['a fork', 'your friends', 'the quickness', 'other things']
};
var madlibA = document.getElementById('a');
var madlibB = document.getElementById('b');
function rand(x) {
return Math.floor(Math.random() * x);
}
function change() {
var txtA = madlibs['a'][rand(madlibs['a'].length)];
var txtB = madlibs['b'][rand(madlibs['b'].length)];
madlibA.innerHTML = txtA;
madlibB.innerHTML = txtB;
madlibA.classList.remove('flip');
madlibB.classList.remove('flip');
}
function reveal() {
madlibA.classList.add('flip');
madlibB.classList.add('flip');
setTimeout(change, 500); // half-second like in CSS
}
setInterval(reveal, seconds * 1000);
.madlib {
transition: all 0.5s linear;
font-size:1rem;
color:black;
}
.flip {
font-size:0px;
color:transparent;
}
<p>
we make it easy to <span id="a" class="madlib">do things</span> with <span id="b" class="madlib">other things.</span>
</p>
css3でslideDown効果を行う良い方法を見つけていないため、トランジションはまったく同じではありません(要素に設定overflow
するinline-block
とテキストがずれます)
JS で秒を設定すると、アニメーションの出入りに 0.5 秒かかるため、表示される秒数よりも 1 秒短くなるので、それに応じて計画してください。
setInterval
関数を定期的に呼び出したりsetTimeout
、しばらくしてから関数を呼び出したりするために使用できます。
あなたができるように
function changeText(){
// code to change the text
}
setInterval(changeText,500);
また
function changeText(){
// code to change text
setTimeout(changeText,500);
}
changeText();
しばらくしてから関数自体を呼び出すようにします。
テキストを変更するには、次のようなオプションの配列を使用できます。
var sentences = ["test 1", "test 2", "test 3"],
iter = 0,
changeEl = document.getElementById("change");
function changeText(){
changeEl.innerHTML = sentences[iter%sentences.length];
iter++;
setTimeout(changeText,500);
}
changeText();
アニメーションの場合、この手法を変換して、jQuery や mootools などのライブラリで使用できます。
編集:
私はこれをテストしていませんが、彼らが使用しているコードは次のようです:
html:
<div id="madlib-sentence">
<span class="twosides">TwoSides</span> makes it easy to
<div class="madlibs" style="width:400px;">
<ul id="madlibs-verbs">
<li class="madlibs-verb"><span>discuss and debate contentious topics</span></li>
<li class="madlibs-verb"><span>see every side of an issue</span></li>
<li class="madlibs-verb"><span>compare your viewpoints</span></li>
</ul>
</div> with
<div class="madlibs" style="width:100px;">
<ul id="madlibs-nouns">
<li class="madlibs-noun"><span>friends.</span></li>
<li class="madlibs-noun"><span>the world.</span></li>
<li class="madlibs-noun"><span>co-workers.</span></li>
<li class="madlibs-noun"><span>family.</span></li>
</ul>
</div>
</div>
CSS:
#primary p .madlibs-verb,#primary p .madlibs-noun {
font-family:HelveticaNeue,'Helvetica Neue',HelveticaNeueRoman,HelveticaNeue-Roman,'Helvetica Neue Roman',TeXGyreHerosRegular,Helvetica,Arial,sans-serif;
font-weight:bold;
font-style:normal;
}
#primary #madlib-sentence {
margin-top:20px;
color:#f1f1f1;
text-shadow:0 0 2px #000;
font-size:19px;
font-style:italic;
}
#primary #madlib-sentence .madlibs {
display:inline-block;
position:relative;
height:19px;
overflow:hidden;
padding-bottom:3px;
margin-bottom:-3px;
}
#primary #madlib-sentence .madlibs ul {
position:absolute;
left:0;
top:0;
list-style-type:none;
}
#primary #madlib-sentence .madlibs ul .madlibs-verb,#primary #madlib-sentence .madlibs ul .madlibs-noun {
line-height:24px;
padding-bottom:30px;
font-family:HelveticaNeue,'Helvetica Neue',HelveticaNeueRoman,HelveticaNeue-Roman,'Helvetica Neue Roman',TeXGyreHerosRegular,Helvetica,Arial,sans-serif;
font-weight:bold;
font-style:normal;
}
#primary #madlib-sentence .madlibs ul .madlibs-verb span,#primary #madlib-sentence .madlibs ul .madlibs-noun span {
white-space:nowrap;
}
JS:
function animate_madlib(container) {
if (typeof container.data("index") === "undefined") {
container.data("index", 0);
}
index = container.data("index") + 1;
if (index == container.children().length) {
index = 0;
}
current_child = container.children().eq(index);
parent = container.parent();
new_width = current_child.children("span").outerWidth();
if (new_width > parent.width()) {
parent.animate({width: new_width+"px"}, 100, "swing", function() {
container.animate({top: -(index*current_child.outerHeight())}, 1000, "easeInOutQuint");
});
}
else {
container.animate({top: -(index*current_child.outerHeight())}, 1000, "easeInOutQuint", function() {
parent.animate({width: new_width+"px"}, 100, "swing");
});
}
container.data("index", index);
new_container = (container.attr('id') == 'madlibs-verbs' ? $('#madlibs-nouns') : $('#madlibs-verbs'));
setTimeout(function(new_container) {animate_madlib(new_container)}, 2500, new_container);
}
$(document).ready( function() {
// madlib
$('.madlibs').each(function() {
$(this).css("width", $(this).find("span:first").outerWidth());
});
setTimeout(function(){animate_madlib($('#madlibs-verbs'))}, 1500);
});