0

我对以下代码的预期结果是.csr区域-3.csr视频添加了类csr动画csr放大,为什么$(本)在这种情况下不工作?

if($(“.csr-area-3.csr-video”).is(“:in-viewport”)){$(this).addClass('csr-animate csr-zoom-in');}
1
  • 4
    为什么要这样做?您希望上下文是如果条件?
    – 泰穆
    评论 2016年11月3日11:49

3个答案

重置为默认值
7

因为上下文是调用方函数/事件,或者可能是全局窗口上下文,所以再次使用相同的选择器来添加类:

if($(“.csr-area-3.csr-video”).is(“:在视口中”){$(“.csr-area-3.csr-video”).addClass('csr-animate csr-zoom-in');}

根据评论编辑

使用变量存储jquery查找的结果:

var csrvideo=$(“.csr-area-3.csr-video”);if(csrvideo.is(“:in-viewport”)){csrvideo.addClass('csr-animate csr-zoom-in');}

注:使用filter作为@saptal的答案可以确保在存在多个元素的情况下将类添加到viewport中的元素中。

8
  • 这就是我一直在做的,但我理想中不想重复代码并更改每个代码的编号。 评论 2016年11月3日11:51
  • 在循环中执行,然后:) 评论 2016年11月3日11:51
  • 创建一个包含所有所需元素的数组,循环遍历这些元素并在每个元素上添加类 评论 2016年11月3日11:52
  • 1
    您可以将jquery对象保存在一个变量中并使用它,这样选择器就不会被执行两次,或者您可以使用@satpal在他的回答中所述的过滤器,其中指的是csr区域/csr视频要素
    – 卡德
    评论 2016年11月3日11:56
  • 不正确,如果有多个元素具有匹配的选择器,则即使只有一个元素csr视频在视图端口中,上述代码将向所有元素添加类。不仅仅是视图端口中的元素。
    – 萨特帕
    评论 2016年11月3日11:57

你需要.filter(函数),以获取视图端口中匹配的元素,然后将类添加到

$(“.csr-area-3.csr-video”).filter(函数(){return$(this).is(“:in-viewport”);}).addClass('csr-animate csr-zoom-in');

你也可以使用

$(“.csr-area-3.csr-video:in-viewport”).addClass('csr-animate csr-zoom-in');
0
1

如果你只使用

$(this).someFunction();

指的是窗口对象。

你需要这样做

$(“.csr-area-3:in-viewport”).addClass('csr-animate csr-zoom-in');$(“.csr-video:in-viewport”).addClass('csr-animate csr-zoom-in');

(取决于您实际想要什么)

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.