Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Несколько вопросов (https://javascript.ru/forum/misc/18313-neskolko-voprosov.html)

(Sandr) 25.06.2011 22:59

Несколько вопросов
 
Всем привет. Помогите с решением нескольких проблем.
1) Дайте пожалуйста полный код примера, описаного сдесь: http://javascript.ru/blog/Andrej-Par...eout-easeinout


2) Подскажите, как сделать галерею с плавной прокруткой. Не сам код, а именно как её сделать. Обязательно ли для этого использовать какие-то фрэймворки, или можно без этого обойтись? Опишите пожалуйста пошагово, этапы создания галереи. Если можно, то дайте пример кода самой наипростейшей галереи с прокруткой

3)

Есть код:
var xpos;
var ypos;
function imouse(){
ypos=event.y+document.body.scrollTop;
xpos=event.x+document.body.scrollLeft;
document.getElementById('x').innerHTML = xpos;
document.getElementById('y').innerHTML = ypos;
}
document.onmousemove=imouse;

В нём в роде всё понятно, кроме последней строки. Почёму нельзя написать ...=imouse(); Ведь imouse это же функция.

4) В одной из тем, мне подсказали решение моей проблемы дав код. Вот его часть:
$('res_cat').innerHTML="ваш текст";

Подскажите, что означает конструкция вида $('ид') ?

TicTac 25.06.2011 23:17

document.onmousemove=imouse;

3. Тут же важно не просто выполнить функцию imouse(). А выполнить ее при document.onmousemove. Для этого нужно указать обработчик события document.onmousemove, используется функция imouse(). Соответственно при этом событии будет выполнятся ф-ция imouse().

4. выборка DOM элементов с таким $(id/class/tag)... (jQuery)

monolithed 25.06.2011 23:21

Цитата:

Сообщение от (Sandr)
Почёму нельзя написать ...=imouse()

потому, что тем самым вы ее сразу вызовете, да еще и в другом контексте:
<script>
document.onmousemove = function() {
    alert(this);
};
</script>

<script>document.onmousemove = function() {
    alert(this);
}();
</script>


Цитата:

Сообщение от (Sandr)
$('res_cat').innerHTML="ваш текст";

если имелось ввиду jQuery, то дайте по голове, тому кто этот код дал, потому что нужно так:
$('res_cat')[0].innerHTML="ваш текст";
$('res_cat').get(0).innerHTML="ваш текст";
$('res_cat').html("ваш текст");
$('res_cat').text("ваш текст");


Цитата:

Сообщение от (Sandr)
Подскажите, что означает конструкция вида $('ид') ?

Обращение к элементу в библиотеках jQuery, MooTools, Prototype, Right ...

(Sandr) 25.06.2011 23:22

Цитата:

Сообщение от TicTac
3. вешается обработчик события на document.onmousemove, ф-ция imouse. То есть при document.onmousemove будет выполнятся ф-ция imouse.

Это я понимаю, но обычно пишут имя_функции() В данном случае, такое не работает.

(Sandr) 25.06.2011 23:23

Цитата:

Сообщение от TicTac
4. выборка DOM элементов с таким $(id/class/tag)...

Где можно про это прочитать?

monolithed 25.06.2011 23:26

Цитата:

Сообщение от (Sandr)
Где можно про это прочитать?

если хотите разобраться в JS, то не забивайте этим голову, начните с азов

(Sandr) 25.06.2011 23:27

Цитата:

Сообщение от monolithed
$('res_cat').innerHTML="ваш текст";





если имелось ввиду jQuery, то дайте по голове, тому кто этот код дал, потому что нужно так:
$('res_cat')[0].innerHTML="ваш текст";$('res_cat').get(0).innerHTML="ваш текст";$('res_cat').html("ваш текст");$('res_cat').text("ваш текст");

А, теперь понятно) Я то думал, что это без jQuery))

(Sandr) 25.06.2011 23:30

Цитата:

Сообщение от monolithed
Где можно про это прочитать?





если хотите разобраться в JS, то не забивайте этим голову, начните с азов

Я как раз начал) Просто я думал, что этот код из "чистого" js, а не jQuery. По этому и удивился, что в учебнике по js про это не говорится.

TicTac 25.06.2011 23:38

Цитата:

Сообщение от (Sandr) (Сообщение 110500)
Это я понимаю, но обычно пишут имя_функции() В данном случае, такое не работает.

просто imouse содержит определение функции, и в данном случае просто присваиваем обработчику,
а imouse() возвращает результат работы этой функции

может так будет понятней

document.onmousemove = function(){
ypos=event.y+document.body.scrollTop;
xpos=event.x+document.body.scrollLeft;
document.getElementById('x').innerHTML = xpos;
document.getElementById('y').innerHTML = ypos;
}

(Sandr) 26.06.2011 20:03

Цитата:

Сообщение от TicTac
просто imouse содержит определение функции

Извиняюсь за тупость, что значит опредиление? Что происходить при опредилении?

monolithed 26.06.2011 20:33

Цитата:

Сообщение от (Sandr)
Извиняюсь за тупость, что значит опредиление?

var foo = function() {}();

var - объявление (declaration)
foo - переменная (variable)
function() {} - определение (definition)
() вызов (calling)

TicTac 26.06.2011 21:27

(Sandr), Вас наверно не оставляет в покое вопрос как это переменой присвоить функцию, а не ее результат. Так как в других языках программирования это просто невозможно. Можно ее только описать потом вызвать..

Тут все просто переменной можно присвоить функцию так же как и переменой присвоить число например или строку.

Только чтобы потом выполнить эту функцию нужно еще использовать оператор вызова переменная(функция)().

Просто обычной переменной присвойте определение функции и потом выведете значение переменной. Результат - никак не результат работы функции, а именно ее определение.

(Sandr) 26.06.2011 22:40

Если взять 2 выше приведённых примера:

<script>
document.onmousemove = function() {
alert(this);
};
</script>


<script>document.onmousemove = function() {
alert(this);
}();
</script>

По моей логике, они должны выдавать одинаковый результат. В первом случае выводится из-за того, что мышь двигается, во 2м из-за того, что функция сначало вызвала сама себя, а потом из-за того, что мышь двигается.

Чёт я запутался в этих функциях :blink:

(Sandr) 26.06.2011 22:42

Ааа.. до меня дошло))

(Sandr) 26.06.2011 22:43

Спасибо за ваши объяснения) И за то, что не послали... читать книжку)

lovial 05.07.2011 15:25

Дабы не плодить отдельный топик, решил спросить тут (тема, ИМХО, соответствует).
Есть таблица, в ячейках которой есть селекты, инпуты, выводятся данные при помощи innerHTML. К селектам и инпутам через онченч привязана функция, которая считывает значения ячеек в строке по ид (например, а11, д11 и т.д.), обрабатывает их и выводит в ячейки результаты.
Каким способом можно модифицировать функцию, чтобы она обрабатывала данные по всем строкам таблицы (в данный момент она работает только с одной строкой таблицы). Понимаю, что есть несколько путей решения, хотелось бы о них узнать и их плюсы-минусы.

ksa 05.07.2011 16:54

Цитата:

Сообщение от lovial
К селектам и инпутам через онченч привязана функция, которая считывает значения ячеек в строке по ид (например, а11, д11 и т.д.), обрабатывает их и выводит в ячейки результаты.
Каким способом можно модифицировать функцию, чтобы она обрабатывала данные по всем строкам таблицы (в данный момент она работает только с одной строкой таблицы).

Переписать функцию так, чтобы исключить использование ИД элементов...

lovial 05.07.2011 18:56

А если передать в функцию цифры при ИД? Буквы у ИД одинаковые... Т.е. функция обращается к ИД вида ХХ11 при обработке первой строки, ХХ22 - второй и т.д.

ksa 06.07.2011 09:35

Цитата:

Сообщение от lovial
А если передать в функцию цифры при ИД? Буквы у ИД одинаковые...

Это не особо изменит твой вариант...

Нужно использовать чёткую структуру таблицы и этими сведениями оперировать.

Если будет тестовый пример - на нём можно будет показать уже конкретно...

lovial 06.07.2011 13:41

Попробовал. Вызов функции <select size="1" id="plot11" value="Плотность" style="width: 50px" onchange="rz1(11)">
функция
function rz1(ind)
{tol = document.getElementById("plot" + ind).value}
работает нормально...

ksa 06.07.2011 13:56

lovial, то, что ты написал даже примером не назовёшь... :)

lovial 07.07.2011 14:50

Зато работает... :)
Правда, столкнулся с другой проблемой.
Индекс при ИД у меня двузначный, а в функции (в коде выше этого нет) мне надо использовать индексы и по отдельности тоже. Так вот, единственный способ, которым мне удалось из передаваемого параметра (например, 12) выделить отдельно переменными значения 1 и 2, оказалась математика: делил параметр на 10, забирал целую часть и т.д. "Разобрать" передаваемый параметр через substring не получилось, пробовал даже переводить из числа в текст и наоборот. Пытался поделить на 10, затем загнать в массив по разделителю "."...
В принципе, проблема решается (думаю) передачей двух параметров (например, 1 и 2), но интересно, почему не получилось распарсить...

trikadin 07.07.2011 14:57

arr= "plot11".match(/\d{2}/);
alert(arr);


Если же таких двузначных чисел несколько будет, то с флагом g. Только тогда match вернёт массив:

arr= "33plot11".match(/\d{2}/g);
alert(arr);

Sweet 07.07.2011 15:07

Цитата:

Сообщение от trikadin
Только учитывайте, что arr - это массив всех совпадений

А зачем там флаг g?

trikadin 07.07.2011 15:13

Ну да, в первом примере не нужен (убрал). А во втором - чтобы найти все совпадения...

ksa 08.07.2011 09:31

Цитата:

Сообщение от lovial
В принципе, проблема решается (думаю) передачей двух параметров (например, 1 и 2), но интересно, почему не получилось распарсить...

Еще раз напишу, что в твоей задаче достаточно передать ссылку на текущий объект... Далее все вычисляется по структуре строки.


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