Пишем письмо в старинном стиле

Сделаем анимированное старинное письмо. Перо скользит по бумаге, оставляя на ней бессмертные строки. Когда чернила заканчиваются, перо ныряет в чернильницу. иногда случаются ошибки, перо само исправит их.

Разметка

Для письма делаем пустой контейнер, в который будет помещаться текст,  и два изображения (для чернильницы и процесса обмакивания пера).

    <div id="letter"></div>
    <img id="inkwell1" src="/inkwell1.gif" alt="inkwell1" />
    <img id="inkwell2" src="/inkwell2.gif" alt="inkwell2" />

    <div id="letter_src">
		Цыганы шумною толпой<br>
		По биссарбии|||||||||Бессарабии кочуют.<br>
		Они сегодня над рекой<br>
		В шатрах изодранных ночуют.<br><br>

		Как вольность, весел их ночлег<br>
		И мирный сон под небесами;<br>
		Между кал|||колесами телег,<br>
		Полузавешанных коврами,<br><br>

		Горит огонь; семья кругом<br>
		Готовит усин||||ужин; в чистом поле<br>
		Пасутся кони; за шатром<br>
		Ручной медведь лежит на воле.<br><br>

		Всё живо посреди степей:<br>
		Заботы мирные семей,<br>
		Готовых с утром в путь недальний,<br>
		И песни жен, и хрик||||крик детей,<br><br>

		И звон походной наковальни.<br>
		Но вот на табор кочевой<br>
		Нисходит зонное||||||сонное молчанье,<br>
		И слышно в тишине степной<br><br>

		Лишь лай собак да каней|||||коней ржанье.<br>
		Огни везде погашены,<br>
		Спокойно всё, луна сияет<br>
		Одна с небесной вышины<br>
		И тихий табор озаряет.<br>
    </div>

CSS

Зададим стили для нашего письма. Источник текста по умолчанию скрыт.

body {
    background: url('bg.jpg') no-repeat center center fixed;
   -webkit-background-size: cover;
   -moz-background-size: cover;
   -o-background-size: cover;
   background-size: cover;
}
#inkwell1 {
    bottom: 100px;
    left: 140px;
    position: fixed;
}
#inkwell2 {
    bottom: 100px;
    left: 140px;
    position: fixed;
    visibility: hidden;
}
#letter {
    font-family: Comic Sans MS;
    font-size: 18px;
    font-weight: bold;
    margin: 50px auto;
    position: relative;
    width: 75%;
}
#letter_src {
    display: none;
}


JavaScript

Основная идея - выводить символы один за другим. В зависимости от текущего символа можно устанавливать различные задержки и имитировать ошибки письма. Для отображения расхода чернил используется символ пробела, поэтому каждое слово имеет свой цвет (градацию серого). Как только цвет станет совсем белым, запускаем 'обмакивание пера в чернильницу'.

window.onload = function(){
    // Публичные переменные
    var vLetter = document.getElementById('letter');
    var iSpeedInk = 5;

    // Остальные перменные
    var sText = document.getElementById('letter_src').innerHTML;
    var iCurChar = 0;
    var sChars = '<span>';
    var iCurInk = 0;
    var sCurCaret = '';
    var sCaret = "&nbsp;<img src='pen.gif' style='position:absolute' />";

    var doStep = function () {
        // Текуший символ
        var sChar = sText.charAt(iCurChar);

        // Задержка символа по умолчанию
        var iDelay = 32;

        if (sChar == '') {
            sCurCaret = '';
        } else if (sChar == '|') { // Используем символ | для имитации 'ошибки'
            sChar = '';
            sChars = sChars.substring(0, sChars.length-1);
            iDelay = 64;
        } else if (sChar == '<') { // Передаем теги
            var iPos = sText.indexOf('>', iCurChar);
            sChar = sText.substring(iCurChar, iPos + 1);
            iCurChar = iPos;
        } else if (sChar == '&') { // Передаем атрибуты html
            var iPos = sText.indexOf(';', iCurChar);
            sChar = sText.substring(iCurChar, iPos + 1);
            iCurChar = iPos;
        } else if (sChar == '.') { // Пользовательская задержка для символа .
            iDelay = 300;
        } else if (sChar == ',') { // Пользовательская задержка для символа ,
            iDelay = 100;
        } else if (sChar == ' ') { // Пользовательская задержка для пробела
            iDelay = 32;
        } else if (iCurChar > 5) {
            sCurCaret = sCaret;
        }

        // Расходование чернил
        if (sChar == ' ') {
            iCurInk += iSpeedInk;
            sChar = '</span><span style="color:RGB(' + (iCurInk) + ',' + (iCurInk) + ',' + (iCurInk) + ')">' + sChar;
        }

        if (document.getElementById('inkwell2').style.visibility == 'visible') {
            sCurCaret = sCaret;
            document.getElementById('inkwell2').style.visibility = 'hidden';
            sChar = '</span><span style="color:RGB(0,0,0)">' + sChar;
        }

        // Обновление чернил
        if (iCurInk > 160) {
            iCurInk = 0;
            document.getElementById('inkwell2').style.visibility = 'visible';
            iDelay = 1000;
            sCurCaret = '';
        }

        // Добавляем текущий символ в строку
        sChars += sChar;

        // Скрываем каретку после символа
        if (iCurChar == sText.length - 1)
            sCurCaret = '';

        // Обновляем письмо с новыми символами
        vLetter.innerHTML = sChars + sCurCaret;

        // Переходим к следующему символу
        iCurChar++;

        // Следующий шаг
        if (iCurChar < sText.length) {
            setTimeout(doStep, 20 + iDelay);
        }
    }

    doStep();
};

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/LWUT0ZjaspY/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Пишем письмо в старинном стиле | | 2012-08-29 16:16:20 | | Статьи Web-мастеру | | Сделаем анимированное старинное письмо. Перо скользит по бумаге, оставляя на ней бессмертные строки. Когда чернила заканчиваются, перо ныряет в чернильницу. иногда случаются ошибки, перо само | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: