Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Подчёркивание следующей буквы при условии, что прежняя набрана в соответствии с вышеуказанным шаблоном.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: текстовый слайдер следит за текстом, перебирая соответствие
xcislav
Отправлено: 16 Октября, 2014 - 17:19:35
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Апр. 2014  


Помог: 0 раз(а)




Задаются две равные по идентичности строки (всё что вводится в <input> данной строке - должно быть тождественно). По мере продвижения курсор, реализованый в виде стиля нижнего подчёркивания .style.textDecoration = "underline", движется до excercise_results() - завершение конца набора.

Содержимое каждого заданного текста дополнительно содержит в себе завершающую точку и пробел в конце (то есть два дополнительно).
Это можно видеть в трёх моментах:
length - 2
[i + 2]

второй:
extraNodes > 2
[pos + 2]

и третий:
(k - 1)
&
(k - 2)


var xp = 0 - начальная позиция со старта набора.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <body>
  3.     <p id="isdivNode"><span>Staff. </span>
  4.     </p>
  5.     <form>
  6.         <input size="55" onkeypress="compare(event)">
  7.     </form>
  8.     <script>
  9.        var strtest = "Staff. ";
  10.        divNode = document.getElementById("isdivNode");
  11.        var xp = 0;
  12.        deep = true;
  13.        divNode.childNodes[0].style.textDecoration = "none";
  14.        for (i = 0; i < strtest.length; i++) {
  15.            if (i < divNode.childNodes.length - 2) {
  16.                if (divNode.childNodes[i + 2].nodeType == 1) {
  17.                    divNode.childNodes[i + 2].firstChild.data = strtest.charAt(i);
  18.                }
  19.            } else {
  20.                myNode = divNode.firstChild.cloneNode(deep);
  21.                myNode.firstChild.data = strtest.charAt(i);
  22.                divNode.appendChild(myNode);
  23.            }
  24.        }
  25.        extraNodes = divNode.childNodes.length - strtest.length;
  26.        pos = strtest.length;
  27.        while (extraNodes > 2) {
  28.            divNode.childNodes[pos + 2].firstChild.data = "";
  29.            pos++;
  30.            extraNodes--;
  31.        }
  32.        divNode.childNodes[0].style.color = "white";
  33.        document.forms[0].elements[0].value = "";
  34.  
  35.        function compare(e) {
  36.            var k = strtest.length;
  37.            if (xp < (k - 1)) {
  38.                var keyChar = String.fromCharCode(e.which);
  39.                if (strtest.charAt(xp) == keyChar) {
  40.                    divNode.childNodes[xp + 2].style.textDecoration = "none";
  41.                    xp += 1;
  42.                    if (xp > (k - 2)) excercise_results();
  43.                    divNode.childNodes[xp + 2].style.textDecoration = "underline";
  44.                }
  45.            }
  46.        }
  47.  
  48.        function excercise_results() {
  49.            confirm("fin");
  50.        }
  51.    </script>
  52. </body>
  53.  


ВОПРОС:
Этот код функционирует, но прямо скажу - до тех пор, пока начинаешь добавлять функционал и логику. Возможно ли представить (хотя бы так - схематично) в виде более простых логических сравнений, для того чтобы кодом можно было как-то ворочать в плане масштабирования/функциональности?

(Отредактировано автором: 16 Октября, 2014 - 17:29:25)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB