|
|
|
|
|
для: CNT
(07.08.2007 в 14:05)
| | Спасибо за ответ. Не спорю, довольно толково все написали.
Я не понял другого: на обработчик навешиваем текст функции document_onmousemove(e).
При этом параметр 'e' в самом тексте (коде) используется. Получается что при обработке события тупо в идет обращение к тексту-коду, где содержится параметр 'e' , который нигде не указан | |
|
|
|
|
|
|
|
для: AlexanderG
(07.08.2007 в 10:57)
| | По фрагменту 1. Всё правильно - синтаксис яваскрипта так и предписывает: Calling a function without parentheses causes the text of the function to be returned instead of the results of the function., т.е. вызывая функцию без скобок и параметров, вы как бы вызываете только текст функции в виде строки.
Если стоит оператор присваивания к какому-то событию, то, значит, эту строку (текст функции) вы назначаете для события как функцию.
Пример (смотреть в MSIE, ибо использован, для примера, его синтаксис - но смсл аналогичен для всех браузеров):
<html>
<head>
<script>
function abc (х) {alert (х); event.returnValue = false }
onload = function () {document.getElementById ('mL').onclick = abc}
</script>
<head>
<body>
<a href="#" onclick="abc (this.innerHTML)">этот текст увидишь в алерте</a>
<hr>
<a href="#" onclick="alert (abc)">увидишь код функции</a>
<hr>
<a id="mL" href="#">увидишь undefined (функция назначена, но не передан параметр)</a>
</body>
</html>
|
PS. Эту фичу ("код функции как строка при вызове без скобок") я давно использовал в качестве немудрённого способа защиты своих кодов. Код функции писал, используя много-много бессистемных пробелов (см. около слова false в примере) и переводов строк. Получалось определенноё число символов в этой самой строке (коде функции), ну а потом где-либо вызывал текст кода функции и проверял - в том ли конкретном месте в коде функции (по индексу) находится та или иная подстрока. Если - "в том", то шло выполнение, если "не в том", то ничего не работало.
"Передиральщики кодов" обычно "улучшают" его структуру и внешний вид кода: убирают пробелы, строки, переименовывают переменные... В итоге получают неработающий скрипт :-)))
По фрагменту 2. Отрыжка древней версии яваскрипта - при использовании объекта event (и только в этом случае) его требовалось передавать в качестве параметра и в описание функции вводить для него переменную в качестве аргумента. В MSIE от этой глупости ушли - объект event сделали глобальным и доступ к нему возможен из любой функции. Mozilla же до сих пор придерживается старого формата - event в Mozilla является полуглобальным объектом - напрямую его использовать можно, а в функции - только через передачу параметр-аргумент.
По фрагменту 3. Написан явный бред, ни на что не влияющий. Можете спокойно убрать без ущерба для функциональности. | |
|
|
|
|
|
|
|
для: AlexanderG
(07.08.2007 в 10:57)
| | что за фрагменты? никакого отношения к тому скрипту...
берем имя картинки, смотрим код страницы, находим по имени картинки функции,
onMouseOver=show_200("/zakroma/pre2/200708/122642.jpg","122642",200,160) onMouseOut=hide_div()
onerror=gag(this,100)
|
грузим
себе скрипт http://www.wallpapers.ru/main/com/wallpapers.js (см.аттач)
находим в нем эти функции.
function show_200(img_src,wp_id,img_w,img_h) {
if (show_delay) {
clearTimeout(show_delay); show_delay = null;
} else {
obj_float_div = get_obj('div_200');
show_delay = setTimeout('show_200("' + img_src + '","' + wp_id + '",' + img_w + ',' + img_h+ ');', 400);
return;
}
var img_mark = 'img_wp_id_' + wp_id;
active_img_mark = img_mark;
if (preloads[img_mark] && preloads[img_mark].complete) {
swap_img(img_mark);
} else {
var rnd_200 = Math.round(Math.random()*4) + 7;
swap_img('loader_' + rnd_200);
}
if ( ! preloads[img_mark] ) {
preloads[img_mark] = new Image;
preloads[img_mark].src = zakroma + img_src;
preloads[img_mark].width = img_w;
preloads[img_mark].height = img_h;
preloads[img_mark].onerror = function() { gag(preloads[img_mark],200); }
}
show_div('div_200');
}
function hide_div() {
//var rnd_200 = Math.round(Math.random()*4) + 7; swap_img('loader_' + rnd_200);
clearTimeout(show_delay); show_delay = null;
if ( ! obj_float_div ) return;
obj_float_div.style.visibility = 'hidden';
obj_float_div.style.left = "-3000px";
obj_float_div = false;
}
function gag(object,type) {
if (gags[object.src]) return;
if (type == 100) {
object.src = zakroma + "/main/200x150/gag_100.gif";
object.height = 75; // äëÿ Opera
object.style.height = "75px"; // äëÿ Gecko, IE
} else {
object.src = zakroma + "/main/200x150/gag_200.gif";
object.height = 150;
object.style.height = "150px";
}
object.style.display = "block"; // äëÿ Gecko
gags[object.src] = true;
}
|
| |
|
|
|
|
|
|
| Не могу разобрать код, не могу найти в мануалах объяснение. далее фрагментами как оно идет по порядку в js файле
// фрагмент 1, так для справки
function run_after_body() {
document.onmousemove = document_onmousemove; // тут ясно, что навешивается обработчик события, но почему-то без параметра
}
// ..
// Функция определяется с параметром 'e' , по ходу используется в теле функции
function document_onmousemove(e) {
// .. код с использованием параметра e, как я понял, это объект типа событие
}
// ..
function func_my() {
// ..
document_onmousemove; // вызывается без параметра, что собственно непонятно
// ..
}
|
Собственно пытаюсь разобраться в коде wallpapers.ru . Там при наведении на картинку всплывает окошко с картинкой побольше.
Вопрос: пытаюсь переписать код под себя кусками, функция требует параметр, в общем ошибки лезут.. | |
|
|
|
|