Аргументы в 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, это просто пример). Заранее благодарен |
Цитата:
http://shamansir.github.com/JavaScri...other.timeouts |
Цитата:
function fn(){
alert(Array.prototype.slice.call(arguments));
}
setTimeout(fn, 100, 'arg1', 'arg2');
Тем не менее, никто не запрещает вызывать функцию без агрументов, которая уже вызовет нужную функцию с аргументами :) |
Цитата:
использование эвалинья таймаутами использование функции обёртки |
Ходил по ссылке. Там скукота )
Вот это поинтереснее. К сожалению не работает в старье(не-ES5)
function fn(){
alert(Array.prototype.slice.call(arguments));
}
setTimeout(fn.bind(null, 'arg1', 'arg2'), 100);
|
Спасибо.
Я дурак можно было вызвать с кавычками. Но. Допустим я перестарался с количеством функций. Допустим я это исправил и больше такой надобности нет:
<!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>
но что мне делать, если при перемещении курсора с одного блока на другой блок не перекрашивается до конца. Заранее благодарен. |
| Часовой пояс GMT +3, время: 07:47. |