我用 jQuery 跨越段落的每个字符,以便稍后对其进行动画处理。
// span each character
$('#testText p').children().andSelf().contents().each(function(){
if (this.nodeType == 3) {
var $this = $(this);
$this.replaceWith($this.text().replace(/(\w)/g, "<span>$&</span>"));
}
});
// store each span
$spanCharacters = $('#testText p span');
我有大约 800 个字符。它变得非常缓慢......我想知道是否有任何方法可以让它更快。
就像现在它为每个跨度创建一个样式:
<span style="position: relative; top: 8.763065797205456px; left: 0px;">i</span>
可以直接换位置吗?
这是完整的代码,请注意我关闭了 draw 方法!
如果您打开它,请注意事情进展缓慢。
var TWO_PI = 6.2831855;
var frameCount = 0;
var $spanCharacters = new Array();
$(document).ready(function() {
// span each character
$('#testText p').children().andSelf().contents().each(function(){
if (this.nodeType == 3) {
var $this = $(this);
$this.replaceWith($this.text().replace(/(\w)/g, "<span>$&</span>"));
}
});
// store each span
$spanCharacters = $('#testText p span');
//var handle = setInterval(draw, 80);
draw();
});
function draw() {
frameCount++;
var width = 500;
$spanCharacters.each(function() {
var offsetLeft = $(this).offset().left;
var offsetTop = $(this).offset().top;
var posLeft = $(this).position().left;
var a = map(posLeft+frameCount, 0, width/5, 0, TWO_PI);
var c = Math.cos(a);
var addOffset = c*10;
//console.log(addOffset);
$(this).offset({ top: offsetTop+addOffset, left: offsetLeft });
});
}
function map(value, istart, istop, ostart, ostop) {
return ostart + (ostop - ostart) * ((value - istart) / (istop - istart));
}
简而言之,如何加快速度?