Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测div滚动到的时间不起作用_Javascript_Jquery - Fatal编程技术网

Javascript 检测div滚动到的时间不起作用

Javascript 检测div滚动到的时间不起作用,javascript,jquery,Javascript,Jquery,我无法检测页面的某个部分何时向下滚动到。一旦我开始使用某个ID或类,我想运行几个函数 我在下面找到并尝试了此操作,但代码未激活: // Once you scroll into that div ID, this still does not get hit: $( "#slice_video" ).scroll(function() { console.log('in scroll...'); }); // In the comments I also saw this s

我无法检测页面的某个部分何时向下滚动到。一旦我开始使用某个ID或类,我想运行几个函数

我在下面找到并尝试了此操作,但代码未激活:

// Once you scroll into that div ID, this still does not get hit:
$( "#slice_video" ).scroll(function() {
    console.log('in scroll...');    
});


// In the comments I also saw this solution, tried it but still nothing working:

function isScrolledIntoView(elem) {
    // alert("method invoked");
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();
    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();
    return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom) && (elemBottom <=      docViewBottom) && (elemTop >= docViewTop));
}

if (isScrolledIntoView($('.eco_jumbotron'))){

    // initialize modals:
    modals.wireModals($());

    // Animate in Tiles
    animateTiles();
}
//一旦您滚动到该div ID,它仍然不会被点击:
$(“#切片视频”)。滚动(函数(){
log('in scroll…');
});
//在评论中,我也看到了这个解决方案,尝试过,但仍然没有任何效果:
函数IsCrolledinToView(elem){
//警报(“调用的方法”);
var docViewTop=$(window.scrollTop();
var docViewBottom=docViewTop+$(window).height();
var elemTop=$(elem).offset().top;
var elemBottom=elemTop+$(elem).height();

return((elemBottom>=docViewTop)&&(elemTop您必须在溢出的容器上侦听滚动或自动滚动事件

该代码确实有效:

$('.container' ).scroll(function() {
    if($(".box4").position().top < $(".container").position().top + $(".container").height()){
        // code
    }
});
$('.container')。滚动(函数(){
如果($(“.box4”).position().top<$(.container”).position().top+$(.container”).height()){
//代码
}
});

我想你可以做得更好,但这只是一个开始

我希望有帮助

编辑:


不要忘记处理这样一个事实:使用此方法,每次滚动一点点,事件就会触发,并且div的位置小于容器(底边)定位

因此,您的问题是您首先尝试在错误的分区上滚动。然后您正在检查整个窗口到该分区的高度。因此,如果您将其更改为
.container
滚动事件,则每次滚动时都会发出警报。您要做的是检查相对于正在滚动的分区的滚动。例如这个

function isScrolledIntoView( elem, container )
{
    var contTop = $(container).offset().top;
    var contBottom = contTop + $(container).height();

    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();

    return ((elemBottom <= contBottom) && (elemTop >= contTop));
}
$( '.container' ).scroll(function() {
    if ( isScrolledIntoView( $( '.box4' ) , $( '.container' ) ) ) 
    {
        console.log('HERE!');
    }
});
函数是crolledintoview(元素、容器)
{
var contTop=$(容器).offset().top;
var contBottom=contTop+$(容器).height();
var elemTop=$(elem).offset().top;
var elemBottom=elemTop+$(elem).height();
返回((elemBottom=contTop));
}
$('.container')。滚动(函数(){
if(isScrolledIntoView($('.box4'),$('.container'))
{
console.log('HERE!');
}
});

为什么计数会在第2部分下到一半时激活?这是一个dom框区域问题吗?当第4部分的上边缘到达容器的下边缘时(当它开始可见时)计数会激活。但是,通过更改div中的表达式,您可以很容易地将其更改为仅在完全可见时才激活它;)