Javascript.RU

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

Аргументы в Set Interval
Замысел, чтобы происходило вот что:
<!DOCTYPE HTML>
<html>
  
  <head></head>
  
  <body>
    <div id='g' style='background:rgb(100,0,0);width:100px; height:100px; position:absolute; top:0px;left:100px;'
    onMouseOver='app()' onMouseOut='disapp()'></div>
    <script>
      var d, c, h = 100,
        el = document.getElementById('g');

      function a() {
        if (h <= 250) {
          h += 5;
          el.style.background = 'rgb(' + h + ',0,0)';
        } else {
          clearInterval(d);
        }
      }

      function b() {
        if (h >= 100) {
          h -= 5;
          el.style.background = 'rgb(' + h + ',0,0)';
        } else {
          clearInterval(c);
        }
      }

      function app() {
        clearInterval(c);
        d = setInterval(a, 10);
      }

      function disapp() {
        clearInterval(d);
        c = setInterval(b, 10);
      }
    </script>
  </body>

</html>

только с несколькими объектами сразу. Проблема в том, что setInterval не может воззвать к функции с аргументом:
<!DOCTYPE HTML>
<html>
  
  <head></head>
  
  <body>
    <div id='g' style='background:rgb(100,100,100);width:100px; height:100px; position:absolute; top:0px;left:100px;'
    onMouseOver='disapp(1)' onMouseOut='app(1)'></div>
    <div id='g' style='background:rgb(100,100,100);width:100px; height:100px; position:absolute; top:100px;left:100px;'
    onMouseOver='disapp(1)' onMouseOut='app(1)'></div>
    <script>
      var d, c, visited = false,
        h = 100;

      alert('a');

      function a(z) {
        alert(z);
        if (h <= 250) {
          h += 5;
          el.style.background = 'rgb(' + h + ',0,0)';
        } else {
          clearInterval(d);
        }
      }

      function b(z) {
        alert(z);
        if (h >= 100) {
          h -= 5;
          el.style.background = 'rgb(' + h + ',0,0)';
        } else {
          clearInterval(c);
        }
      }

      function app(x) {
        clearInterval(c);
        d = setInterval(a(x), 10);
      }

      function disapp(x) {
        clearInterval(d);
        c = setInterval(b(x), 10);
      }
    </script>
  </body>

</html>

Подскажите, что мне делать что бы можно было такое осуществить (не только с RGB/RGBA, это просто пример).
Заранее благодарен
Ответить с цитированием
  #2 (permalink)  
Старый 24.03.2013, 12:26
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от qwertyuiopoiuytrewq
Проблема в том, что setInterval не может воззвать к функции с аргументом:
откуда такой вывод? Где написано , что из тайчеров нельзя вызывать функции с аргументами?
http://shamansir.github.com/JavaScri...other.timeouts
Ответить с цитированием
  #3 (permalink)  
Старый 24.03.2013, 12:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от dmitriymar
откуда такой вывод? Где написано , что из тайчеров нельзя вызывать функции с аргументами?
Нигде не написано, однако IE7-9 не поддерживают это.

function fn(){
    alert(Array.prototype.slice.call(arguments));
}

setTimeout(fn, 100, 'arg1', 'arg2');


Тем не менее, никто не запрещает вызывать функцию без агрументов, которая уже вызовет нужную функцию с аргументами
Ответить с цитированием
  #4 (permalink)  
Старый 24.03.2013, 12:47
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от danik.js
Сообщение от dmitriymar
откуда такой вывод? Где написано , что из тайчеров нельзя вызывать функции с аргументами?
Нигде не написано, однако IE7-9 не поддерживают это.
Добро пожаловать по ссылке http://shamansir.github.com/JavaScri...other.timeouts
использование эвалинья таймаутами
использование функции обёртки
Ответить с цитированием
  #5 (permalink)  
Старый 24.03.2013, 12:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ходил по ссылке. Там скукота )
Вот это поинтереснее. К сожалению не работает в старье(не-ES5)
function fn(){
    alert(Array.prototype.slice.call(arguments));
}
 
setTimeout(fn.bind(null, 'arg1', 'arg2'), 100);
Ответить с цитированием
  #6 (permalink)  
Старый 24.03.2013, 12:56
Интересующийся
Отправить личное сообщение для qwertyuiopoiuytrewq Посмотреть профиль Найти все сообщения от qwertyuiopoiuytrewq
 
Регистрация: 05.01.2013
Сообщений: 21

Спасибо.
Я дурак можно было вызвать с кавычками.
Но.
Допустим я перестарался с количеством функций.
Допустим я это исправил и больше такой надобности нет:
<!DOCTYPE HTML>
<html>
  
  <head></head>
  
  <body>
    <div style='background:rgb(100,100,100);width:100px; height:100px; position:absolute; top:0px;left:100px;'
    onMouseOver='b(this)' onMouseOut='a(this)'></div>
    <div style='background:rgb(100,100,100);width:100px; height:100px; position:absolute; top:110px;left:100px;'
    onMouseOver='b(this)' onMouseOut='a(this)'></div>
    <script>
      var d, c,
        h = 100;

      alert('a');

      function a(el) {
        clearInterval(c);
        d = setInterval(function () {
          if (h <= 250) {
            h += 5;
            el.style.background = 'rgb(' + h + ',0,0)';
          } else {
            clearInterval(d);
          }
        }, 10);
      }

      function b(el) {
        clearInterval(d);
        c = setInterval(function () {
          if (h >= 100) {
            h -= 5;
            el.style.background = 'rgb(' + h + ',0,0)';
          } else {
            clearInterval(c);
          }
        }, 10);
      }

     
    </script>
  </body>

</html>

но что мне делать, если при перемещении курсора с одного блока на другой блок не перекрашивается до конца.
Заранее благодарен.

Последний раз редактировалось qwertyuiopoiuytrewq, 25.03.2013 в 20:43.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр таблиц Georgy Элементы интерфейса 19 12.08.2015 17:29
Что это значит? (Refused to set unsafe header) mat_ppc Opera, Safari и др. 2 09.04.2015 05:49
Как передать аргументы в callback функцию Artemiy-tlt jQuery 7 21.09.2011 15:08
Как обойти аргументы функции? prolapse Events/DOM/Window 2 19.09.2011 01:23
Передача полю объекта - массиву, значения элемента через set метод poorking Общие вопросы Javascript 1 13.02.2011 20:22