Изменение уровня прозрачности блока
Здравствуйте!
Хотел реализовать постепенное изменение прозрачности блока, но что-то не выходит :cray: Имеется следующая функция:
<script>
function setOpacity() {
for(var op=0; op<=1; op=op+0.1) {document.getElementById('big').style.opacity=op;}
</script>
и собственно сам блок: <div id="big" onClick="setOpacity();"> blah-blah-blah... </div> Помогите, пожалуйста, советом, что я делаю не так.:blink: |
var op = -1;
function setOpacity() {
if( op < 10 ) {
++op;
document.getElementById('big').style.opacity=op/10;
setTimeout( setOpacity, 100 );
}
}
|
Все хорошо, но событие при клике происходит только один раз. Все последующие клики не обрабатываются, а надо, чтобы событие повторялось :(
|
var setOpacity = function() {
var op, to;
return function () {
if( to )
clearTimeout( to );
to = null;
var id = document.getElementById('big');
op = -1;
(function _() {
id.style.opacity = ++op/10;
if( op < 10 )
to = setTimeout( _, 100 );
else
to = null;
})();
}
}();
|
TRos,
частая ошибка:)
<script>
function setOpacity() {
var op = 0;
setTimeout(function (){
if (op > 1) return;
document.getElementById('big').style.opacity=op;
op+=0.1
setTimeout (arguments.callee, 100);
}, 100);
}
</script>
<div id="big" onClick="setOpacity();" style="opacity:0.1">
blah-blah-blah...
</div>
|
Спасибо, rgl - помогли взглянуть на проблему шире :)
Огромное спасибо, Dim@ - именно то, что нужно! Про условие с таймаутом думал сразу, но почему-то уперся в цикл, думал, что так будет правильнее :) Проблема решена:thanks: |
Цитата:
<script>
function setOpacity() {
var op = 0;
setTimeout(function (){
if (op > 1) return;
document.getElementById('big').style.opacity=op;
op+=0.01 // тут поменял
setTimeout (arguments.callee, 100);
}, 100);
}
</script>
<div id="big" onClick="setOpacity();" style="opacity:0.1">
blah-blah-blah...
</div>
|
rgl,
да я знаю, когда сам игрался с прозрачностью (пару месяцев назад) я видел что это происходит, единственное чего тогда не хватает это флага:
<script>
var flag = true;
function setOpacity() {
if (flag === false) return;
flag = false;
var op = 0;
setTimeout(function (){
if (op > 1){
flag = true;
return;
}
document.getElementById('big').style.opacity=op;
op+=0.01 // тут поменял
setTimeout (arguments.callee, 100);
}, 100);
}
</script>
<div id="big" onClick="setOpacity();" style="opacity:0.1">
blah-blah-blah...
</div>
|
| Часовой пояс GMT +3, время: 10:24. |