【发布时间】:2019-04-22 02:09:48
【问题描述】:
我想平滑滚动到锚点,而不是通过点击,而是通过事件滚动来激活。
移动滚动条本身会导致滚动条向下移动到该部分,向上移动滚动条将产生与第一部分相同的返回效果。
我正在尝试在 jQuery 中执行此操作,但我错过了一些东西。我设法下拉到底部,但该功能阻止了我。当然有一些简单的提示,但我不知道该寻找什么。
function transitionScroll() {
if ($(window).width() <= 767) {
let scrollWatch = window.pageYOffset;
let positionOfElement = $("#small-carousel").offset().top;
if ((scrollWatch <= positionOfElement) && (scrollWatch != 0)) {
$([document.documentElement, document.body]).animate({ scrollTop: $("#small-carousel").offset().top }, 1000);
}
}
$(window).resize(function () {
if ($(window).width() <= 767) {
let scrollWatch = window.pageYOffset;
let positionOfElement = $("#small-carousel").offset().top;
if (scrollWatch <= positionOfElement) {
$([document.documentElement, document.body]).animate({ scrollTop: $("#small-carousel").offset().top }, 1000);
}
}
});
};
transitionScroll();
window.addEventListener('scroll', transitionScroll);
【问题讨论】:
-
$([document.documentElement, document.body])很奇怪,看起来不应该起作用。 jQuery 滚动插件、核心和 jQuery UI 选择器通常为$('hml, body')。祝你好运,愿 Scrool 与你同在 -
@zer00ne 本质上是一样的,只是使用了一个元素数组:api.jquery.com/jQuery/#jQuery-elementArray
-
请注意,
transitionScroll将事件处理程序附加到resize事件。每次用户滚动时,您都会运行它。因此,当用户调整浏览器大小时,您可能会触发大量事件处理程序... -
@HereticMonkey 现在我明白了,没有引号所以不是选择器字符串——它是
html和body的数组文字。 -
好吧,我已经改进了这段代码。中途我设法得到了结果。现在,在第一个“if”中执行代码后,代码循环并且窗口从一个部分转到另一个部分。这种行为来自哪里的任何想法?我认为我应该在满足条件后以某种方式停止或减慢代码的执行速度。 codepen.io/toMuchMike/pen/JVWppq?editors=0011
标签: javascript jquery