javascript - 为什么,当滚动页面时,当滚动到带有水平块的块时,它并不总是滚动?
问题描述
我刚刚创建了两个块,一个在另一个块中。外面的转了90度,里面的转了90度。
还有另一种方式是通过overflow-x hidden和jquery mousewhee插件,但是我在浏览器中使用的是平滑滚动,这样创建的水平滚动不会像网站其他部分那样滚动。
当我滚动页面并通过水平滚动到达块时,我将它置于监视器屏幕的中间。唯一的问题是这个块并不总是水平滚动,如果你用鼠标快速滚动站点,这个块就会过去。
这是代码:
let horizontalScroll = function () {
if ($(window).width() > 992) {
function chk_scroll(e) {
let elem = $(e.currentTarget);
if (Math.round(elem[0].scrollHeight - elem.scrollTop()) === elem.outerHeight()) {
return true;
}
}
let windowHeight = $(window).height();
let productsBlockFirst = $('#js-products-block-first');
let productsBlockMainHeader = $('#js-products-block-first .products-block__main-header');
let productsBlockFirstHeight = productsBlockFirst.innerHeight() - productsBlockMainHeader.innerHeight();
let productsBlockFirstOffsetTop = productsBlockFirst.offset().top + productsBlockMainHeader.innerHeight();
$('.products-block').each(function () {
let productsBlockOutWrapper = $(this).find('.products-block__outer-wrapper');
let productsBlockOutWrapperOffsetTop = productsBlockOutWrapper.offset().top;
let productsBlockOutWrapperScrollTop = productsBlockOutWrapper.scrollTop();
let productsBlockOutWrapperHeight = productsBlockOutWrapper.innerHeight();
let productsBlockOutWrapperOffsetBottom = productsBlockOutWrapperOffsetTop + productsBlockOutWrapperHeight;
let productsBlockOutWrapperScrollHeight = document.getElementsByClassName('products-block__outer-wrapper')[0].scrollHeight;
let productsBlockWrapperHeight = $('.products-block__wrapper').innerHeight();
let scrollCenter = productsBlockFirstOffsetTop - ((windowHeight - productsBlockFirstHeight) / 2);
let iScrollPos = 0;
let flag = false;
productsBlockOutWrapper.scroll(function (e) {
let currentScroll = $(this).scrollTop();
if (flag === false) {
$('html, body').animate({
scrollTop: scrollCenter
});
flag = true;
}
if (currentScroll === 0) {
$('html, body').animate({
scrollTop: productsBlockOutWrapperOffsetTop - 900
});
flag = false;
} else if (currentScroll > iScrollPos) {
if (chk_scroll(e)) {
$('html, body').animate({
scrollTop: productsBlockOutWrapperOffsetTop + 800
});
flag = false;
}
}
iScrollPos = currentScroll;
});
});
}
}
horizontalScroll();
解决方案
推荐阅读
- python - 如何在回归任务中为非零值赋予更大的权重和损失函数?
- java - Android Studio:我总是登录,尽管我的 firebase 中没有用户,我用一个函数检查了这个。为什么?
- html - 图像顶部文本的最佳解决方案
- php - 删除适用于除第一条消息之外的所有内容
- apache - 为一个域和多个 IP 地址配置 apache 虚拟主机
- java - PatternSyntaxException 字符串拆分 Java
- python - 遇到“类型错误:‘float’对象在使用列表时不可下标
- javascript - 让 `node --prof` 在记录之前稍等片刻?
- javascript - Angular js允许字母字符和特殊字符,但不允许数字
- java - websphere中的String.class在哪里