如何在不分隔跨度字母的情况下对文本进行动画处理
how to animate text without dividing letters in spans?
我正在尝试动态地对元素中的文本进行动画处理,但我找不到一种方法,到目前为止我尝试过 https://jsfiddle.net/yup55u9f/3/但这不是最好的方法。
我已经尝试了一些方法,例如将文本split
数组并在 SPAN 中推送字母,但它不起作用。
var i = -1,
spn = document.querySelectorAll('.spn'),
stInt;
var setTO = setTimeout(function AnimTxt() {
stInt = setInterval(function () {
if (i <= spn.length) {
i += 1;
$('.spn').eq(i).css({
color: "red",
marginTop: "-10px"
});
return false;
}
}, 100);
}, 2000);
.spn {
position: absolute;
transition: all 1s ease;
top: 8px;
left: 5px;
text-transform: uppercase;
letter-spacing: 0px;
margin-top: 40px;
}
.spn:nth-of-type(2) {
left: 16px
}
.spn:nth-of-type(3) {
left: 27px
}
.spn:nth-of-type(4) {
left: 42px
}
p {
margin-top: 30px;
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<span class="placeholder-cont">
<span class="spn">t</span>
<span class="spn">e</span>
<span class="spn">x</span>
<span class="spn">t</span>
</span>
我现在尝试将字母分成span
标签。至于这个 - 不分离新元素会更好 - 我找不到一种方法来实现这一点而不将字母分成span
.
for (i = 0; i < text.length; i++) {
$(".placeholder-cont").append("<span class='spn'>" + text[i] + "</span>");
}
然后使用.each()
和setTimeout()
而不是setInterval
对它们进行动画处理
$(".spn").each(function(index, el) {
setTimeout(function() {
$(el).css({
color: "red",
marginTop: "-10px"
});
if (index == (text.length - 1)) {
setTimeout(function() {
$('p').show();
}, 1000);
}
}, 100 * index);
});
请参考这个小提琴。
编辑
为了删除我添加到span标签position: absolute
-
display: inline-block;
然后使用"转换"属性进行动画处理。
更新的小提琴。
这是另一种方法。您可以使用split()
从字母创建数组,然后使用 map()
和 replace()
将每个字母包装在span
中,然后join()
返回到字符串。
$('.text').html($('.text').text().split('').map(function(e) {
return e.replace(/[^ ]/g, "<span class='letter'>$&</span>");
}).join(''));
$('.text .letter').each(function(i) {
setTimeout(() => {
$(this).css({
'transform': 'translateY(-50px)',
'color': 'red'
});
}, 100 * i);
})
.text {
font-size: 25px;
text-transform: uppercase;
}
.letter {
margin-top: 50px;
transition: all 0.3s ease-in-out;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="text">Lorem ipsum dolor.</div>
相关文章:
- 在不移动内部文本的情况下缩放元素的效果
- 无法't在不使用Javascript刷新页面的情况下多次将值传递给文本框
- 如何在不打断标记的情况下突出显示html字符串中的文本
- 在不更改HTML源代码的情况下,在管理员TinyMCE编辑器中突出显示文本
- 在不更改边框颜色的情况下更改文本的颜色
- 在不使用javascript的情况下,可以在表单字段中设置文本占位符(以提示最终用户插入特定格式)
- 如何在不通过模型验证的情况下屏蔽文本输入中输入的字符
- 如何在不干扰电子邮件通知的情况下将眼镜保存在文本文件中
- 如何在没有表单提交、没有js、没有jquery和没有ajax的情况下将输入的文本框值存储到php变量中
- 如何在不点击的情况下突出显示 HTML 中的文本
- 如何在不使用任何 html 输入/搜索元素的情况下读取本地客户端文本文件
- 如何在不丢失格式的情况下连续淡入() 元素文本的每个字符,包括嵌套元素
- 如何在不分隔跨度字母的情况下对文本进行动画处理
- 是否可以在没有CMS的情况下使用富文本编辑器
- 输入文本是't在一种情况下以相同的形式更新与另一种情况相同的角度模型
- 在没有 jquery 的情况下更改子节点(父节点具有 ID)中的链接文本
- 在不使用JQuery的情况下更改IFrame中的文本
- 如何在没有任何元素id的情况下检索表中的文本内容
- 如何在不强制的情况下添加条件文本?[101,pdf格式]
- AJAX/JS:是否可以在没有提交按钮和刷新页面的情况下获取输入文本的值