gpt4 book ai didi

javascript - 在一定的滚动偏移量或滚动时间后触发滚动事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:29 26 4
gpt4 key购买 nike

我正在使用 fullPage.js JQuery 插件(参见演示 here)。该插件定义了全窗口大小的部分,并在用户向上或向下滚动时从“幻灯片”部分滚动到“幻灯片”部分。

我正在尝试修改它,以便滚动事件不会在滚动开始时立即触发,而是在短时间或一定的滚动量后触发,以防止用户意外滑动几个像素,这将触发滚动事件并滚动到下一张幻灯片。

例如,如果用户滚动 offset < 100px,然后滚动回当前幻灯片,如果 offset > 100px,则滚动到下一张幻灯片。

Herefullpage.js 代码。我认为我将不得不修改此功能以获得我想要的:

//when scrolling...
$(window).scroll(function(e){
if(!options.autoScrolling){
var currentScroll = $(window).scrollTop();

var scrolledSections = $('.section').map(function(){
if ($(this).offset().top < (currentScroll + 100)){
return $(this);
}
});

//geting the last one, the current one on the screen
var currentSection = scrolledSections[scrolledSections.length-1];

//executing only once the first time we reach the section
if(!currentSection.hasClass('active')){
var yMovement = getYmovement(currentSection);

$('.section.active').removeClass('active');
currentSection.addClass('active');

var anchorLink = currentSection.data('anchor');
$.isFunction( options.onLeave ) && options.onLeave.call( this, currentSection.index('.section'), yMovement);

$.isFunction( options.afterLoad ) && options.afterLoad.call( this, anchorLink, (currentSection.index('.section') + 1));

activateMenuElement(anchorLink);
}
}
});

但我真的不知道该怎么做...我想我应该在滚动开始和滚动结束时获得滚动偏移量/时间,获得差异,然后根据差异滚动到当前或下一张幻灯片,但我不知道如何在此函数中实现它以及如何获得滚动结束事件。

而且我不确定是否使用“滚动结束事件”,因为如果用户想要向下或向上滚动,脚本不必等待用户停止滚动以滚动到它必须滚动的位置..

也许我应该在滚动期间获得滚动偏移量,当 offset > x 时滚动到下一个,如果滚动停止且 offset < x 则滚动回当前?或者我可以使用滚动时间而不是滚动偏移量?

最佳答案

我想您遇到的问题是笔记本电脑及其触控板,而不是鼠标滚轮。我对么?或者,使用 Apple 鼠标,它在滚动方面就像触控板。

好吧,只是想让你知道,问题不在 $(window).scroll(function(e){ 函数中,而是在 MouseWheelHandler(). .scroll 函数仅在选项 autoScrolling 设置为 false 时使用,如您在第一个条件中所见。

也就是说,MouseWheelHandler() 函数在每次检测到鼠标滚轮或触控板上的任何滚动时都会触发。避免在第一次滚动时触发它的方法就是为它创建一个计数器。

您必须小心,因为触控板的滚动比普通鼠标滚轮的滚动敏感得多,因此,在定义您要使用的最小滚动次数之前,先在两种设备上尝试一下。

我定义了一个设置为 0 的新变量:

var scrolls = 0;

然后,在 MouseWheelHandler() 中,我添加了一个新条件 scrolls > 2

if(options.autoScrolling && scrolls>2){

这样,我们只会在滚动超过 3 次时触发事件,我相信这对于鼠标滚轮来说已经足够了。

如果我们不输入条件,那么我们增加变量:

}else{
scrolls++;
};

这是工作演示:http://jsfiddle.net/prYUq/2/

这里是完整的修改函数:

var scrolls = 0;

function MouseWheelHandler() {
return function (e) {
if (options.autoScrolling && scrolls > 2) {
// cross-browser wheel delta
e = window.event || e;
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
e.wheelData

console.log("e.wheelDelta: " + e.wheelDelta);
console.log("-e.detail: " + e.detail);

if (!isMoving) { //if theres any #
var scrollable = $('.section.active').find('.scrollable');

//scrolling down?
if (delta < 0) {
if (scrollable.length > 0) {
//is the scrollbar at the end of the scroll?
if (isScrolled('bottom', scrollable)) {
$.fn.fullpage.moveSlideDown();
} else {
return true; //normal scroll
}
} else {
$.fn.fullpage.moveSlideDown();
}
}

//scrolling up?
else {
if (scrollable.length > 0) {
//is the scrollbar at the start of the scroll?
if (isScrolled('top', scrollable)) {
$.fn.fullpage.moveSlideUp();
} else {
return true; //normal scroll
}
} else {
$.fn.fullpage.moveSlideUp();
}
}
}
scrolls = 0;

return false;
} else {
scrolls++;
};
}
}

如果您对插件有具体问题或要求,请不要忘记 github 上有关此插件的问题论坛:https://github.com/alvarotrigo/fullPage.js/issues?state=open

希望对你有帮助。

关于javascript - 在一定的滚动偏移量或滚动时间后触发滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19513065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com