”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 实现平滑滚动以获得更好的用户体验。

实现平滑滚动以获得更好的用户体验。

发布于2024-11-08
浏览:892

平滑滚动是一项现代微动画功能,可通过允许在页面各部分之间轻松导航来增强用户体验。平滑滚动不是立即跳到各个部分,而是创造流畅、引人入胜的过渡。这是一种保持用户参与度的好方法,而又不会因为突然的跳转而让他们不知所措。

在本文中,我们将探讨两种实现平滑滚动的方法:

  • 使用 CSS
  • 使用 JavaScript

让我们首先深入了解如何使用 CSS 实现平滑滚动。

为什么要用 CSS 实现平滑滚动?

CSS是实现平滑滚动最简单也是首选的方法。由于无需加载额外的 JavaScript,因此它可以提高页面性能,从而使其更快、更轻。让我们继续在我们的项目中实现这一点。

第 1 步:创建导航栏

首先,让我们创建一个简单的导航栏来保存导航链接。这些链接将把用户带到页面上的特定部分。

Implementing Smooth Scrolling for a Better User Experience.

确保导航链接是锚标记,因为它们允许我们轻松跳转到页面的特定部分。

第 2 步:创建部分
现在我们有了导航链接,让我们创建相应的部分。

Implementing Smooth Scrolling for a Better User Experience.

我们为每个导航链接创建了部分。

第 3 步:添加可滚动内容
为了平滑滚动,您的页面需要足够的内容来滚动。让我们添加一些虚拟文本以使页面可滚动。

Implementing Smooth Scrolling for a Better User Experience.

最后我们有足够的内容使我们的页面可以滚动。

第 4 步:将导航链接到部分
我们将使用锚标记的 href 属性来引用我们想要滚动到的部分。只需添加 # 后跟相应的部分 ID。

Implementing Smooth Scrolling for a Better User Experience.

因此,我们基本上在上图中所做的是使用 href 属性来引用我们希望导航链接转到的部分。

第 5 步:将适当的标识符 (id) 分配给适当的部分

Implementing Smooth Scrolling for a Better User Experience.

因此,我们现在所做的只是使用 href 属性和 Id 将每个链接分配到适当的部分。因此,href 为 #section-one 的导航链接将与 id section-one

的部分匹配

现在,当我们单击导航链接时,我们将进入该部分。
但我们注意到有一点,不太流畅,页面跳转到该部分,体验不太好。

第6步:使用CSS添加平滑滚动
要实现平滑滚动,请向 html 元素添加单个 CSS 属性。

Implementing Smooth Scrolling for a Better User Experience.

当我们在html中添加scroll-behavior属性时,我们可以在点击导航链接时看到平滑的滚动效果。

工作原理

在幕后,锚标记中的 href 属性传统上用于导航到外部页面或 URL。但是,当与 # 后跟部分 ID 配对时,锚标记会“查找”当前页面并滚动到相应的部分。通过添加滚动行为:平滑; CSS 属性,我们在部分之间创建流畅的过渡,增强整体用户体验。

实现平滑滚动的另一种方法是使用JAVASCRIPT来处理它。
我们也可以通过几个步骤来实现这一点:

注意:每个部分仍会像以前一样具有指定的 id。

第1步:创建scrollIntoView函数

我们可以在 javascript 中创建一个函数,该函数将使用scrollIntoView 方法来实现相同的结果。像这样:

Implementing Smooth Scrolling for a Better User Experience.

第 2 步:点击链接时嵌入功能

我们将在附加到每个导航链接的事件侦听器中嵌入scrollIntoView 函数。这样,当单击链接时,页面会平滑地滚动到引用的部分。

Implementing Smooth Scrolling for a Better User Experience.

这也可以根据您用于开发的框架进行重构。

这是我们在构建直观网页时实现平滑滚动的两种简单方法。

如果您有问题或反馈,请发表评论。

版本声明 本文转载于:https://dev.to/unegbuclinton/implementing-smooth-scrolling-for-a-better-user-experience-3819?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • `console.log`显示修改后对象值异常的原因
    `console.log`显示修改后对象值异常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    编程 发布于2025-07-13
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-07-13
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解决此问题,必须确保提供给HAAR CASCADE XML文件的路径有效。在提供的代码片段中,级联分类器装有硬编码路径,这可能对您的系统不准确。相反,OPENCV提...
    编程 发布于2025-07-13
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-07-13
  • 解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    编程 发布于2025-07-13
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-07-13
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-07-13
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确预期操作结果的火灾和...
    编程 发布于2025-07-13
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-07-13
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-07-13
  • Java字符串非空且非null的有效检查方法
    Java字符串非空且非null的有效检查方法
    检查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。isement(Isement() trim whitespace whitesp...
    编程 发布于2025-07-13
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-07-13
  • Spark DataFrame添加常量列的妙招
    Spark DataFrame添加常量列的妙招
    在Spark Dataframe ,将常数列添加到Spark DataFrame,该列具有适用于所有行的任意值的Spark DataFrame,可以通过多种方式实现。使用文字值(SPARK 1.3)在尝试提供直接值时,用于此问题时,旨在为此目的的column方法可能会导致错误。 df.withCo...
    编程 发布于2025-07-13
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-07-13
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-07-13

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3