Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Что означает (widthOK, duration) (https://javascript.ru/forum/project/52421-chto-oznachaet-widthok-duration.html)

Skriptor 18.12.2014 15:42

Что означает (widthOK, duration)
 
Объясните, пожалуйста, что означают в данном скрипте свойства heightOK и widthOK, а также откуда javascript знает, что duration - это скорость изменения картинки в миллисекундах (если в коде нигде это не расшифровано):
<script type='text/JavaScript'>
function func(name,width,height,duration,type){  
var img=document.images.im, heightOk=0, widthOk=0; 
if(type==true){  
if ((h<height)&&(w<width)){ 
if(img.height<height)img.height++;  
else heightOk=1; 
if(img.width<width) img.width++; 
else widthOk=1; 
} 
if ((h>height)&&(w>width)){ 
if(img.height>height)img.height--; 
else heightOk=1; 
if(img.width>width)img.width--; 
else widthOk=1; 
} 
if ((h>height)&&(w<width)){ 
if(img.height>height)img.height--;  
else heightOk=1; 
if(img.width<width) img.width++; 
else widthOk=1; 
} 
if ((h<height)&&(w>width)){ 
if(img.height<height)img.height++;  
else heightOk=1; 
if(img.width>width) img.width--; 
else widthOk=1; 
} 
if(heightOk+widthOk==2) setTimeout(func,duration,name,width,height,duration,false); 
else setTimeout(func,duration,name,width,height,duration,true); 
} 
else if(type==false) { 
if ((h<height)&&(w<width)){ 
if(img.height>h)img.height--; 
else heightOk=1; 
if(img.width>w)img.width--; 
else widthOk=1; 
} 
if ((h>height)&&(w>width)){ 
if(img.height<h)img.height++; 
else heightOk=1; 
if(img.width<w)img.width++; 
else widthOk=1; 
} 
if ((h>height)&&(w<width)){ 
if(img.height<h)img.height++; 
else heightOk=1; 
if(img.width>w)img.width--; 
else widthOk=1; 
} 
if ((h<height)&&(w>width)){ 
if(img.height>h)img.height--; 
else heightOk=1; 
if(img.width<w)img.width++; 
else widthOk=1; 
} 
if(heightOk+widthOk!=2) setTimeout(func,duration,name,width,height,duration,false); 
else setTimeout(func,duration,name,width,height,duration,true); 
} 
} 
var h = document.images.im.height; 
var w = document.images.im.width; 
var width = Number(prompt("Ведите максимальную ширину")); 
var height = Number(prompt("Ведите максимальную высоту")); 
var duration = Number(prompt("Ведите milliseconds")); 
func('i', width, height, duration, true);
</script>

danik.js 18.12.2014 17:32

Скрипт анимирует размер картинки.
На каждой итерации проводится проверка достигла ли картинка конечных размеров. Результат этой проверки и отражается в widthOk и heightOk.
Далее, в зависимости от этих результатов продолжается анимация:
Цитата:

Сообщение от Skriptor
if(heightOk+widthOk!=2)setTimeout(func,duration,na me,width,height,duration,false);

Цитата:

Сообщение от Skriptor
откуда javascript знает, что duration - это скорость изменения картинки в миллисекундах

duration передается в качестве второго аргумента в функцию setTimeout.
Этот аргумент как раз и задает таймаут, по прошествии которого запустится функция (переданная первым аргументом).

Например setTimeout(fn, 1000) - запустит функцию fn через 1000 милисекунд.

Остальные аргументы тупо прокидываются в функцию. Кстати это не кроссбраузерно!

Вобще код ужасный, писался школьником. Особо не вчитывался в него, так что может где ошибся в объяснении.

Skriptor 20.12.2014 13:25

Цитата:

Сообщение от danik.js (Сообщение 347085)
Скрипт анимирует размер картинки.
На каждой итерации проводится проверка достигла ли картинка конечных размеров. Результат этой проверки и отражается в widthOk и heightOk.
Далее, в зависимости от этих результатов продолжается анимация:


duration передается в качестве второго аргумента в функцию setTimeout.
Этот аргумент как раз и задает таймаут, по прошествии которого запустится функция (переданная первым аргументом).

Например setTimeout(fn, 1000) - запустит функцию fn через 1000 милисекунд.

Остальные аргументы тупо прокидываются в функцию. Кстати это не кроссбраузерно!

Вобще код ужасный, писался школьником. Особо не вчитывался в него, так что может где ошибся в объяснении.

Спасибо за разъяснения!
Почему widthOK и heightOK равняются нулю?
Насчет setTimeout - понял (то есть там автоматически второй параметр означает задержку независимо от названия)...
Пытаюсь попроще брать коды, чтобы вникнуть в логику алгоритма (кстати, почему код не кроссбраузерный - какие браузеры могут глючить с этим кодом?)

danik.js 21.12.2014 14:36

Цитата:

Сообщение от Skriptor
Почему widthOK и heightOK равняются нулю?

По логике не нулю, а false(ложь). И далее присваивать не 1, а true(истина). Просто писавший код не захотел использовать булевы значения true/false. Это не такая уж и редкость.

Почему 0, а не 1? Ну так очевидно же - изначально предполагается что width и heigth нифига не ОК. И только при выполнении условий становится OK. Код наверняка можно упростить. Такая портянка не может быть качественным кодом.

danik.js 21.12.2014 14:38

Передача параметров не работает в IE9 и ниже:
https://developer.mozilla.org/ru/doc...B0.D0.BC.D0.B8


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