2016-08-24 3 views
2

Я создаю веб-сайт с помощью WordPress, поэтому контент создается динамически. Элементы идентификатор также динамически генерируемыеИзменение стиля нескольких объектов с помощью javascript

Каждый контейнер может иметь эти элементы (контейнер может иметь несколько - но не то же самое):
t_1
f_1
f_2
F_3

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

Предположим, PHP создаст такой HTML-код:

<div id="container_1"> 
    <div id=f_1_1> 
    //content 
    </div> 
    <div id=f_2_1> 
    //content 
    </div> 
</div> 
<div id="container_2"> 
    <div id=t_1_2> 
    //content 
    </div> 
</div> 
<div id="container_3"> 
    <div id=f_1_3> 
    //content 
    </div> 
</div> 

Я хотел бы, чтобы оживить положение этих элементов как прокрутке, я добавил Javascript, чтобы сделать это:

var scroll = window.pageYOffset; 
window.addEventListener('scroll', function() { 
    scroll = window.pageYOffset; 
    requestAnimationFrame(scroll) 
}, false) 

function scroll() { 
    document.getElementById("f_1_1").style.top = scroll * 10 + 'px'; 
} 

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

Другое решение, которое я пробовал, заключается в том, чтобы динамически добавлять javascript в каждый контейнер, чтобы я точно знал, какие элементы мне нужны для анимации. Он работал только для первого контейнера, как, когда я добавил следующий контейнер были множественные функции с тем же именем, и только последняя функция была выполнена

<div id="container_1"> 
    <div id=f_1_1> 
    //content 
    </div> 
    <script type="text/javascript"> 
    function scroll() { 
     document.getElementById("f_1_"+<?php echo $pagecounter?>).style.top = scroll * 10 + 'px'; 
    } 
    </script> 
</div> 
+0

Какую анимацию вы хотите сделать? Мне кажется, вы просто хотите, чтобы контент всегда был на экране, что совпадает с использованием позиции: исправлено с помощью css – juvian

+0

. Вы можете просто добавить класс (https://codex.wordpress.org/Function_Reference/post_class) в каждый контейнер и нацелиться только на класс css. Никаких возиться с идами не требуется. – Shilly

+0

Извините, я не могу отформатировать его. Я хотел бы, чтобы все t_1 имели это: 'document.getElementById (" t_1 "). Style.top = scroll * -0.2 + 'px'; ' все f_1: '' document.getElementById ("t_1"). Style.top = scroll * -0.4 + 'px'; ' Второй контейнер будет на следующей странице: 'document.getElementById (" t_1 "). Style.top = windowheight * 1 + прокрутка * -0.2 + 'px'; ' все f_1: 'document.getElementById (" t_1 "). Style.top = windowheight * 1 + прокрутка * -0.4 + 'px'; ' – iwan

ответ

0

Вы можете использовать - WOW.js для анимации, когда элемент приходит в окне просмотра ,

<div id="container_1"> 
    <div id=f_1_1 class="wow myCustomAnimation"> 
    //content 
    </div> 
    <div id=f_2_1 class="wow myCustomAnimation"> 
    //content 
    </div> 
</div> 
<div id="container_2"> 
    <div id=t_1_2 class="wow myCustomAnimation"> 
    //content 
    </div> 
</div> 
<div id="container_3"> 
    <div id=f_1_3 class="wow myCustomAnimation"> 
    //content 
    </div> 
</div> 

Где вы должны написать myCustomAnimation как на ваше требование.

+0

Спасибо, но я не хочу использовать внешнюю библиотеку, также я хотел бы, чтобы элементы изменить положение для каждого движения прокрутки – iwan

Смежные вопросы