19.03.2014, 22:27
|
Интересующийся
|
|
Регистрация: 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);
});
};
|
|
19.03.2014, 22:38
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
setTimeout вызывает коллбэк один раз, используй setInterval. И exit() - это твои фантазии. Используй clearInterval.
|
|
19.03.2014, 22:49
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 21
|
|
Не помогло
P.S.: Cорри, exit() с PHP перепутал
|
|
19.03.2014, 23:01
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 21
|
|
Проблема решена
Тему можно закрывать.
|
|
19.03.2014, 23:52
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
Печатная машинка
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.
|
|
20.03.2014, 00:19
|
|
Профессор
|
|
Регистрация: 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>
мой вариант
|
|
18.04.2017, 17:24
|
Аспирант
|
|
Регистрация: 30.12.2015
Сообщений: 85
|
|
Подскажите, пожалуйста, как сделать перенос строки?
<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.
|
|
18.04.2017, 17:47
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,123
|
|
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>
|
|
18.04.2017, 18:02
|
Аспирант
|
|
Регистрация: 30.12.2015
Сообщений: 85
|
|
Сообщение от рони
|
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>
|
Рони, Как всегда, спасибо!!!
В этой теме есть решение, Ваше, кстати, просто отличный вариант, но хотелось что-то по-легче)
В общем, Спасибо еще раз)
|
|
|
|