【发布时间】:2022-01-02 03:23:31
【问题描述】:
立即发布:https://www.loom.com/share/c2567ccbd8e44ab49d1138e65ae77973
我在页面中间有一个部分或 div。在每次滚动时,我需要检测是否在从该 div 外部滚动(向上滚动或向下滚动)后进入该 div,或者我只是在该 div 内滚动?
我会解释我想要实现的目标
这是网站https://dev.plusplus.co/events/ 对于本节https://prnt.sc/25nbxzq
我想要实现的是,当我从页面顶部开始滚动时,进入上面的部分后,该部分锁定并且该 div 内有一个光滑的滑块,在该部分锁定后,我需要在上下滚动时更改幻灯片。
但是现在发生的事情尤其是在 Firefox 浏览器中,如果我从顶部滚动并输入该 div,滑块会自动更改为第二个。我需要先锁定滚动条,当我进入该部分并滚动时,只需要在下一个滚动条时将幻灯片更改为第二个
我现在正在使用的代码。
// debounce from underscore.js
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
// use x and y mousewheel event data to navigate flickity
function slick_handle_wheel_event(e, slick_instance, slick_is_animating) {
// do not trigger a slide change if another is being animated
if (!slick_is_animating) {
// pick the larger of the two delta magnitudes (x or y) to determine nav direction
var direction =
Math.abs(e.deltaX) > Math.abs(e.deltaY) ? e.deltaX : e.deltaY;
console.log("wheel scroll ", e.deltaX, e.deltaY, direction);
if (direction > 0) {
// next slide
slick_instance.slick("slickNext");
} else {
// prev slide
slick_instance.slick("slickPrev");
}
}
}
// debounce the wheel event handling since trackpads can have a lot of inertia
var slick_handle_wheel_event_debounced = debounce(
slick_handle_wheel_event
, 80, true
);
// slider #2
const slick_3 = $("#firstscrollsection .content-left");
slick_3.not('.slick-initialized').slick({
dots: false,
vertical: true,
speed: 400,
fade: true,
waitForAnimate: false,
verticalSwiping: true,
slidesToShow: 1,
arrows: false,
infinite: false,
});
var slick_3_is_animating = false;
slick_3.on("afterChange", function(index) {
console.log("Slide after change " + index);
slick_3_is_animating = false;
});
slick_3.on("beforeChange", function(index) {
console.log("Slide before change " + index);
slick_3_is_animating = true;
});
$("#firstscrollsection .section-wrapper-animated").on("wheel", function(e) {
slick_handle_wheel_event_debounced(e.originalEvent, slick_3, slick_3_is_animating);
});
【问题讨论】:
-
你想做什么,目标是什么?有一个菜单/导航栏的例子,当你向下滚动足够多时,它会粘在顶部。很少有例子,但你要求的内容并不具体,我会修改问题。
-
您能否提供更清晰的说明?我无法通过阅读标题来解释帖子。 “我需要检测我是否输入了那个 div” 是什么意思?您可以添加您正在尝试创建的草图或视觉表示吗?
-
问题更详细地解释了@Vektor
-
问题解释更详细@BGPHiJACK
标签: javascript jquery scroll scrollview mousewheel