当前位置: 首页 > 面试题库 >

无需使用jQuery即可平滑滚动

司空赞
2023-03-14
问题内容

我正在编写一个页面,其中我只想将原始JavaScript代码用于UI,而不会受到插件或框架的干扰。

现在,我正在努力寻找一种无需使用jQuery即可平滑滚动页面的方法


问题答案:

尝试使用此平滑滚动演示或类似的算法:

  1. 使用获取当前的最佳位置 self.pageYOffset
  2. 获取元素的位置,直到要滚动到的位置: element.offsetTop
  3. 进行for循环到达该位置,这将非常快,或者使用计时器进行平滑滚动,直到使用 window.scrollTo

安德鲁·约翰逊的原始代码:

function currentYPosition() {
    // Firefox, Chrome, Opera, Safari
    if (self.pageYOffset) return self.pageYOffset;
    // Internet Explorer 6 - standards mode
    if (document.documentElement && document.documentElement.scrollTop)
        return document.documentElement.scrollTop;
    // Internet Explorer 6, 7 and 8
    if (document.body.scrollTop) return document.body.scrollTop;
    return 0;
}


function elmYPosition(eID) {
    var elm = document.getElementById(eID);
    var y = elm.offsetTop;
    var node = elm;
    while (node.offsetParent && node.offsetParent != document.body) {
        node = node.offsetParent;
        y += node.offsetTop;
    } return y;
}


function smoothScroll(eID) {
    var startY = currentYPosition();
    var stopY = elmYPosition(eID);
    var distance = stopY > startY ? stopY - startY : startY - stopY;
    if (distance < 100) {
        scrollTo(0, stopY); return;
    }
    var speed = Math.round(distance / 100);
    if (speed >= 20) speed = 20;
    var step = Math.round(distance / 25);
    var leapY = stopY > startY ? startY + step : startY - step;
    var timer = 0;
    if (stopY > startY) {
        for ( var i=startY; i<stopY; i+=step ) {
            setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
            leapY += step; if (leapY > stopY) leapY = stopY; timer++;
        } return;
    }
    for ( var i=startY; i>stopY; i-=step ) {
        setTimeout("window.scrollTo(0, "+leapY+")", timer * speed);
        leapY -= step; if (leapY < stopY) leapY = stopY; timer++;
    }
}


 类似资料:
  • 问题内容: 有没有一种方法可以使用jQuery向下滚动到锚链接? 喜欢: ? 问题答案: 这是我的方法: 然后,您只需要像这样创建锚:

  • 问题内容: 我一直在尝试滚动到div id jquery代码以正常工作。基于另一个堆栈溢出问题,我尝试了以下操作 但这没有用。它只是捕捉到div。我也试过 没有进展。 问题答案: 您需要设置动画

  • 有没有更惯用的方式来编写对map的重复调用(不使用flatMap)? 请参阅以下示例: 这是一个正在运行的函数,在这种情况下需要返回未来的[结果]。 我尝试过使用“理解”,但没有找到平面图的应用程序。我尝试使用flatMap的结果是我没有未来。

  • 问题内容: 我们有一些页面使用ajax来加载内容,并且在某些情况下需要深度链接到页面。与其链接到“用户”并告诉人们单击“设置”, 不如 将其链接到 user.aspx#settings, 这很有帮助。 __ 为了使人们能够提供指向各节的正确链接(用于技术支持等),我将其设置为在单击按钮时自动修改URL中的哈希。当然,唯一的问题是,发生这种情况时,它还会将页面滚动到该元素。 有办法禁用它吗?到目前为

  • 本文向大家介绍jquery平滑滚动到顶部插件使用详解,包括了jquery平滑滚动到顶部插件使用详解的使用技巧和注意事项,需要的朋友参考一下 点击一个固定按钮,平滑的滚动到窗口顶部的这种功能,在前端开发是相当常见的,如图: 关键代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我正在开发一个应用程序,其中我使用了AppBarLayout和CollapsingToolbarLayout以及NestedScrollView。我已经成功地实现了这一点,并且运行良好。 现在我想做的是,在嵌套滚动视图上滑动(快速向上滑动)时,它应该完全滚动到顶部。类似地,在向屏幕底部滑动(快速向下滑动)时,它必须平滑地滚动到底部。然而现在,它只能卡在中间,这使它看起来很丑。我已经尝试了许多可用的