Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Не работает переменная (integer) в функции (https://javascript.ru/forum/css-html/12915-ne-rabotaet-peremennaya-integer-v-funkcii.html)

javasc 08.11.2010 19:17

Не работает переменная (integer) в функции
 
Не работает переменная (integer) в функции.

Так работает :
Цитата:

function drawScene() { // рисование сцены
gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
perspective(50, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0);
её вызов:
Цитата:

setInterval(drawScene, 1); // вызываем drawScene каждые 15 секунд.
Добавляем переменную и с ней уже весь код не рабочий.
Цитата:

function drawScene(inte) { // рисование сцены
gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
perspective(inte, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0);
её вызов:
Цитата:

setInterval(drawScene(50), 1); // вызываем drawScene каждые 15 секунд.
В чем причина?

exec 08.11.2010 19:21

Цитата:

setInterval(drawScene(50), 1); // вызываем drawScene каждые 15 секунд.
Где вы тут увидели 15 секунд?

setInterval(function() {
drawScene(50);
}, 15000);

javasc 08.11.2010 19:24

Это старый комментарий....там сейчас 1 секунда :-)

Подскажитепочему мой код с переменной не работает.

ksa 08.11.2010 20:46

А так?

setInterval('drawScene('+50+')', 15)

B@rmaley.e><e 08.11.2010 20:55

Цитата:

Сообщение от ksa
setInterval('drawScene('+50+')', 15)

Так лучше не делать.
setInterval(function(){
  drawScene(50);
}, 15); // каждые 15 миллисекунд
Цитата:

Сообщение от javasc
setInterval(drawScene(50), 1); // вызываем drawScene каждые 15 секунд.

Здесь вызывается не функция drawScene, а то, что она возвращает. А она ничего не возвращает, поэтому никакого интервала и не устанавливается.

ksa 08.11.2010 20:57

Цитата:

Сообщение от B@rmaley.e><e
Так лучше не делать.

Взято из примера в МСДН... :lol:

<SCRIPT>
function fnHide(oToHide){
   window.setTimeout("fnHide2(" + oToHide.id + ")", 3000);
}
function fnHide2(sID){
   var o = eval(sID);
   o.style.display="none";
}
</SCRIPT>
<INPUT TYPE=button VALUE="Now you see me ..." 
    ID="oHideButton" onclick="fnHide(this)">

monolithed 08.11.2010 22:07

Цитата:

Сообщение от ksa
Взято из примера в МСДН...

ksa Я тоже уже говорил, что МСДН это не лучший источник инфорамации - не имейте привычки давать примеры новичкам основанные чужом говнокоде.

Один из корректных примеров использования метода setTimeout()

<div style="background: blue; color: white; width: 0px; height: 20px;"></div>

<script type="text/javascript">
window.onload = function(){
    var i = 0;
    (function(){
        if(++i <= 300){
           var element = document.getElementsByTagName('div')[0];
           element.style.width = i+'px';
           element.innerHTML = parseInt(i/3)+'%';
           setTimeout(arguments.callee, 10);
        }
    })();
};
</script>

ksa 08.11.2010 22:12

Ну перестроиться на лучший манер никогда не поздно... :)

monolithed 08.11.2010 22:19

Цитата:

Сообщение от ksa
Ну перестроиться на лучший манер никогда не поздно...

К сожалению, такое бывает не часто

PS: выше пример добавил

ksa 08.11.2010 22:30

Цитата:

Сообщение от monolithed
выше пример добавил

Так куда там аргументы-то совать?

monolithed 08.11.2010 22:50

Цитата:

Сообщение от ksa
Так куда там аргументы-то совать?

Не понял вопроса, для каких действий они нужны?

<div class="div">click1</div>
<div class="div">click2</div>
<div class="div">click3</div>

<style type="text/css">
.div {cursor: pointer; height: 20px;}
.div2 {cursor: pointer; color: white; width: 0px;}
</style>

<script type="text/javascript">
window.onload = function(){
    var div = document.getElementsByTagName('div');
    for(i=0; i<div.length; i++){
        div[i].onclick = function(){
            var div = this, i = 0;
            (function(){
                if(++i <= 300){
                    div.style.width = i+'px';
                    div.style.background = '#'+Math.round(Math.random()*100)+10000;
                    div.setAttribute('class','div2');
                    div.innerHTML = parseInt(i/3)+'%';
                    setTimeout(arguments.callee, 10);
                }
            })();
        };
    }
};
</script>

рони 09.11.2010 05:30

monolithed,
на всякий случай
div.style.background = '#'+Math.round(Math.random()*100)+10000;

не все браузеры могут переварить 7-значный цвет, поэтому лучше так
div.style.background = '#'+(Math.round(Math.random()*100)+100000);

или так
div.style.background = '#'+(Math.round(Math.random()*100)+100);

ksa 09.11.2010 08:37

monolithed, у автора темы был вопрос - как в setTimeout в функцию передавать параметры...

Вот и интересуюсь - как в твоём варианте передать параметры?

Kolyaj 09.11.2010 08:47

Цитата:

Сообщение от ksa
monolithed, у автора темы был вопрос - как в setTimeout в функцию передавать параметры...

Надо сделать так, чтобы параметры передавать не надо было, monolithed и показал как.


Часовой пояс GMT +3, время: 07:10.