jQuery 使用 .scroll(handler) 滚动到元素
jQuery scroll to an element using .scroll(handler)
我试图在从页面顶部向下滚动一定距离后滚动到页面上的目标元素。因此,滚动到元素是由 .scroll() 事件触发的。我已经能够使用以下代码执行此操作:
$( document ).scroll( function( e ) {
if ( $(document).scrollTop() > 250 ) {
$('html, body').animate({
scrollTop: $("#cy-hero-image").offset().top
}, 650);
}
});
但是,问题是,一旦此事件由滚动触发,页面就会粘在此滚动位置。我如何编写从页面顶部滚动时它只跳转到此页面位置一次的代码?
这是我到目前为止所拥有的JSFiddle。
您可以添加一个变量来检查它是否来自顶部。
var startsFrom = 0;
$(document).scroll(function(e) {
if($(document).scrollTop() == 0) //you can adjust it to match whatever you want
startsFrom = 0;
if ($(document).scrollTop() > 250 && startsFrom == 0) {
startsFrom = $(document).scrollTop();
$('html, body').animate({
scrollTop: $("#targeted-element").offset().top
}, 650);
}
});
https://jsfiddle.net/pdyu3f5b/14/
试试吧。每次访问页面顶部时,它都在工作。
var isScroll = true;
$(document).scroll(function(e) {
if ($(document).scrollTop() > 250 && isScroll) {
isScroll = false;
$('html body').animate({
scrollTop: $("#targeted-element").offset().top
}, 650);
}else if($(document).scrollTop() < 250){
isScroll = true;
}
});
JSFiddle
命名函数并使用.one()
附加处理程序。如果未满足断点,请重新附加处理程序。
var myScrollFunc = function(e){
if ($(document).scrollTop() > 250) {
$('html, body').animate({
scrollTop: $("#targeted-element").offset().top
}, 650);
} else {
$(document).one('scroll', myScrollFunc);
}
}
$(document).one('scroll', myScrollFunc);
JSFiddle
只需在使用滚动处理程序后将其删除即可
var myScroll = function( e ) {
if ( $(document).scrollTop() > 250) {
$('html, body').animate({
scrollTop: $("#cy-hero-image").offset().top
}, 650);
$(document).off(e);
}
});
$(document).on('scroll', myScroll);
相关文章:
- 使用webdriver io在可滚动元素内滚动
- 每次单击按钮时水平滚动元素
- 可滚动元素,如何在调整大小时更改顶部偏移量
- 如何使用javascript检测不可滚动元素中的滚动事件和方向
- 滚动元素的交叉溶解过渡
- 自动上下滚动元素
- 检测可滚动元素内的滚动位置
- 为滚动元素制作动画
- 如何自动滚动元素
- 使用鼠标滚轮滚动元素时传播的事件是什么
- 在鼠标滚动时使用 JQuery 水平滚动元素
- 在屏幕顶部附近滚动元素时触发的侦听器
- 如何在调整大小时更改滚动元素的行为?(HTML,CSS,JavaScript)
- 滚动元素上的Javascript触摸移动事件
- Poshy提示不随滚动元素移动
- 如何在JQuery中滚动元素
- jsPDFaddHTML获取滚动元素的全部内容
- 使用鼠标滚轮滚动页面时,避免滚动可滚动元素
- 滚动元素到视图中而不与页眉重叠
- 如何为自定义滚动元素添加限制