jquery - CSS 动画一次一行

标签 jquery html css animation

更新:仍然无法解决这个问题,如果有人能提供帮助,我会很高兴,因为我目前无能为力!

我有一个类当前设置为一次动画,但我试图让它一次一行,尽管段落中的中断会不断变化,具体取决于窗口的宽度和内容如果改变。目前针对的段落类是这样的:

<p class="animated">ANIMATE THIS TEXT ONE LINE AT A TIME</p>

但是根据窗口宽度将呈现为这样,或者其他可能的变化取决于中断决定去哪里:

ANIMATE THIS
TEXT ONE LINE
AT A TIME

我见过一些其他的例子,比如 this它将文本分成多个段落标签,让它们一个接一个地制作动画,但因为我不能总是预测它会在哪里中断,所以我一直无法找到解决方案。

这就是我目前正在使用的:

.animated{
opacity:1;
-webkit-animation-name: flip;
-webkit-animation-duration: 0.15s;
-webkit-animation-iteration-count: 3;
-webkit-animation-direction: alternate;
}

@keyframes flip {
0%, 50%   {transform:rotateY(180deg);}
50.1%, 100%  {transform:rotateY(0deg);}
}

希望有人知道答案!

谢谢

最佳答案

我不确定我是否理解正确,但万一我理解了......我想出了一个想法,即逐个字母地为文本制作动画,如果正确实现,它实际上看起来就像整个文本的动画.这是工作 fiddle :https://jsfiddle.net/0n5dnqau/4/

我希望 HTML 看起来类似于:

<p class="par hid">
    Lorem ipsum dolor sit amet, populo feugiat legimus vix eu, propriae  
    ...
</p>

然后我们会像这样运行脚本:

var p = $('.par');
var animator = $('<span class="anim"></span>');
var hidden = $('<span class="hid"></span>')
var textLength = p.text().length;
var offset = 0;

function animate(letter_position) {
    var text = p.text();
    p.text('');
    var textBefore = text.substring(0, letter_position - 1);
    var textAfter = text.substring(letter_position, textLength);
    var letter = text.substr(letter_position - 1, 1);
    animator.text(letter);
    hidden.text(textAfter);
    p.append(textBefore);
    p.append(animator);
    p.append(hidden);
}

var interval = setInterval(function(){
    if (p.hasClass('hid')) p.removeClass('hid');
    if (offset - 2 === textLength) {
        clearInterval(interval);
        p.children('.anim').remove();
        p.children('.hid').remove();
        return;
    } 
    animate(offset);
    offset++;
}, 100);

它的 CSS 非常简单:

.anim {
    animation: show .01s ease-in-out;
}

@keyframes show {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}

.hid {
    opacity: 0;
}

它所做的实际上是将文本分成 3 个部分。 beforeText 被添加到没有任何样式的段落中,它只是普通段落的文本。然后 animator 是将被动画化的字母并且 hidden 部分将被隐藏(我猜这并不奇怪)。然后我们按照确切的顺序将这 3 个部分附加到段落中。

你可以在setInterval中调整动画效果和长度以及间隔,让它更像是你想要实现的动画。

关于jquery - CSS 动画一次一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45568503/

相关文章:

html - Bootstrap Carousel 不显示所有缩略图

css - 下拉样式 - CSS(整个区域的边框)

javascript - 检查jQuery中是否存在元素

jquery - 我可以使用 jquery 来清空文本区域字段或像输入框一样的 ajax 吗?

javascript - 单击按钮后第二次出现上传对话框

javascript - 是否可以在不刷新整个页面的情况下加载页面内容

javascript - 复制网页供以后处理

html - 我怎样才能使 Logo 跟随固定位置标题?

javascript - ajax 内容和移动设备上的 CSS 悬停效果

html - 悬停时仅显示文本、输入框