窗口滚动到某些位置时触发事件

时间:2011-04-15 04:15:15

标签: javascript jquery browser

我想在浏览器窗口超出特定点时调用函数
(例如,用户将窗口从顶部向下滚动超过200px

是否有可以绑定的事件,然后我如何检查从浏览器顶部到页面顶部的偏移量?

4 个答案:

答案 0 :(得分:22)

您可以使用onscroll

function testScroll(ev){
    if(window.pageYOffset>400)alert('User has scrolled at least 400 px!');
}
window.onscroll=testScroll

如果你想要一个jQuery解决方案,你可以使用scroll

答案 1 :(得分:19)

您所描述内容的热门插件是jQuery Waypoints


如果您不想使用插件,则机制为:

$(window).scrollTop(); // returns pixel value
$(window).scroll(function () { /* code here */ });

但是,因为scroll事件非常快,所以必须小心地只放置在处理程序内快速执行的代码。一种常见的技术是通过检查是否已经过了一定的时间来“限制”处理事件的速率。

答案 2 :(得分:3)

如果您不想使用插件,可以试试这个

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));

        }

我曾使用此功能将图像加载为延迟加载。在滚动时调用此函数,然后根据函数返回值的值发送ajax请求。当用户滚动到元素的底部时(即用作方法中的参数),这将发送ajax请求。

if(isScrolledIntoView($('.items:last'))){
    //send the ajax request here 
}

这是我在这个网站上的第一个答案。 我希望你能理解

答案 3 :(得分:1)

注意使用

window.onscroll = () => {

  const Ypos = window.pageYOffset;

  if(Ypos > 100) console.log('User has scrolled at least 100px!');

}

您确实在检查用户何时离窗口顶部至少400px。因此,当您滚动到400px以下时,您将触发该功能。

那可能不是您想要的。如果您想仅在向上或向下滚动时触发 at 400px 函数,则可以使用以下代码:

let below = false;
window.onscroll = () => {

  const Ypos = window.pageYOffset;

  if(Ypos > 100 && !below) {

    below = true;
    console.log('you have passed the "100px mark" while scrolling down');

  } else if(Ypos < 100 && below) {

    below = false;
    console.log('you have passed the "100px mark" while scrolling up');

  }

}

在上面的代码中,我已将滚动状态保存在below中(如果true标记下方,则100px;如果false标记上方,则将滚动状态保存。)


比较:

let below = false;
window.onscroll = () => {

  const Ypos = window.pageYOffset;

  if(Ypos > 100 && !below) {

    below = true;
    console.log('you have passed the "100px mark" while scrolling down');

  } else if(Ypos < 100 && below) {

    below = false;
    console.log('you have passed the "100px mark" while scrolling up');

  }

}
.helper{height:100px;width:100%;border-bottom:5px solid red;position:absolute;top:0}
<div class="helper"></div><div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean odio metus, sollicitudin quis scelerisque eu, interdum non nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi ultricies lacus ut felis fermentum, non malesuada nunc ornare. Quisque laoreet vestibulum varius. Morbi efficitur nisi in nisl rutrum, ac pretium magna vulputate. In est libero, commodo et nisi tristique, faucibus fringilla tortor. Donec sed ornare felis, vitae bibendum dui. Nulla mi nulla, vestibulum sed ullamcorper ut, venenatis at libero. In placerat odio id sapien blandit, a consectetur ligula cursus. Sed cursus dictum ipsum a ultricies.Morbi in odio sagittis, congue orci vel, euismod nisi. Suspendisse sit amet imperdiet nulla. Nullam sollicitudin velit viverra, placerat felis sit amet, rhoncus turpis. Duis et neque malesuada, finibus massa id, ullamcorper dui. Morbi ut fringilla augue. Duis quam sem, lobortis sed gravida eu, sagittis a ex. Cras commodo bibendum tristique. Praesent in pulvinar eros, quis maximus magna. Etiam dui leo, ullamcorper in interdum at, dignissim in sem. Suspendisse ac urna mollis, feugiat eros nec, aliquam purus. Donec eget enim at enim interdum facilisis. Nam non consectetur enim. In non eros quis tortor auctor interdum.Etiam id ipsum risus. Donec ut orci nulla. Duis lacinia, erat vitae maximus efficitur, lectus risus feugiat sem, in suscipit nibh enim efficitur nibh. Fusce sollicitudin lacinia lectus, non malesuada nisi rhoncus id. Sed id congue sem, sit amet tincidunt nulla. Etiam vitae mauris sapien. Aenean ornare volutpat libero sed interdum. Aenean placerat aliquet dolor, eleifend bibendum mi rutrum sit amet. Nullam eu lacus ornare, dapibus ante sit amet, vehicula enim. Vestibulum at euismod ex. Ut at vehicula purus, nec porttitor tellus. Vivamus consequat sapien eu est malesuada, quis varius est aliquet. Sed eu volutpat lorem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam varius, augue ac pretium commodo, turpis tellus commodo turpis, venenatis tristique velit odio sed quam. Phasellus tempor nisi eu massa elementum bibendum.Sed ac egestas enim. Integer hendrerit, ligula sit amet viverra imperdiet, massa nunc consequat leo, sit amet ornare quam nisi sed elit. In pulvinar libero a ligula consectetur tincidunt. Proin fringilla turpis sagittis dolor facilisis imperdiet. In nec suscipit urna. Sed turpis justo, dapibus ac risus efficitur, lacinia suscipit nunc. Aliquam ex nisl, ultricies quis elit a, rutrum tempus metus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis consequat suscipit eleifend. Morbi a euismod augue. In facilisis lacus a est suscipit, non interdum dolor condimentum. Cras aliquet ornare diam sit amet laoreet. Aliquam sed enim varius, efficitur arcu id, tincidunt dui. Nulla scelerisque urna nec feugiat fermentum.Suspendisse sit amet orci lacus. Pellentesque vitae ante finibus, volutpat risus et, posuere orci. Sed posuere tellus sem, sed pulvinar massa finibus ut. Duis tempor rutrum diam a vestibulum. Curabitur at libero eu urna imperdiet vehicula. Etiam aliquet maximus ipsum, eu lobortis lectus rhoncus eget. Suspendisse semper facilisis lectus. Curabitur non lectus a risus ullamcorper ultricies non pulvinar diam. Sed euismod imperdiet facilisis. Fusce sagittis nibh vel lorem accumsan fringilla.Fusce ac leo lacus. Nullam dictum id orci nec semper. Nam non ultrices tellus. Curabitur felis erat, bibendum sit amet quam eu, luctus finibus leo. Nullam ac porta nibh, eget euismod mauris. Phasellus posuere enim sed tellus fermentum, nec vehicula nisi mattis. Vivamus elementum varius enim, vulputate dignissim enim iaculis sit amet.Vivamus pellentesque, enim vitae porta pulvinar, eros turpis tempor mauris, in facilisis dui libero in purus. Nunc erat purus, tristique vitae ex non, commodo cursus purus. Nulla fermentum quam ac vestibulum facilisis. Duis semper nunc orci, non fringilla sem placerat ut. Mauris posuere eu urna a gravida. Nam ullamcorper, ligula a ultricies feugiat, mi ipsum viverra diam, vel aliquam velit mauris eu diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed magna dolor, malesuada at orci ut, vehicula dignissim dolor. In odio libero, vestibulum eu rhoncus eu, tempus sed diam.Sed eget hendrerit elit, a tincidunt sapien. Suspendisse potenti. Aliquam facilisis nibh quis pulvinar condimentum. Ut interdum quam non mauris faucibus, a faucibus felis interdum. Maecenas porttitor, lorem vel fringilla semper, orci arcu varius justo, ut convallis tellus lectus et metus. Quisque porta dolor magna, ac convallis tortor egestas eu. Integer in ligula eget ipsum blandit interdum.Cras viverra, dui finibus dictum scelerisque, quam arcu vehicula sapien, vel varius sem risus sed nulla. Cras sit amet lacus a quam vestibulum consequat et ut enim. Nunc vestibulum libero a nisi euismod tincidunt. Sed vel mollis risus. Cras convallis luctus enim sit amet suscipit. Vivamus egestas metus ut luctus consequat. Aliquam rutrum elit eu interdum consequat. Donec metus odio, sagittis sit amet bibendum nec, convallis nec nisl. Quisque eget nisl bibendum, fermentum mauris non, dictum quam. Nunc pretium faucibus risus sed pellentesque. Maecenas dictum sodales justo id rutrum. Cras vel feugiat turpis.Quisque a malesuada nunc, non vulputate magna. Quisque ac leo consequat, auctor orci vitae, pulvinar tellus. Pellentesque euismod arcu a lacinia condimentum. Vestibulum et purus neque. Donec libero erat, auctor sed tempus et, auctor at nisl. In eu elit non turpis dapibus facilisis. Vestibulum sodales ex purus, ut ultricies risus mattis non. Donec id elementum nunc.</div>

对此:

window.onscroll = () => {

  const Ypos = window.pageYOffset;

  if(Ypos > 100) {

    console.log('you have passed the "100px mark" while scrolling down');

  } else if(Ypos < 100) {

    console.log('you have passed the "100px mark" while scrolling up');

  }

}
.helper{height:100px;width:100%;border-bottom:5px solid red;position:absolute;top:0}
<div class="helper"></div><div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean odio metus, sollicitudin quis scelerisque eu, interdum non nisi. Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi ultricies lacus ut felis fermentum, non malesuada nunc ornare. Quisque laoreet vestibulum varius. Morbi efficitur nisi in nisl rutrum, ac pretium magna vulputate. In est libero, commodo et nisi tristique, faucibus fringilla tortor. Donec sed ornare felis, vitae bibendum dui. Nulla mi nulla, vestibulum sed ullamcorper ut, venenatis at libero. In placerat odio id sapien blandit, a consectetur ligula cursus. Sed cursus dictum ipsum a ultricies.Morbi in odio sagittis, congue orci vel, euismod nisi. Suspendisse sit amet imperdiet nulla. Nullam sollicitudin velit viverra, placerat felis sit amet, rhoncus turpis. Duis et neque malesuada, finibus massa id, ullamcorper dui. Morbi ut fringilla augue. Duis quam sem, lobortis sed gravida eu, sagittis a ex. Cras commodo bibendum tristique. Praesent in pulvinar eros, quis maximus magna. Etiam dui leo, ullamcorper in interdum at, dignissim in sem. Suspendisse ac urna mollis, feugiat eros nec, aliquam purus. Donec eget enim at enim interdum facilisis. Nam non consectetur enim. In non eros quis tortor auctor interdum.Etiam id ipsum risus. Donec ut orci nulla. Duis lacinia, erat vitae maximus efficitur, lectus risus feugiat sem, in suscipit nibh enim efficitur nibh. Fusce sollicitudin lacinia lectus, non malesuada nisi rhoncus id. Sed id congue sem, sit amet tincidunt nulla. Etiam vitae mauris sapien. Aenean ornare volutpat libero sed interdum. Aenean placerat aliquet dolor, eleifend bibendum mi rutrum sit amet. Nullam eu lacus ornare, dapibus ante sit amet, vehicula enim. Vestibulum at euismod ex. Ut at vehicula purus, nec porttitor tellus. Vivamus consequat sapien eu est malesuada, quis varius est aliquet. Sed eu volutpat lorem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam varius, augue ac pretium commodo, turpis tellus commodo turpis, venenatis tristique velit odio sed quam. Phasellus tempor nisi eu massa elementum bibendum.Sed ac egestas enim. Integer hendrerit, ligula sit amet viverra imperdiet, massa nunc consequat leo, sit amet ornare quam nisi sed elit. In pulvinar libero a ligula consectetur tincidunt. Proin fringilla turpis sagittis dolor facilisis imperdiet. In nec suscipit urna. Sed turpis justo, dapibus ac risus efficitur, lacinia suscipit nunc. Aliquam ex nisl, ultricies quis elit a, rutrum tempus metus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis consequat suscipit eleifend. Morbi a euismod augue. In facilisis lacus a est suscipit, non interdum dolor condimentum. Cras aliquet ornare diam sit amet laoreet. Aliquam sed enim varius, efficitur arcu id, tincidunt dui. Nulla scelerisque urna nec feugiat fermentum.Suspendisse sit amet orci lacus. Pellentesque vitae ante finibus, volutpat risus et, posuere orci. Sed posuere tellus sem, sed pulvinar massa finibus ut. Duis tempor rutrum diam a vestibulum. Curabitur at libero eu urna imperdiet vehicula. Etiam aliquet maximus ipsum, eu lobortis lectus rhoncus eget. Suspendisse semper facilisis lectus. Curabitur non lectus a risus ullamcorper ultricies non pulvinar diam. Sed euismod imperdiet facilisis. Fusce sagittis nibh vel lorem accumsan fringilla.Fusce ac leo lacus. Nullam dictum id orci nec semper. Nam non ultrices tellus. Curabitur felis erat, bibendum sit amet quam eu, luctus finibus leo. Nullam ac porta nibh, eget euismod mauris. Phasellus posuere enim sed tellus fermentum, nec vehicula nisi mattis. Vivamus elementum varius enim, vulputate dignissim enim iaculis sit amet.Vivamus pellentesque, enim vitae porta pulvinar, eros turpis tempor mauris, in facilisis dui libero in purus. Nunc erat purus, tristique vitae ex non, commodo cursus purus. Nulla fermentum quam ac vestibulum facilisis. Duis semper nunc orci, non fringilla sem placerat ut. Mauris posuere eu urna a gravida. Nam ullamcorper, ligula a ultricies feugiat, mi ipsum viverra diam, vel aliquam velit mauris eu diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed magna dolor, malesuada at orci ut, vehicula dignissim dolor. In odio libero, vestibulum eu rhoncus eu, tempus sed diam.Sed eget hendrerit elit, a tincidunt sapien. Suspendisse potenti. Aliquam facilisis nibh quis pulvinar condimentum. Ut interdum quam non mauris faucibus, a faucibus felis interdum. Maecenas porttitor, lorem vel fringilla semper, orci arcu varius justo, ut convallis tellus lectus et metus. Quisque porta dolor magna, ac convallis tortor egestas eu. Integer in ligula eget ipsum blandit interdum.Cras viverra, dui finibus dictum scelerisque, quam arcu vehicula sapien, vel varius sem risus sed nulla. Cras sit amet lacus a quam vestibulum consequat et ut enim. Nunc vestibulum libero a nisi euismod tincidunt. Sed vel mollis risus. Cras convallis luctus enim sit amet suscipit. Vivamus egestas metus ut luctus consequat. Aliquam rutrum elit eu interdum consequat. Donec metus odio, sagittis sit amet bibendum nec, convallis nec nisl. Quisque eget nisl bibendum, fermentum mauris non, dictum quam. Nunc pretium faucibus risus sed pellentesque. Maecenas dictum sodales justo id rutrum. Cras vel feugiat turpis.Quisque a malesuada nunc, non vulputate magna. Quisque ac leo consequat, auctor orci vitae, pulvinar tellus. Pellentesque euismod arcu a lacinia condimentum. Vestibulum et purus neque. Donec libero erat, auctor sed tempus et, auctor at nisl. In eu elit non turpis dapibus facilisis. Vestibulum sodales ex purus, ut ultricies risus mattis non. Donec id elementum nunc.</div>