我正在使用jquery循环使用单词。当然,字大小会有所不同,导致旁边的非动画文字移出位置。有没有办法平滑这种位置变化?
我有什么:http://jsfiddle.net/tWm36/121/
我想要实现的目标:https://gumroad.com/
看看文本如何顺利移动以容纳循环的单词,而不是一次突然的移动?
<div>
<span id="changerificwordspanid">awesome</span>
<span>This is so</span>
(function(){
var words = [
'awesome',
'incredible',
'cool',
'fantastic'
], i = 0;
setInterval(function(){
$('#changerificwordspanid').fadeOut(function(){
$(this).html(words[i=(i+1)%words.length]).fadeIn();
});
}, 2000);
})();
答案 0 :(得分:1)
尝试类似this的内容!
<div>
<div id='words' style='visibility:hidden'>
<span>awesome</span>
<span>incredible</span>
<span>cool</span>
<span>fantastic</span>
</div>
<span id="changerificwordspanid" style='overflow-x:hidden'>awesome</span>
<span>This is so</span>
</div>
我创建了包含文本的隐藏跨距。这允许您获取浏览器计算的宽度。当我们淡入文本时,我们将为显示的跨度的宽度设置动画。在显示的范围上设置overflow-x:hidden
很重要,因为它允许宽度小于文本的宽度。使用fadeOut()是不对的,因为我们不想在任何时候设置display:none,因为这会导致不稳定的行为。所以只需使用animate():
(function () {
var words = $('#words span').map(function(i, obj) { return { width: $(obj).width() + 'px', text: $(obj).html() } });
var i = 0;
setInterval(function () {
$('#changerificwordspanid').animate({ opacity: 0.0, width: words[i].width },
400, function () {
word = words[i = (i + 1) % words.length];
$(this).html(word.text);
$(this).animate({ opacity: 1.0, width: word.width });
});
}, 2000);
})();