Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получение DOM к соседнему тегу (https://javascript.ru/forum/misc/39505-poluchenie-dom-k-sosednemu-tegu.html)

max0n 02.07.2013 15:32

Получение DOM к соседнему тегу
 
всем привет... есть код:
....
<div>
	<canvas></canvas>
	<script>
		window.onscroll = function() {getCanvas();}
	</script>
	<p>....</p>
</div>
....
много кода....
....
<div>
	<canvas></canvas>
	<script>
		window.onscroll = function() {getCanvas();}
	</script>
	<p>....</p>
</div>
....


собственно мне нужно функцией «getCanvas();», через DOM получить соседний canvas. для каждой вызванной функции канвас должен быть соседним.
как это реализовать? есть идеи?

P.S. id для канваса не предлагать... хочу автоматизировать определение соседнего канваса

devote 02.07.2013 15:36

function getNextCanvas(currentCanvas) {
    var elements = document.getElementsByTagName('canvas');
    for(var i = 0; i < elements.length; i++) {
        if (currentCanvas === elements[i]) {
            return elements[i + 1] || null;
        }
    }
    return null;
}

max0n 02.07.2013 15:44

чтото не могу понять.... "getNextCanvas();" я должен использовать вместо "getCanvas();"?
что за параметр я должен передовать в "currentCanvas"?

devote 02.07.2013 15:45

Цитата:

Сообщение от max0n
я должен использовать вместо "getCanvas();"?

а что у вас делает метод getCanvas?

Цитата:

Сообщение от max0n
что за параметр я должен передовать в "currentCanvas"?

ссылку на предыдущий канвас

max0n 02.07.2013 15:55

Цитата:

Сообщение от devote (Сообщение 259685)
а что у вас делает метод getCanvas?

эта функция, которая должна получить canvas, который был объявлен перед скриптом. Только я незнаю как это реализовать.

Может ли функция получить DOM объект, где находится вызов самой функции?

danik.js 02.07.2013 18:13

Цитата:

Сообщение от max0n
        window.onscroll = function() {getCanvas();}

Цитата:

Сообщение от max0n
        window.onscroll = function() {getCanvas();}

А зачем два раза писать один и тот же код? Это типа "для надежности" ))) ?

max0n 02.07.2013 18:55

нет... смотри...
в каждой части кода, эта функция должна выполниться 1 раз каждая.
крометого... каждой функции, я буду передавать параметры для дополнительной обработки (для каждой свои).
и несмотря на то что я передаю этой функции... она должна выполниться в нужное для меня время, с введёнными мной параметрами и только 1 раз каждая.

встретиться она может и одна на странице.

danik.js 02.07.2013 19:10

так ведь функция не будет выполнена сразу. Ты же навешиваешь событие, используя старушку-модель DOM левел 1. Вот только через мгновение твое только что определенное тобой свойство window.onscroll затрется другой функцией, следующей. А старая будет уничтожена сборщиком мусора как ненужный хлам. Модель обработчиков событий DOM Level 1 не предусматривает возможности добавить несколько обработчиков.

danik.js 02.07.2013 19:14

Вобще тебе стоит задуматься над архитектурой.
Зачем плодить теги скриптов? Зачем плодить обработчики (тем более на такое чувствительное к производительности событие как scroll )?
Создай один скрипт, обойди все канвасы, навесь обработчик скролла (один!), который и будет всем рулить.

max0n 03.07.2013 12:57

просто я хотел сделать фишку... аналогичной этой.
там в некоторых местах, появляется анимация у картинок. пока не доматаешь... она срабатывать не будет точно.

пуши аналогичную фишку на свой сайт.... но у меня она может встретиться 1 раз... а может несколько на странице.

как сделать такое? может поможешь?


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