Помогите разобраться с кодом JS в цикле PHP.
Код JS выполняется только для последнего элемента в DOM а нужно для каждого.
Вот сам код:
<?php $args=array(
'orderby' => 'ASK',
'post_type' => 'web_icon_portfolio',
'showposts' => 5
);
$i = 1;
$acsessuar = get_posts($args);
foreach ($acsessuar as $post) :
setup_postdata($post); ?>
<div id="kvad_<?php echo $i; ?>" class="<?php if($i > 2){ echo "normal_kvad col-md-4 col-sm-6 col-xs-12"; }else{ echo "big_kvad col-md-6 col-xs-12"; }; ?>">
</div>
<script>
/****Добавление классов при прокрутке****/
(function kvad_<?php echo $i; ?> () {
var testDiv_<?php echo $i; ?> = document.getElementById('kvad_<?php echo $i; ?>');
window.onscroll = function() {
if ( isVisible(testDiv_<?php echo $i; ?>) ) {
// выполнится если элемент хотя бы частично видно
$(testDiv_<?php echo $i; ?>).addClass("hover");
} else {
//выполнится если элемент за пределами видимости
$(testDiv_<?php echo $i; ?>).removeClass("hover");
}
}
function isVisible(elem) {
var elCoords = getCoords(elem);
var docCoords = getDocumentScroll();
if (elCoords.top < docCoords.bottom && elCoords.top > (docCoords.top - elem.offsetHeight) ) {
return true;
}
return false;
}
//коорднаты элемента относительно документа
function getCoords(elem) {
var box = elem.getBoundingClientRect();
var body = document.body;
var docEl = document.documentElement;
var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
var clientTop = docEl.clientTop || body.clientTop || 0;
var clientLeft = docEl.clientLeft || body.clientLeft || 0;
var top = box.top + scrollTop - clientTop;
var left = box.left + scrollLeft - clientLeft;
return { top: Math.round(top), left: Math.round(left) };
}
//координаты видимой части
function getDocumentScroll() {
return {
top: getDocumentScrollTop(),
bottom: getDocumentScrollBottom(),
height: getDocumentScrollHeight()
};
}
function getDocumentScrollTop() {
var html = document.documentElement;
var body = document.body;
var scrollTop = html.scrollTop || body && body.scrollTop || 0;
scrollTop -= html.clientTop; // IE<8
return scrollTop;
}
function getDocumentScrollBottom() {
return getDocumentScrollTop() + document.documentElement.clientHeight;
}
function getDocumentScrollHeight() {
var scrollHeight = document.documentElement.scrollHeight;
var clientHeight = document.documentElement.clientHeight;
scrollHeight = Math.max(scrollHeight, clientHeight);
return scrollHeight;
}
})();
/****END Добавление классов при прокрутке****/
</script>
<?php $i++ ?>
<?php wp_reset_postdata(); ?>
<?php endforeach; ?>
Код JS должен добавлять дивам с id "kvad_<?php echo $i; ?>" класс "hover" тогда когда они видимы на экране при скроле.