javascript - 仅在屏幕场景和一个又一个元素中键入动画(jQuery)
问题描述
如何在 jquery 中使用 <h1 仅对当前显示在屏幕上的元素进行动画处理(因为 html 文件包含许多元素,但大多数元素将被隐藏,并且在一个场景 <span id> 中一次只有一些元素可见) > 首先只显示淡入动画,然后在完成后,第一个 <p> 显示打字动画,然后是下一个 <p> 之后(如果存在的话,还有第三、四、五段)?
<!-- 1. Scene: #dense-jungle brought to the screen -->
<span id="dense-jungle">
<!-- 2. <h3> fadeIn -->
<h3>Dense Jungle</h3>
<!-- 3. The first <p> gets texted with typing/typewriter animation -->
<p>The jungle is so green.</p>
<!-- 4. The next <p> gets texted after the first -->
<p>There is a path.</p>
<!-- 5. And if another followed <p> does also exist in the scene -->
</span>
解决方案
我发现有了这个,您可以为屏幕元素设置不同的样式(使用 CSS)。但是我需要打字效果来排队输入段落的动画,而不是破坏单词的结构。
在 CSS 中:.span-0{display: block;position: relative;-webkit-transform: rotate(-1deg);} .span-1{display: block;position: relative;-webkit-transform:scale(1.11) translateY(0.02em)rotate(2deg);} .span-2{display: block;position: relative;-webkit-transform:translateY(-0.04em)rotate(0deg);}
使用 JS:
var processTextNodes = function(element, fn){
var children = element.childNodes;
for (var i = children.length; i --> 0;){
var node = children[i];
var type = node.nodeType;
if (type == 1) processTextNodes(node, fn);
if (type == 3) fn.call(this, node);
}
}
// Styling p>span divided into 20 section
$(function(){
$("p").each(function(){
processTextNodes(this, function(node){
var txt = node.nodeValue.replace(/\s+/g, ' ').split('');
var spans = [];
while (txt.length){
var tempAr = [];
tempAr[tempAr.length] = txt.shift();
var charsFound = (tempAr[tempAr.length - 1] !== " ");
while (txt[0] === " "){
tempAr[tempAr.length] = txt.shift();
}
if (!charsFound){tempAr[tempAr.length] = txt.shift();}
spans[spans.length] = tempAr.join("");
}
var parent = node.parentNode;
for (var i = 0, len = spans.length; i < len; i++ ){
var span = spans[i];
parent.insertBefore($('<span class="added">' + span + '</span>')[0], node);
}
parent.removeChild(node);
});
$("span.added", this).each(function(index){
$(this).addClass("span-" + (index % 20));
});
});
});
推荐阅读
- javascript - toplevel var statement with common vs. assignment statement with comma: why are they different
- php - CakePHP 2.x - 请求数据中的某些字段不完整
- angular - 如何获得可观察的实际值
- python - 使用对数轴刻度时的 Matplotlib 乳胶错误,取决于版本
- javascript - iframe 中的 Instanceof 失败
- sql-server - 在 SQL Operations Studio for MacOS 中创建 SQL 代码段
- vue.js - Vuejs动态异步组件未加载
- c++ - 连接到本地 mongoDB 并在 C++11 中进行事务
- php - 参数在函数中通过引用传递
- codeigniter - 使用 codeigniter 将 HTML 表单中的 post 数据发送到 RESTful 服务