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

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

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

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

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

  • 使用 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]删除
最新教程 更多>
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-05-08
  • 在Oracle SQL中如何提取下划线前的子字符串?
    在Oracle SQL中如何提取下划线前的子字符串?
    [ 在oracle sql 解决方案: Explanation:SUBSTR function extracts a substring starting from the specified position (0) and continuing for a specified length.IN...
    编程 发布于2025-05-08
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-05-08
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-05-08
  • 在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8表中将latin1字符转换为utf8 ,您遇到了一个问题,其中含义的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致电。为了解决此问题,您正在尝试使用“ mb_convert_encoding”和“ iconv”转换受...
    编程 发布于2025-05-08
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-05-08
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-05-08
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-05-08
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-05-08
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-05-08
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-05-08
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-05-08
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-05-08
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-05-08
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-05-08

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

Copyright© 2022 湘ICP备2022001581号-3