首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态获取ID并添加类

动态获取ID并添加类
EN

Stack Overflow用户
提问于 2018-01-16 10:48:48
回答 1查看 361关注 0票数 0

下面是我试图在jQuery中实现的目标:我在HTML中一个接一个地显示了多个英雄部分。每次英雄部分到达窗口顶部时,我都想添加类“链接”,如果不是删除该类的话。

每个英雄部分都有类‘视差’和ID‘视差-1’,‘视差-2’,‘视差-3’等等。

代码语言:javascript
复制
<section class="parallax" id="parallax-1"></section>
<section class="parallax" id="parallax-2"></section>
<section class="parallax" id="parallax-3"></section>
...

JS代码:

代码语言:javascript
复制
var target = $('.parallax').attr('id'),
    $window = $(window);

$window.on('load resize scroll',function(){
  var $div = $('#parallax'+target);
  if ( $window.scrollTop() >= $div.offset().top ) {
    $div.addClass('link');
  } else {
    $div.removeClass('link');
  }
});

所以上面的代码不起作用,这是浏览器控制台中的错误:

未定义的对象不是对象(计算'$div.offset().top')

我不明白到底是什么错了,因为每个ID都存在。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-16 11:05:30

var target = $('.parallax').attr('id')将使用类parallax选择第一个元素,并将其id存储到目标(即:视差-1)中

当您创建div选择器时,您使用的是'#parallax'+target,这会导致#parallaxparallax-1,从而导致错误。只需将其更改为'#'+target,它就可以正常工作,但只适用于第一个section,因为您只在第一部分的代码中这样做。

如果要对所有部分执行此操作,可以按以下方式使用JQuery.each

代码语言:javascript
复制
$('.parallax').each(function(){
    var target = $(this).attr('id'),
    $window = $(window);

    $window.on('load resize scroll',function(){
      var $div = $('#'+target);
      if ( $window.scrollTop() >= $div.offset().top ) {
        $div.addClass('link');
      } else if($div.hasClass('link')) {
          $div.removeClass('link');
      }
  });

})
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section class="parallax" id="parallax-1">1</section><br>
<section class="parallax" id="parallax-2">2</section><br>
<section class="parallax" id="parallax-3">3</section><br>
<section class="parallax" id="parallax-4">4</section><br>
<section class="parallax" id="parallax-5">5</section><br>
<section class="parallax" id="parallax-6">6</section><br>
<section class="parallax" id="parallax-7">7</section><br>
<section class="parallax" id="parallax-8">8</section><br>
<section class="parallax" id="parallax-9">9</section><br>
<section class="parallax" id="parallax-10">10</section><br>
<section class="parallax" id="parallax-11">11</section><br>
<section class="parallax" id="parallax-12">12</section><br>
<section class="parallax" id="parallax-13">13</section><br>
<section class="parallax" id="parallax-14">14</section><br>
<section class="parallax" id="parallax-15">15</section><br>
<section class="parallax" id="parallax-16">16</section><br>
<section class="parallax" id="parallax-17">17</section><br>
<section class="parallax" id="parallax-18">18</section><br>

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48279458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档