2017-03-06 2 views
4

誰でもこの質問をできるだけ早く行うことができれば助言してください。 https://jsfiddle.net/5v7mzadu/CSS:テキストの変更時にdiv幅に円滑なシフトを追加するにはどうすればよいですか?

私のHTML::

<div class="text-cycler"> 
    WE <div class="c-text" id="ctext-1">CARE</div> 
     <div class="c-text" id="ctext-2">THINK</div> 
     <div class="c-text" id="ctext-3">SEE</div> 
     <div class="c-text" id="ctext-1">KNOW</div> 
</div> 

マイCSS:

.text-cycler { 
    text-align:center; 
    font-size:25px; 
} 
.c-text { 
    display:inline-block 
} 

マイJavascriptを:

は、ここに私の現在のjsfiddleです

var divs = $('div[id^="ctext-"]').hide(), 
      i = 0; 

(function cycle() { 

    divs.eq(i).fadeIn(400) 
     .delay(1000) 
     .fadeOut(400, cycle); 

    i = ++i % divs.length; 

})(); 

2番目の単語が見えるように、フェードイン/アウトします。 divコンテナの幅が突然幅のサイズを変更しないように、divにスムーズな遷移を追加したいと思います。 (幅「スナップ」がよりスムーズになるように)

誰でも手伝いできますか?

+0

これは 'text-align:center;'を使用しているからです。ビューはテキストの長さに基づいて調整されます。 'text-align:left;'を使うことでこれを解決できます。それが正常かどうかを確認してください –

答えて

2

私はあなたがコンテンツとテキストの配置中心部のアニメーションを必要と考えています。 そして、これはあなたの目的を解決しなければなりません。

私は、単一の行に整列することを強制するためにspan{white-space: nowrap; vertical-align: text-top;}を追加した、とjQueryはあなたの周り

var divs = $('div[id^="ctext-"]').hide(), 
 
    i = 0; 
 

 
(function cycle() { 
 
    divs.eq(i) 
 
    .animate(400, function(){ 
 
    \t 
 
    \t $('.x').animate({width: $(this).innerWidth()}); 
 
    }) 
 
    \t .fadeIn(400) 
 
    .delay(1000) 
 
    .fadeOut(400, cycle); 
 
    i = ++i % divs.length; 
 
})();
.text-cycler { 
 
    text-align:center; 
 
    font-size:25px; 
 
} 
 
span{white-space: nowrap; vertical-align: text-top;} 
 
.c-text { 
 
    display:inline-block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="text-cycler"> 
 
<span> WE </span><span class="x"><div class="c-text" id="ctext-1">CARE</div><div class="c-text" id="ctext-2">THINK</div><div class="c-text" id="ctext-3">SEE</div><div class="c-text" id="ctext-1">KNOW</div></span>
をプレイするため

そして、ここではfiddleをだ回転テキストの幅をアニメーション化する方法をアニメーション追加されました

+0

これはほぼ完璧です。しかし、短い単語から長い単語に切り替えるときには、単語全体の可視性をどのようにして可能にしますか。たとえば、「ケア」から「思考」に切り替えると、「nk」という文字が短く切り取られて見えなくなります。とにかくこの問題を解決するには? – NoReceipt4Panda

+1

はい、 '$( '。x')のようなアニメーションメソッドを高速化することで修正できます。animate({width:$(this).innerWidth()}、100);'これで問題は修正されますが、移行も同様 –

+0

ありがとう!非常に便利な追加。 – NoReceipt4Panda

0

ここでこのスニペット

var divs = $('div[id^="ctext-"]').hide(), 
 
    i = 0; 
 

 
(function cycle() { 
 

 
    divs.eq(i).fadeIn(400) 
 
    .delay(1000) 
 
    .fadeOut(400, cycle); 
 

 
    i = ++i % divs.length; 
 

 
})();
.text-cycler { 
 
    font-size:25px; 
 
    position:fixed; /*added*/ 
 
    padding-left:40% /*added*/ 
 
} 
 

 
.c-text { 
 
    display:inline-block 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="text-cycler" align="center"> 
 
WE <div class="c-text" id="ctext-1">CARE</div><div class="c-text" id="ctext-2">THINK</div><div class="c-text" id="ctext-3">SEE</div><div class="c-text" id="ctext-1">KNOW</div> 
 
</div>

0

がソリューションです参照してください。

var divs = $('div[id^="ctext-"]').hide(), 
 
    i = 0; 
 

 
(function cycle() { 
 

 
    divs.eq(i).fadeIn(400) 
 
    .delay(1000) 
 
    .fadeOut(400, cycle); 
 

 
    i = ++i % divs.length; 
 

 
})();
.text-cycler { 
 
    text-align:left; 
 
    font-size:25px; 
 
} 
 
.c-text, .s-text { 
 
    display: inline-block; 
 
    width: 50%; 
 
    float: left; 
 
} 
 
.s-text { 
 
    text-align: right; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="text-cycler"> 
 
<div class="s-text" id="stext-1">WE&nbsp;</div> 
 
<div class="c-text" id="ctext-1">CARE</div><div class="c-text" id="ctext-2">THINK</div><div class="c-text" id="ctext-3">SEE</div><div class="c-text" id="ctext-1">KNOW</div> 
 
</div>

0

JavascriptLessの道を:あなたはdivで最初の単語をラップし、これは幅の50%をDIV作るだけでなく、次のdivの、これだけでこれらの部品に反対text-alignを設定する必要があります。

あなたがファンキーになりたい場合。 (いいえ真剣に、これは使用可能なよりもファンキーなソリューションではありません)

.text-cycler { 
 
    width:75%; 
 
    margin:auto; 
 
    user-select: none; 
 
    text-align:center; 
 
    font-size:5vw; 
 
} 
 
.text-cycler:after { 
 
    content:""; 
 
    display:inline-block; 
 
    animation: change; 
 
    animation-duration: 10s; 
 
    animation-iteration-count: infinite; 
 
} 
 

 
@keyframes change { 
 
    0% { 
 
    content: "CARE"; 
 
    opacity: 0; 
 
    } 
 
    3% { 
 
    opacity: 1; 
 
    } 
 
    22% { 
 
    opacity: 1; 
 
    } 
 
    25% { 
 
    content: "CARE"; 
 
    opacity: 0; 
 
    } 
 
    25.1% { 
 
    content: "THINK"; 
 
    } 
 
    28% { 
 
    opacity: 1; 
 
    } 
 
    47% { 
 
    opacity: 1; 
 
    } 
 
    50% { 
 
    content: "THINK"; 
 
    opacity: 0; 
 
    } 
 
    50.1% { 
 
    content: "SEE"; 
 
    } 
 
    53% { 
 
    opacity: 1; 
 
    } 
 
    72% { 
 
    opacity: 1; 
 
    } 
 
    75% { 
 
    content: "SEE"; 
 
    opacity: 0; 
 
    } 
 
    75.1% { 
 
    content: "KNOW"; 
 
    } 
 
    78% { 
 
    opacity: 1; 
 
    } 
 
    97% { 
 
    opacity: 1; 
 
    } 
 
    100% { 
 
    content: "KNOW"; 
 
    opacity: 0; 
 
    } 
 
}
<div class="text-cycler"> 
 
    WE 
 
</div>

+1

なぜですか?私は少しナッツですから。 –

関連する問題