Итак, у меня почти есть мой code, работающий так, как я хочу, но не могу заставить мою анимацию синхронизироваться вместе в самый раз. Я пытаюсь анимировать курсор, выделяющий текст, и затем нажатие на кнопку. Проблема в том, что курсор слишком медленный или слишком быстрый. Я пытаюсь сделать это динамическим так, чтобы независимо от того, как долго текст, я все еще могу синхронизировать анимацию. Я знаю, что это, вероятно, только математическая проблема, но я не могу ее обойти. Что-то о попытке сопоставить пиксели с миллисекундами делает мою голову вращением. Пожалуйста, помогите, прежде чем вытащить все мои волосы. Благодарю.Анимация синхронизация, курсор и выделение
Вот HTML
<p><span id="container">I need to be highlighted one character at a time</span>
<input id="click" type="button" value="click me"/></p>
<img src="http://dl.dropbox.com/u/59918876/cursor.png" width="16"/>
Вот CSS
#container{
font-size: 16px;
margin-right: 10px;
}
.highlight{
background: yellow;
}
img{
position: relative;
top: -10px;
}
И Javascript
function highlight(){
var text = $('#container').text(); //get text of container
$('#click').css('border','none'); //remove the border
$('img').css('left', '0px'); //reset the cursor left
$('img').animate({left: $('#container').width() + 40}, text.length*70); //animation of cursor
$('#container').html('<span class="highlight">'+text.substring(0,1)+'</span><span>'+text.substring(1)+'</span>'); //set the first html
(function myLoop (i) {//animation loop
setTimeout(function() {
var highlight = $('.highlight').text();
var highlightAdd = $('.highlight').next().text().substring(0,1);;
var plain = $('.highlight').next().text().substring(1);
$('#container').html('<span class="highlight">'+highlight+highlightAdd+'</span><span>'+plain+'</span>');
if (--i) myLoop(i);// decrement i and call myLoop again if i > 0
}, 70)
})(text.length);
setTimeout(function() {
$('#click').css('border','1px solid black');
}, text.length*85);
}
highlight();
var intervalID = setInterval(highlight, $('#container').text().length*110);
//clearInterval(intervalID);
Вот ссылка на fiddle я играл вокруг в.
+1 Мне это нравится, и я увижу, могу ли я интегрировать его в свой код. Я все еще хочу посмотреть, есть ли лучшие решения. Спасибо –
Прохладный рад помочь ... –
Ты рок! Спасибо за идею. Это было именно то, что мне нужно было придумать. См. Мой обновленный [код] (http://jsfiddle.net/bplumb/MmZwU/2/). –