Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с массивом (https://javascript.ru/forum/misc/17653-pomogite-s-massivom.html)

9xakep 27.05.2011 20:27

Помогите с массивом
 
<form name="pole">
Введите скорость передвижения(км/ч):<br><input type="text" value="" name="skor"><br>
Введите расстояние(км):<br><input type="text" value="" name="rast"><br>
Результат(ч):<br><input type="text" value="" name="res"><br>
Результат(сек):<br><input type="text" value="" name="sec"><br>
<input type="button" value="Рассчет" onclick="chet()">
</form>
<input type="button" onClick="plus()" value="Начать"/>

<img id="img2" src="http://s45.radikal.ru/i110/1105/74/9ac056cb9f5a.png" name="img">

<script>
function chet() {
var rastoin = document.pole.rast.value;
var sk = document.pole.skor.value;
var result = rastoin/sk
document.pole.res.value = result
var seconds = result*3600
document.pole.sec.value = seconds
}
function plus() {
var image = new Array(document.getElementById('img2'))
for(i=0;i<10;i++){
//<== Что надо вставить сюда???
}
var sec = seconds/10
setTimeInterval(plus,sec)
}
</script>

Я пока что не знаю будет ли это вообще работать,но что надо написать чтобы image повторялась согласно for?То есть-вначале картинки нет,потом (по интревалу) добавляется ещё одна,и т.д.
P.S.смысл скрипта такой:пишешь скорость,расстояние и появляется что-то вроде строки состояния...

Matre 28.05.2011 16:26

<div id='state' style='background: #555555; height: 20px; width: 0;'>
</div>

<script type='text/javascript'>
	var speed = +prompt("Введите скорость:") / 100,
	    distance = +prompt("Введите расстояние:"),
	    e = 0;
	setTimeout(function () {
		e += speed;
		document.getElementById("state").style.width = Math.round(e) + "px";
		if (e <= distance)
			setTimeout(arguments.callee, 10);
	}, 10);
</script>

monolithed 28.05.2011 17:01

Matre,
на всякий))
<div id='state' style='background: #555555; height: 20px; width: 0;'>
</div>

<script type='text/javascript'>
var speed = prompt("Введите скорость:") / 100,
    distance = prompt("Введите расстояние:"), i = 0;
(function () {
    i += speed;
    document.getElementById("state").style.width = i + "px";
    if (i <= distance)
        setTimeout(arguments.callee, 10);
}());
</script>

Matre 28.05.2011 18:07

monolithed, да, так действительно лучше.
Вот как из говна конфетку делают.
А что это за палочка e|0 ?

monolithed 28.05.2011 18:13

Цитата:

Сообщение от Matre
А что это за палочка e|0

побитовый оператор))

alert(1.24586975469|0);

Matre 28.05.2011 18:30

Круто.

А

1.7|0


даёт единицу, т.е. e|0 не аналог Math.round(e)
И зачем speed в таймере делить на 100 каждый раз, когда можно заранее вычислить? Про приведение к строке distance каждый раз я вообще молчу.

А что это за конструкция (function () {... ? Много раз видел, никак не могу понять, после скобочки вот эта штучка function должна приводить к TypeError, не?

monolithed 28.05.2011 19:17

Цитата:

Сообщение от Matre
даёт единицу, т.е. e|0 не аналог Math.round(e)

можно сказать аналог Math.floor();
Цитата:

Сообщение от Matre
И зачем speed в таймере делить на 100 каждый раз, когда можно заранее вычислить? Про приведение к строке distance каждый раз я вообще молчу.

согласен, что некорректно, и для реального использования тут еще много чего можно подправить, а так просто наглядней (чтобы для ТС не было загадкой как это prompt()/100), не более :)
Цитата:

Сообщение от Matre
А что это за конструкция (function () {}());

это инкапсуляция на основе лексического замыкания. Функция создается и сразу вызывается, а все объявленные в ней переменные являются локальными.
Цитата:

Сообщение от Matre
function должна приводить к TypeError, не

нет, этот тип функция относится к FunctionExpression (Функция-выражение)

Sweet 28.05.2011 19:20

Я вот тоже не понял, что хотел сказать monolithed. Кстати, Matre, а зачем каждый раз округлять e, если можно один раз округлить speed при инициализации?;)
Насчет конструкции, грамотно описано здесь

Matre 28.05.2011 21:01

Цитата:

нет, этот тип функция относится к FunctionExpression (Функция-выражение)
В скобочках можна писать только цыферки, а function должно выдавать тайп-еррор.

Цитата:

Кстати, Matre, а зачем каждый раз округлять e, если можно один раз округлить speed при инициализации?
Точность теряется же.

monolithed 28.05.2011 21:31

Цитата:

Сообщение от Matre
В скобочках можна писать только цыферки, а function должно выдавать тайп-еррор.

(function(key, array) {
for(i in key) {
    !/\d+/g.test(i) && array.push(i);
}
alert(array);
}(window.history, []));

или я не так понял вопрос?


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