当DIV进入视图添加类时

时间:2013-02-20 17:59:11

标签: jquery css viewport addclass

当用户滚动时,我想在一个元素中添加一个类,比如DIV,还会在img,h1等上添加一个类。

如何计算我的元素是否在视口中?

In伪:如果#swing已进入视口添加类'animated bounceOutLeft'(使用CSS3播放动画)。动画完成后,删除类'动画bounceOutLeft'。

我只是不知道从哪里开始,除了我知道添加我想要的类的代码:

$('#star').addClass('animated bounceOutLeft');

进度编辑

感谢@Bibhas我正在尝试实现这个OnScreen plugin,我认为我已经完成了,因为Dev工具说类名是,但是这些类名是css3过渡,它们只是没有玩,可能是什么是问题??

$(function() {
  setInterval(function() {
    $("#star")                             // get all <h2>s
      .filter(":onScreen")              // get only <h2>s on screen
      .addClass('animated bounceOutLeft');
  }, 1000)                              // repeat every second
})

2 个答案:

答案 0 :(得分:7)

显然有人为此编写了一个小jQuery插件。从他的代码 -

function isOnScreena(elem) {
    var $window = $(window)
    var viewport_top = $window.scrollTop()
    var viewport_height = $window.height()
    var viewport_bottom = viewport_top + viewport_height
    var $elem = $(elem)
    var top = $elem.offset().top
    var height = $elem.height()
    var bottom = top + height

    return (top >= viewport_top && top < viewport_bottom) ||
           (bottom > viewport_top && bottom <= viewport_bottom) ||
           (height > viewport_height && top <= viewport_top && bottom >= viewport_bottom)
}

源代码几乎不是20行。你可以阅读和学习。 - https://github.com/benpickles/onScreen

答案 1 :(得分:0)

getBoundingClientRect()功能可能会有所帮助。 Here's a CodePen I did

$(window).on('load resize scroll',function(e){
    $('h2').each(function(index) {
        var h2Height = parseInt($(this)[0].getBoundingClientRect().height);
        var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
        // This will return true as soon as the heading crosses the bottom of the viewport
        if ($(this)[0].getBoundingClientRect().top < (viewHeight - h2Height)) {
            $('h2').eq(index).addClass('added-class');
        }
    });
});

编辑请注意,这假设浏览器在标准模式下运行。

Edit2:根据@brandnewjames的建议,我已将其他一些事件处理程序添加到on()中,这也将解释仅滚动之外的操作