Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.03.2014, 22:27
Интересующийся
Отправить личное сообщение для seniormelikyan Посмотреть профиль Найти все сообщения от seniormelikyan
 
Регистрация: 01.08.2013
Сообщений: 21

Эффект печатной машинки
Всем доброй ночи. Хотелось бы реализовать эффект печатной машинки на сайте, чтобы буквы печатались через определенный интервал. Есть такой код, который работает корректно, но желаемого результата не дает. Подскажите, в чем ошибка. Код написан на jQuery:

$.fn.typewriter = function(params) {
        var params = params || {},
            repeat = 'undefined' !== typeof params.repeat && ('boolean' === typeof params.repeat || 'number' === typeof params.repeat && (params.repeat === 0 || params.repeat === 1)) ? !!params.repeat : true,
            speed = 'undefined' !== typeof params.speed && 'number' === typeof params.speed && params.speed > 0 ? params.speed : 150;
        
        return this.each(function() {
            var $this = $(this),
                text = $.trim($this.text());
            
            setTimeout(function() {
                var line = ' ' + text,
                    i = 0;
                
                if (i++ < line.length) {
                    $this.text($this.text().substring(1, i));
                } else {
                    if (repeat === false) {
                        exit();
                    } else {
                        $this.text(' ');
                        i = 0;
                    }
                }
            }, speed);
        });
    };
Ответить с цитированием
  #2 (permalink)  
Старый 19.03.2014, 22:38
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

setTimeout вызывает коллбэк один раз, используй setInterval. И exit() - это твои фантазии. Используй clearInterval.
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2014, 22:49
Интересующийся
Отправить личное сообщение для seniormelikyan Посмотреть профиль Найти все сообщения от seniormelikyan
 
Регистрация: 01.08.2013
Сообщений: 21

Сообщение от Sweet Посмотреть сообщение
setTimeout вызывает коллбэк один раз, используй setInterval. И exit() - это твои фантазии. Используй clearInterval.
Не помогло
P.S.: Cорри, exit() с PHP перепутал
Ответить с цитированием
  #4 (permalink)  
Старый 19.03.2014, 23:01
Интересующийся
Отправить личное сообщение для seniormelikyan Посмотреть профиль Найти все сообщения от seniormelikyan
 
Регистрация: 01.08.2013
Сообщений: 21

Проблема решена
Тему можно закрывать.
Ответить с цитированием
  #5 (permalink)  
Старый 19.03.2014, 23:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Печатная машинка
seniormelikyan,
Вариант
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<style type="text/css">
 div{
   font-size: 24px;
   height: 30px;
 }
</style>
<script src="https://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$.fn.typewriter = function (params) {
    function writer(elem, text, speed, repeat) {
    var i = 0,
        TextNode = document.createTextNode("");
        elem.appendChild(TextNode);
        elem.timer = setInterval(function () {
            if (text.length === i) repeat ? (i = 0, TextNode.data = "") : clearInterval(elem.timer);
            else
                for (TextNode.data += text[i++];" " === text[i];) TextNode.data += text[i++]
        }, speed)
    }
    var options = {
        speed: 500,
        repeat: false
    }, options = $.extend(options, params);
    return this.each(function () {
        var text = $(this).text();
        $(this).text("");
        writer(this, text, options.speed, options.repeat)
    })
};
</script>
<script type="text/javascript">
$(window).load(function(){
$(".one").typewriter({repeat: true});
$(".too").typewriter();
});
</script>
  <title></title>
</head>
<body>
<div class="one">Всем доброй ночи.</div>
<div class="too">Код написан на jQuery.</div>
</body>
</html>

Последний раз редактировалось рони, 18.12.2019 в 23:19.
Ответить с цитированием
  #6 (permalink)  
Старый 20.03.2014, 00:19
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<div id="data"></div>
<script>
(function () {
var str = 'Привет форум JavaScript',
	len = str.length,
	i = 0,
	tId = setInterval(function () {
	  data.innerHTML += str[i++];
	  if (i == len) clearInterval(tId);
	}, 400);
}());
</script>

<div id="data"></div>
<script>
(function () {
var str = 'Привет форум JavaScript',
	len = str.length + 1,
	i = 0;
	setInterval(function () {
	  data.innerHTML += str[i++];
	  if (i == len) data.innerHTML = '', i = 0;
	}, 400);
}());
</script>

мой вариант
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2017, 17:24
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 84

Подскажите, пожалуйста, как сделать перенос строки?
<p id="data"></p>
<script>
(function () {
var str = 'Первая строка <br> Вторая строка!',
	len = str.length,
	i = 0,
	tId = setInterval(function () {
	  data.innerHTML += str[i++];
	  if (i == len) clearInterval(tId);
	}, 50);
}());
</script>

Последний раз редактировалось Feex, 18.04.2017 в 17:28.
Ответить с цитированием
  #8 (permalink)  
Старый 18.04.2017, 17:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Feex,
<p id="data"></p>
<script>
(function () {
var str = 'Первая строка <br> Вторая строка!',
  len = str.length,
  i = 0,
  a,
  tId = setInterval(function () {
    a = str[i];
    if(a == '<') {a = '<br>'; i += 4 }
    else i++
    data.innerHTML += a;
    if (i == len) clearInterval(tId);
  }, 50);
}());
</script>
Ответить с цитированием
  #9 (permalink)  
Старый 18.04.2017, 18:02
Аспирант
Отправить личное сообщение для Feex Посмотреть профиль Найти все сообщения от Feex
 
Регистрация: 30.12.2015
Сообщений: 84

Сообщение от рони Посмотреть сообщение
Feex,
<p id="data"></p>
<script>
(function () {
var str = 'Первая строка <br> Вторая строка!',
  len = str.length,
  i = 0,
  a,
  tId = setInterval(function () {
    a = str[i];
    if(a == '<') {a = '<br>'; i += 4 }
    else i++
    data.innerHTML += a;
    if (i == len) clearInterval(tId);
  }, 50);
}());
</script>
Рони, Как всегда, спасибо!!!
В этой теме есть решение, Ваше, кстати, просто отличный вариант, но хотелось что-то по-легче)
В общем, Спасибо еще раз)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
применение только к печатной версии tvixa Элементы интерфейса 0 04.11.2013 10:07
Необходимо исправить функцию печатной машинки seoinby Events/DOM/Window 12 18.02.2013 18:50
Открытие новости в виде печатной машинки znachok88 Ваши сайты и скрипты 9 24.12.2012 15:12
реально ли реализовать такой эффект на сайте danil-n2 Элементы интерфейса 1 09.11.2012 00:34
Интересный эффект InviS jQuery 4 25.08.2010 13:49