Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Предлагаю вашему вниманию Text Motion

Сообщения:  [1-5] 

 
 автор: АЯ   (05.02.2010 в 17:19)   письмо автору
 
   для: Trianon   (05.02.2010 в 14:33)
 

Ага... Спасибо!

  Ответить  
 
 автор: Trianon   (05.02.2010 в 14:33)   письмо автору
 
   для: АЯ   (05.02.2010 в 03:55)
 

>Если заменить выделенное жирно на Tim = setTimeout (Motion, Int);, то работать будет во всех браузерах, кроме FF. В FF почему-то функция Motion, вызванная по названию (без кавычек и круглых скобок), получает какой-то аргумент.


http://javascript.ru/blog/subzey/Firefox-setTimeout

В Firefox, в setTimeout первым аргументом передаётся "просроченное время", "задержка" (если таковые возникнут) в ходе интерпретации кода. Т.е., если setTimeout не успевает запуститься после назначенного времени (например, через 100мс), эта "просроченная задержка" фиксируется первым параметром.

(с)

  Ответить  
 
 автор: sl1p   (05.02.2010 в 12:49)   письмо автору
 
   для: АЯ   (05.02.2010 в 03:55)
 

Да, вариант не плохой, но что будет если несколько раз нажать на кнопку, или будет много разных элементов на странице которых нужно заанимировать?:)

У меня в ие не работает потому что не могу передать в setTimeout объект с нужными переменными.. пока лень разбираться:)


я вообще думаю сюда забабахать несколько анимаций с возможностью их скрещивания одновременно:)
было бы прикольно вроде:)

  Ответить  
 
 автор: АЯ   (05.02.2010 в 03:55)   письмо автору
 
   для: sl1p   (05.02.2010 в 01:19)
 

Круто!

Разбираться с вашим кодом не стал, сделал тоже самое по-своему (в кроссбраузерном варианте):
<html>
<head>
<title>Text Motion</title>
<script>
function Motion ()
{
if (Motion.arguments.length)
   {
   //alert (Motion.arguments [0])
   if (self.Cln) document.body.removeChild (Cln); Tim = null;
   var s = Motion.arguments [0], obj = document.getElementById (s); Tp = Lt = 0;
   while (obj.offsetParent) {Tp += obj.offsetTop; Lt += obj.offsetLeft; obj = obj.offsetParent}
   Spn = document.getElementById (s); Cln = Spn.cloneNode (1); with (Cln.style)
   {zIndex = 99; position = 'absolute'; left = Lt; top = Tp; fontSize = '100%'}
   Cln = document.body.appendChild (Cln); Spn.style.visibility = 'hidden';
   Ofh = Spn.offsetHeight; Ofw = Spn.offsetWidth; Cur = Sts = 20; Siz = 15; Int = 5;
   }
if (Cur != -1 * Sts)
   {
   Cln.style.fontSize = (100 + Siz * (Sts + --Cur * ((Cur < 0) ? 1 : -1))) + '%';
   with (Cln.style) {top = Tp - (Cln.offsetHeight - Ofh) / 2; left = Lt - (Cln.offsetWidth - Ofw) / 2}
   Tim = setTimeout ('Motion ()', Int);
   }
else Spn.style.visibility = 'visible';
}
</script>
</head>
<body style="margin: 100px 200px">
<span id="boom_me">Text Motion</span><br>
<input style="margin-top: 100px" type="button" onclick="Motion ('boom_me')" value="boom it">
</body>
</html>

В процессе обнаружил интересную особенность у браузера FF.
Если заменить выделенное жирно на Tim = setTimeout (Motion, Int);, то работать будет во всех браузерах, кроме FF. В FF почему-то функция Motion, вызванная по названию (без кавычек и круглых скобок), получает какой-то аргумент. Причём каждый раз этот аргумент - разный. Если раскомментировать alert, то можно будет это увидеть. Что это за аргумент - пока не разобрался.

  Ответить  
 
 автор: sl1p   (05.02.2010 в 01:19)   письмо автору
 
 

:) игрался, и тут вроде пришла идея написать рызные анимации текста.
Пока сухо, конечно.. (+не работает в ИЕ)
но что-то вроде такого :)

потестите кому не лень. Стоит ли продолжать?

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Text Motion</title>

<script type="text/javascript">
function ge(id) {
    return document.getElementById(id);
}
function ce(tagName) {
    return document.createElement(tagName);
}
var tmot = {
    // default settings    
        steps        : 20, // кол-во "кадров"
        stepSize     : 15, // изменение размера шрифта за кадр, в процентах
        stepInterval : 5, // периодичность кадров
        normalize    : true, // если true, текст будет возвращен в исходное положение (т.е. кол-во кадров * 2)
    //
    go: function(el, options) {
        var cn = el.cloneNode(1);
        var layer = ce("DIV");
        layer.style.position = 'absolute';
        layer.appendChild(cn);
        document.body.appendChild(layer);
        
        if(!options) options = [];
        this.m({
            layer  : layer,
            parent : el,
            step   : 0,
            cfg : {
                steps : options.steps? options.steps : this.steps,
                stepSize : options.stepSize? options.stepSize : this.stepSize,
                stepInterval : options.stepInterval? options.stepInterval : this.stepSize,
                normalize : options.normalize? options.normalize : this.normalize
            }
        }, options);
    },
    
    m: function(p, options) {
        if(p.cfg.normalize && p.step >= p.cfg.steps) p._goBack = 1;
        p.step = p._goBack? p.step-1 : p.step+1;
        if(p.step <= p.cfg.steps && (!p._goBack || (p._goBack && p.step >= 0))) {
            fSize = p.layer.style.fontSize.replace('%', '')*1;
            fSize = fSize < 100? 100 : fSize;
            fSize = p._goBack? fSize-p.cfg.stepSize : fSize+p.cfg.stepSize;
            p.layer.style.fontSize = fSize + '%';
            
            var x, y;
            y = p.parent.offsetTop - parseInt((p.layer.offsetHeight - p.parent.offsetHeight)/2);
            x = p.parent.offsetLeft - parseInt((p.layer.offsetWidth - p.parent.offsetWidth)/2);
            p.layer.style.top = y + 'px';
            p.layer.style.left = x + 'px';
            
            setTimeout(tmot.m, p.cfg.stepInterval, p, options);
        } else {
            p.layer.parentNode.removeChild(p.layer);
        }
    }
}
</script>

</head>

<body>
<div style="padding:400px">
<span id="boom_me">Text Motion</span>
</div>
<center><input type="button" onclick="tmot.go(ge('boom_me'))" value="boom it"></center>
</body>
</html>

  Ответить  

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования