加价:
<div class="content" data-id="XX"></div>
<div class="media" data-id="XX"></div>
<div class="content" data-id="XY"></div>
<div class="media" data-id="XY"></div>
etc.
字符串
jquery:
$.fn.isInViewport = function() {
var elementTop = $(this).offset().top +600;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
$(window).on('resize scroll', function() {
dataid = $('.sticky-slider-content').data('id');
if ($(dataid).isInViewport()) {
$('.media').removeClass('active');
$('.media[data-id="'+dataid+'"]').addClass('active');
}
});
型
这媒体ist设置为粘.当内容进入viewport我想给给予媒体与相同的数据-id一个类'活动'.
最初我想到了这个,但我想避免重复:
$(window).on('resize scroll', function() {
if ($('.content[data-id="3a241cb2"]').isInViewport()) {
$('.media').removeClass('active');
$('.media[data-id="3a241cb2"]').addClass('active');
}
if ($('.content[data-id="6a91e7bb"]').isInViewport()) {
$('.media').removeClass('active');
$('.media[data-id="6a91e7bb"]').addClass('active');
}
});
型
1条答案
按热度按时间mzsu5hc01#
我会坚持确定 *active的 *
data-id
值并查询相关的.media
元素,然后使用JavaScript的IntersectionObserver API(如this related answer)来检测元素何时进入或退出视口字符串
使用jQuery
以及使用inViewport micro jQuery plugin,其提供对指定元素集合的回调,其中参数
px
是每个 * 相交 *(视口内)元素的可见高度的整数值:型