Перебежка по буквам.
Задача: есть слово, нужно что бы оно при клике, начиная с последней буквы переместилось вправо. По одной букве.
Все слово я заставил это сделать. И понимаю, что бы выдернуть букву нужен доступ к символам charAt(0);. <html> <head> </head> <body> <div id="t" style="position: absolute">слово</div> <script> var obj=document.getElementById("t"); var x=0; function move() { if(x<100) { x=x+1; s=x+"px"; obj.style.left=s; } } setInterval("move()",7); </script> </body> </html> Здесь пока работает при загрузке документа))) Читал про строки, но как использовать один символ из строки, обработать его и с новыми значениями позиции вернуть, так и не допер. |
setInterval("move()",7) e dас будет выполнятся бесконечно, хотя надобности в нём уже никакой не будет.
А по проблеме: обернуть каждую букву в span. или так:) <span onclick="setInterval(function(){innerHTML=innerHTML.slice(1)+innerHTML.charAt(0)},100)"> слово </span> |
Вот что получилось.
<html> <head> </head> <body> <span id="a" style="position: relative">с</span><span id="b" style="position: relative">с</span><span id="c" style="position: relative">ы</span><span id="d" style="position: relative">л</span><span id="e" style="position: relative">к</span><span id="f" style="position: relative" onClick="move()">а</span> <script> var obj = document.getElementById("f"); var x = 10; function move() { if(x < 100) { x = x + 1; s = x + "px"; obj.style.left = s; setInterval("move()", 300); } } </script> </body> </html> Теперь ломаю голову как передвигаться по ID элементов. Допустим можно загнать ABCDEF в массив и присваивать эти значения переменной, которая в свою очередь будет подставляться в строку создания obj. Но! Символы ведь не цифры. Как их присвоить переменной? И Будет ли Код:
var obj = document.getElementById("f"); |
Дошел я до такого нагромождения. С моими представлениями о JS должно работать. Но! Вообще не работает. Либо синтаксическая ошибка либо я просто чего не знаю. Все операции вроде простые. Дорогие гуру, подскажите.
<html> <head> </head> <body> <span id="a" style="position: relative">с</span><span id="b" style="position: relative">с</span><span id="c" style="position: relative">ы</span><span id="d" style="position: relative">л</span><span id="e" style="position: relative">к</span><span id="f" style="position: relative" onClick="move()">а</span> <script> var obj; var i; function move() { for (i = 0; i < 7; i++) { switch(i) { case 0: obj = document.getElementById("a"); break; case 1: obj = document.getElementById("b"); break; case 2: obj = document.getElementById("c"); break; case 3: obj = document.getElementById("d"); break; case 4: obj = document.getElementById("e"); break; case 5: obj = document.getElementById("f"); break; } var x; function mov() { if(x < 100) { x = x + 2; s = x + "px"; obj.style.left = s; setInterval("mov()", 100); } } } } </script> </body> </html> |
Перепишите, это неправильно)
|
Цитата:
Может кто то другой окажется компетентнее предыдущего оратора? Я не прошу за меня писать код. Укажите ошибки, где несостыковки в коде? Нельзя switch заталкивать в функцию? Я неправильно вызываю функцию? Или с переменными накосячил? |
|
Цитата:
|
Цитата:
|
art13, не поймите меня неправильно, но ваш код не очень)
Вы правильно использовали switch, но в том месте, где его использование абсолютно неоправданно. Более того - использование здесь идентификаторов абсолютно неоправданно. Просто получайте внутри тега-родителя все спаны через parent.getElementsByTagName. Дальше массивом перебирайте их и ставьте нужные св-ва. Много ответов на свои вопросы вы так же найдёте в этой статье. Кстати - ставьте один интервал для всех элементов, а не для каждого отдельного. |
Цитата:
|
Цитата:
|
Код тяжелый это я знаю. Если бы оно заработало, то уже бы было интересно. Спасибо всем, буду учиться дальше.
|
Цитата:
|
разбераться лень но сразу глаз режет то что у вас var i; фиг знает где объявленно, при втором запуске вашей функции i будет равно 6, дальше ищите сами))
|
Мне предложили такой вариант. Не уверен что это работает быстро на слабеньких компах.
<html> <head> <title></title> </head> <body> <script> var mPos = 0; var cPos = 0; var bukva; var step=0; function moveB() { var a; setTimeout("myBuk = document.getElementById('a1'); mPos = 300; bokMove(myBuk);",75000); setTimeout("myBuk = document.getElementById('a2'); mPos = 310; bokMove(myBuk);",60000); setTimeout("myBuk = document.getElementById('a3'); mPos = 320; bokMove(myBuk);",45000); setTimeout("myBuk = document.getElementById('a4'); mPos = 330; bokMove(myBuk);",30000); setTimeout("myBuk = document.getElementById('a5'); mPos = 340; bokMove(myBuk);",15000); var myBuk = document.getElementById("a6"); mPos = 350; bokMove(myBuk); } function bokMove(wrBuk) { bukva = wrBuk cPos = parseInt(bukva.style.left); step = setInterval("dvig();",40); } function dvig() { cPos++; if(cPos < mPos) bukva.style.left = cPos + "px"; else clearInterval(step); } </script> <span id="a1" style="position:absolute; left:15px;" onclick="moveB()">c</span> <span id="a2" style="position:absolute; left:25px;" onclick="moveB()">c</span> <span id="a3" style="position:absolute; left:35px;" onclick="moveB()">ы</span> <span id="a4" style="position:absolute; left:45px;" onclick="moveB()">л</span> <span id="a5" style="position:absolute; left:55px;" onclick="moveB()">к</span> <span id="a6" style="position:absolute; left:65px;" onclick="moveB()">а</span> </body> </html> |
А в чём вообще была Ваша цель? Двигать буквы по очереди (с разным интервалом)? Так формулировать чётче желательно :)
|
Цитата:
![]() этот код меня очень сильно огорчил. как самим способом реализации, так и реализацией. с нашей помощью, выработайте нормальный алгоритм и нормально его реализуйте. |
Кстати, ОМГ... Разве первым аргументом setTimeout() является строка?..
|
popov654, можно использовать строку, но нежелательно.
|
Да я понимаю, что это очень тяжело для браузера. Времени очень не хватает сейчас заняться этой задачкой.
|
У меня глупый вопрос, а зачем плодить кучу элементов <span>.
Может стоит тягать по букве с помощью функции slice(startPos,endPos), а для анимации использовать один элемент (ну если строго по букве перемещать) в который перемещаемая буква будет закидываться?? Ну или для унификации функции сделать обертывание буквы элементом "на лету" ... |
Можно и так.
|
Aж понравилось )
<html> <head> </head> <body> <div id="t" style="position: absolute">простидижетатор</div> <script> var obj = document.getElementById("t"); var x = 0; var span = {}; var animation_on = false; function move() { x=x+1; s=x+"px"; span.style.left=s; } var letters_move = function() { // console.log(' x = '+x); var o = obj.innerHTML; if(animation_on) { if(x<100) { move(); }else{ span.style.display='none'; animation_on = false; x=0; if(o.length<1) { return false; } } }else{ span = document.createElement('SPAN'); span.appendChild(document.createTextNode(o.slice(0,1))); span.style.top = obj.offsetTop; span.style.left = obj.offsetLeft; span.style.position = "absolute"; document.getElementsByTagName('body')[0].appendChild(span); obj.innerHTML = o.slice(1,o.length-1); animation_on = true; // console.log(' - animation_on: '+animation_on ); move(); } setTimeout("letters_move()",7); } setTimeout("letters_move()",7); </script> </body> </html> |
Keeper, сделайте запускаемым, штоле...
|
проверил в FF и Chrome, IE 9, Safari, Opera 11.60
|
Цитата:
|
|
Цитата:
Цитата:
<html> <head> </head> <body> <div id="t" style="position: absolute">простидижетатор</div> <script> var obj = document.getElementById("t"); var x = 0; var span = {}; var animation_on = false; function move() { x=x+1; s=x+"px"; span.style.left=s; } var letters_move = function() { // console.log(' x = '+x); var o = obj.innerHTML; if(animation_on) { if(x<100) { move();} else { span.style.display='none'; animation_on = false; x=0; if(o.length<1) { return false;} } } else { span = document.createElement('SPAN'); span.appendChild(document.createTextNode(o.slice(0,1))); span.style.top = obj.offsetTop; span.style.left = obj.offsetLeft; span.style.position = "absolute"; document.getElementsByTagName('body')[0].appendChild(span); obj.innerHTML = o.slice(1,o.length-1); animation_on = true; // console.log(' - animation_on: '+animation_on ); move(); } setTimeout("letters_move()",7); } setTimeout("letters_move()",7); </script> </body> </html> |
Дак помог нет ? )
|
Keeper, а текст должен в конце исчезать?
|
trikadin, ну да )
|
Да. Просто мне нужно еще разобраться в вашем коде. Еще только учусь. И больше времени отдаю "С". Спасибо.
|
Часовой пояс GMT +3, время: 09:19. |