Javascript 当类位于视口中时显示元素

Javascript 当类位于视口中时显示元素,javascript,jquery,html,css,viewport,Javascript,Jquery,Html,Css,Viewport,我试图使div仅在某个类的元素在视口中可见时才显示 我通过这个几乎到了那里 但正如您通过该编辑所看到的,每当具有该类的任何元素进入或退出视口时,都会触发该事件,因此,即使具有相关类的另一个元素可见,退出的元素也会关闭所需的效果 我也一直在搞乱这个插件,但不知道如何让它应用到我想做的事情 因为我没有足够的声誉来评论,所以我将尝试一个答案。如果您添加了一个计数器,跟踪myclass类中有多少元素“在视图中”,那么每次“inview”事件触发时,您都可以更新计数器,如果计数器为1,则打开计数器;如果计

我试图使div仅在某个类的元素在视口中可见时才显示

我通过这个几乎到了那里

但正如您通过该编辑所看到的,每当具有该类的任何元素进入或退出视口时,都会触发该事件,因此,即使具有相关类的另一个元素可见,退出的元素也会关闭所需的效果


我也一直在搞乱这个插件,但不知道如何让它应用到我想做的事情

因为我没有足够的声誉来评论,所以我将尝试一个答案。如果您添加了一个计数器,跟踪myclass类中有多少元素“在视图中”,那么每次“inview”事件触发时,您都可以更新计数器,如果计数器为1,则打开计数器;如果计数器为0,则关闭计数器;如果计数器为其他,则什么也不做。这是我的

专业提示:当测试一个条件时,你不需要将它与true进行比较,除非你试图对“truthy”值(如数字1)进行折扣,但不是true。如果您正在测试的东西是真的,那么条件无论如何都会通过,而不会将其与真值进行比较。这就是保存您自己的一些代码:

if (visible == true) {
    bar();
} else {
    bazz();
}

if (visible) {
    bar();
} else {
    bazz()
}

在这个场景中。

因为我没有足够的声誉来评论,所以我将尝试一个答案。如果您添加了一个计数器,跟踪myclass类中有多少元素“在视图中”,那么每次“inview”事件触发时,您都可以更新计数器,如果计数器为1,则打开计数器;如果计数器为0,则关闭计数器;如果计数器为其他,则什么也不做。这是我的

专业提示:当测试一个条件时,你不需要将它与true进行比较,除非你试图对“truthy”值(如数字1)进行折扣,但不是true。如果您正在测试的东西是真的,那么条件无论如何都会通过,而不会将其与真值进行比较。这就是保存您自己的一些代码:

if (visible == true) {
    bar();
} else {
    bazz();
}

if (visible) {
    bar();
} else {
    bazz()
}

在这个场景中。

因为我没有足够的声誉来评论,所以我将尝试一个答案。如果您添加了一个计数器,跟踪myclass类中有多少元素“在视图中”,那么每次“inview”事件触发时,您都可以更新计数器,如果计数器为1,则打开计数器;如果计数器为0,则关闭计数器;如果计数器为其他,则什么也不做。这是我的

专业提示:当测试一个条件时,你不需要将它与true进行比较,除非你试图对“truthy”值(如数字1)进行折扣,但不是true。如果您正在测试的东西是真的,那么条件无论如何都会通过,而不会将其与真值进行比较。这就是保存您自己的一些代码:

if (visible == true) {
    bar();
} else {
    bazz();
}

if (visible) {
    bar();
} else {
    bazz()
}

在这个场景中。

因为我没有足够的声誉来评论,所以我将尝试一个答案。如果您添加了一个计数器,跟踪myclass类中有多少元素“在视图中”,那么每次“inview”事件触发时,您都可以更新计数器,如果计数器为1,则打开计数器;如果计数器为0,则关闭计数器;如果计数器为其他,则什么也不做。这是我的

专业提示:当测试一个条件时,你不需要将它与true进行比较,除非你试图对“truthy”值(如数字1)进行折扣,但不是true。如果您正在测试的东西是真的,那么条件无论如何都会通过,而不会将其与真值进行比较。这就是保存您自己的一些代码:

if (visible == true) {
    bar();
} else {
    bazz();
}

if (visible) {
    bar();
} else {
    bazz()
}

在这种情况下。

只需跟踪数组中的可见元素:

var visibleEls = [];
$('.myclass').bind('inview', function (event, visible) {
    if (visible == true) {
        // element is now visible in the viewport
        if(!~visibleEls.indexOf(this)) visibleEls.push(this);
    } else {
        // element has gone out of viewport
        var i=visibleEls.indexOf(this);
        if(~i) visibleEls.splice(i, 1);
    }
    $('body').toggleClass('red', !!visibleEls.length);
});


注意,您可以将其简化为

var counter = 0;
$('.myclass').bind('inview', function (event, visible) {
    counter += visible*2-1;
    $('body').toggleClass('red', !!counter);
});
但这可能更容易出错


只需跟踪阵列中的可见元素即可:

var visibleEls = [];
$('.myclass').bind('inview', function (event, visible) {
    if (visible == true) {
        // element is now visible in the viewport
        if(!~visibleEls.indexOf(this)) visibleEls.push(this);
    } else {
        // element has gone out of viewport
        var i=visibleEls.indexOf(this);
        if(~i) visibleEls.splice(i, 1);
    }
    $('body').toggleClass('red', !!visibleEls.length);
});


注意,您可以将其简化为

var counter = 0;
$('.myclass').bind('inview', function (event, visible) {
    counter += visible*2-1;
    $('body').toggleClass('red', !!counter);
});
但这可能更容易出错


只需跟踪阵列中的可见元素即可:

var visibleEls = [];
$('.myclass').bind('inview', function (event, visible) {
    if (visible == true) {
        // element is now visible in the viewport
        if(!~visibleEls.indexOf(this)) visibleEls.push(this);
    } else {
        // element has gone out of viewport
        var i=visibleEls.indexOf(this);
        if(~i) visibleEls.splice(i, 1);
    }
    $('body').toggleClass('red', !!visibleEls.length);
});


注意,您可以将其简化为

var counter = 0;
$('.myclass').bind('inview', function (event, visible) {
    counter += visible*2-1;
    $('body').toggleClass('red', !!counter);
});
但这可能更容易出错


只需跟踪阵列中的可见元素即可:

var visibleEls = [];
$('.myclass').bind('inview', function (event, visible) {
    if (visible == true) {
        // element is now visible in the viewport
        if(!~visibleEls.indexOf(this)) visibleEls.push(this);
    } else {
        // element has gone out of viewport
        var i=visibleEls.indexOf(this);
        if(~i) visibleEls.splice(i, 1);
    }
    $('body').toggleClass('red', !!visibleEls.length);
});


注意,您可以将其简化为

var counter = 0;
$('.myclass').bind('inview', function (event, visible) {
    counter += visible*2-1;
    $('body').toggleClass('red', !!counter);
});
但这可能更容易出错



认为这是可行的,但在滚动之前不适用于视口中的元素@milpool我从未使用过
inview
事件,因此可能有更好的解决方案,但您可以尝试在onload上运行
document.documentElement.scrollTop+=1
,我认为这很有效,但在滚动之前不会应用于视口中的元素@milpool我从未使用过
inview
事件,因此可能有更好的解决方案,但您可以尝试在onload上运行
document.documentElement.scrollTop+=1
,我认为这很有效,但在滚动之前不会应用于视口中的元素@milpool我从未使用过
inview
事件,因此可能有更好的解决方案,但您可以尝试在onload上运行
document.documentElement.scrollTop+=1
,我认为这很有效,但在滚动之前不会应用于视口中的元素@milpool我从未在查看事件时使用过
inview
,因此可能有更好的解决方案,但您可以尝试在onload时运行
document.documentElement.scrollTop+=1
。您希望元素保持可见还是不可见?是否尝试更改主体颜色?你想要的最终结果是什么?每当元素离开时,它就会被覆盖,所以您需要检查滚动条上是否有可见的元素。或者您可以使用.each(),如下所示:我正在尝试制作一个按钮,该按钮将显示在我的tumblr上,一次播放所有可见的视频帖子,但仅在视频可见时显示。因此,您希望该元素保持可见还是使其消失?您是否尝试更改主体颜色?你想要的最终结果是什么?每当元素离开时,它就会被覆盖,所以您需要检查滚动条上是否有可见的元素。或者你可以像这里一样使用.each():我正在尝试制作一个按钮,它将出现在我的tumblr上,一次播放所有可见的视频帖子,但只显示w