如何向当前在视口中/当前在窗口中可见的 .column 类的所有元素添加一个类?
例如,在这样的伪代码中:
If(in window){
If has class .column{
add class .swoosh;
}
}
我将非常感谢在 javascript 或 jQuery 中完成此任务的任何帮助。
如何向当前在视口中/当前在窗口中可见的 .column 类的所有元素添加一个类?
例如,在这样的伪代码中:
If(in window){
If has class .column{
add class .swoosh;
}
}
我将非常感谢在 javascript 或 jQuery 中完成此任务的任何帮助。
看看这个 jQuery 插件;http://www.appelsiini.net/projects/viewport
它允许您使用:in-viewport
选择器来检查元素是否在当前视口中。
$('.column:in-viewport').addClass ('swoosh');
或者,如果您决定采用无插件方式 - 此代码检查元素是否高于或低于滚动窗口的顶部或底部边缘。
使用 CodePen 因为 jsFiddle 现在对我来说已经死了。
$(window).scroll(function () {
var windowSize = $(window).height();
var windowPosition = $(window).scrollTop();
var control = $(".element");
control.each(function () {
var elementPosition = $(this).position().top;
var elementHeight = $(this).height();
var elementInWindow = (windowSize + windowPosition > elementPosition) - (windowPosition - elementHeight < elementPosition);
if (elementInWindow == 0) {
$(this).addClass("blue");
} else {
$(this).removeClass("blue");
}
});
});
function isElementInViewport(el) {
// from http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document. documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document. documentElement.clientWidth) /*or $(window).width() */
);
}
$.fn.checkViewportAndSetClass = function() {
$(this).each(function(){
if (isElementInViewport(this)) {
$(this).addClass("swoosh");
}
});
};
var do_it;
$('.column').checkViewportAndSetClass();
$(window).on("scroll", function() {
clearTimeout(do_it);
do_it = setTimeout(function() {
$('.column').checkViewportAndSetClass();
}, 1000);
});
这尚未经过测试,但应该可以工作。checkViewportAndSetClass
将在用户在 1 秒延迟后滚动时调用(这样它就不会一直运行)。
您需要一种方法来选择带有视口的元素。
以下库看起来不错。
http://www.appelsiini.net/projects/viewport
在 jquery 之上添加该库之后。你可以做
$(".column:in-viewport").addClass("swoosh");
我还没有尝试过...但是您可以在这里查看 并执行以下操作:
$(":onScreen").find(".column").addClass("swoosh")