scrollIntoView() 在 Chrome 中的多个元素上使用 smooth 函数

2024-04-12

element.scrollIntoView行为设置为smooth在 Chrome 中没有像我预期的那样工作。当它仅用于调用堆栈中的一个元素时,它可以正常工作。但如果它用于多个元素,则只有最后一个元素会实际滚动。

这在 Firefox 中运行良好。 Chrome 中有解决方法吗?

const $ = (s) => document.querySelector(s)
const $$ = (s) => document.querySelectorAll(s)

const container = $(".container")

for (let i = 0; i < 2; i++) {
  document.body.appendChild(container.cloneNode(true))
}

function scrollIntoView(behavior) {
  for (const element of $$(".reveal")) {
    element.scrollIntoView({
      behavior,
      block: "end"
    })
  }
}

$(".instant").addEventListener("click", () => scrollIntoView("instant"))

$(".smooth").addEventListener("click", () => scrollIntoView("smooth"))

$(".reset").addEventListener("click", () => {
  for (const element of $$(".container")) {
    element.scrollTo(0, 0)
  }
})
.container {
  max-height: calc(33vh - 12px);
  overflow-y: auto;
}

.reveal {
  color: red;
}
<button class="instant">
Instant
</button>
<button class="smooth">
Smooth
</button>
<button class="reset">
Reset
</button>
<div class="container">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed rhoncus elementum quam. Donec quis est volutpat, dapibus nisl at, consequat turpis. Quisque convallis nunc faucibus eros egestas, in faucibus neque fringilla. Duis aliquam, metus tempor dignissim
  vestibulum, nulla elit lacinia lacus, vitae pulvinar augue diam et turpis. Aenean a velit sed elit dictum fringilla ut eu augue. Vestibulum hendrerit dolor mauris. Proin quis lacus a turpis posuere maximus. Sed lacus mauris, feugiat a iaculis porta,
  lacinia vel eros. Integer tempor id tortor vitae fermentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam lobortis efficitur massa, eu elementum nulla eleifend ut. Quisque non erat iaculis, ornare erat non, interdum sapien. Suspendisse
  sit amet interdum nisl, eu maximus libero. Fusce nisi nulla, iaculis eu est a, mattis tincidunt sem. Pellentesque non orci dapibus, dignissim ipsum a, finibus metus. Quisque placerat porta neque, eget finibus lectus tempus sed. Cras non gravida urna.
  Morbi pretium mauris nec erat consectetur, vitae convallis lacus consectetur. Nam venenatis diam magna, sed venenatis nisl placerat viverra. Integer et mi pellentesque risus consectetur ultrices. Phasellus iaculis risus elementum, vulputate est sed,
  consectetur diam. Phasellus lobortis felis purus, sit amet mattis elit pharetra ac. Nulla at viverra leo. Maecenas a condimentum magna. Maecenas porta tellus sit amet elit fermentum tincidunt. Donec ultricies blandit enim id mollis. Sed rutrum risus
  sit amet posuere varius. Suspendisse suscipit maximus ligula eget egestas. Nullam lorem neque, viverra in sollicitudin ac, cursus nec purus. Aliquam placerat, arcu sit amet tincidunt consequat, ex est lacinia tellus, ac mattis nisl sapien at enim. Cras
  lacinia libero eu eleifend sodales. Praesent a erat convallis, venenatis dui ut, semper sem. Vivamus tincidunt tempor neque, at congue lacus tincidunt et. Praesent consectetur, massa tristique laoreet sollicitudin, erat diam mattis nibh, nec consequat
  mauris odio ut est. Integer pharetra arcu at finibus congue. Proin pellentesque fringilla blandit. Suspendisse egestas interdum nisl. Nulla facilisi. Quisque dapibus odio risus. Donec non orci dapibus risus pellentesque cursus vestibulum vel arcu. Proin
  volutpat tellus sed elit auctor, sit amet tincidunt ante cursus. Donec faucibus sit amet libero sit amet lobortis. Pellentesque posuere nisl vitae pharetra vestibulum. Mauris et lobortis libero, vel facilisis metus. Duis eu venenatis dui. Fusce gravida
  nibh odio, quis ullamcorper nibh rutrum sed. In dapibus, nulla non auctor egestas, nisi augue venenatis quam, et finibus lorem dui non turpis. Nullam arcu diam, mattis at erat ac, viverra lobortis felis. In in nisi magna. Ut ut ultrices velit, quis
  vehicula libero. Proin dictum metus vel ante lobortis, in placerat magna ornare. Etiam vulputate metus felis, sed fringilla magna convallis vitae. Curabitur non pulvinar ante, eget molestie nibh. Quisque facilisis, diam sed dapibus blandit, ex urna
  vulputate est, non auctor risus dui nec augue. Donec pretium laoreet est, tempor faucibus tortor laoreet ac.
  <span class="reveal">Revealed!</span>
</div>

按照这个draft https://drafts.csswg.org/cssom-view/#scrolling在 Drafts.c​​sswg.org 中,无法使用平滑功能同时滚动多个元素;

当用户代理要执行滚动框框的滚动到给定位置位置、关联的元素元素和可选的滚动行为行为(如果省略则为“自动”)时,必须运行以下步骤:

  1. 中止任何正在进行的框平滑滚动。
  2. If the user agent honors the scroll-behavior property and one of the following are true:
    • 行为是“auto”并且元素不为空并且其滚动行为属性的计算值是平滑的
    • 行为流畅

...然后执行框平滑滚动到位置。否则,执行框的即时滚动到该位置。

您的选择是:

  • 使用原生平滑功能逐一滚动元素。
  • 使用不同的 API 或库来为元素设置动画。
  • 在功能上设计不同,因此它们不需要同时滚动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scrollIntoView() 在 Chrome 中的多个元素上使用 smooth 函数 的相关文章

随机推荐

  • Python urllib2:即使在 HTTPError 异常期间也读取内容主体?

    我正在使用 urllib2 通过 HTTP 获取页面 有时 当我的请求包含错误时 资源会抛出 HTTP 错误 400 错误请求 但是 该响应还包含一个提供详细错误消息的 XML 元素 能够看到该错误而不仅仅是 urllib2 返回的 HTT
  • getResourceAsStream(file) 在哪里搜索文件?

    我很困惑getResourceAsStream 我的包结构如下 src net floodlightcontroller invoked getResourceAsStream here resources floodlightdefaul
  • 查找mysql死锁原因

    1 我有一个脚本 执行一些更新 删除操作 2 所有sql操作都在事务内执行 InnoDb表 3 有时我会收到 尝试获取锁定时发现死锁 尝试重新启动事务 该应用程序中还有一些其他作业执行数据库操作 我的问题是找出其他脚本中的哪些并发查询会干扰
  • 如何使用 Apache SOLR 和 PHP 代码突出显示搜索结果

    我使用 SOLR 和 Tomcat servlet 容器开发了搜索页面 使用 PHP 代码 我将搜索查询发布到 solrQuery 函数中 并在此函数中定义了查询参数 如下所示 query q trim urlencode q versio
  • CUDA:如何在设备上填充动态大小的向量并将其内容返回到另一个设备函数?

    我想知道哪种技术可以填充设备上的动态大小数组 int row 在下面的代码中 然后返回其内容 以供另一个设备函数使用 为了将问题置于上下文中 下面的代码尝试使用在 GPU 上运行的高斯 勒让德求积来跨越勒让德多项式基组中的任意函数 incl
  • 如何从 vbs 脚本发送电子邮件

    如何从 vbs 脚本发送电子邮件 在无法连接到互联网的计算机上 位于我的非互联网区域 我通过谷歌搜索将以下内容整合在一起 但似乎需要调用微软的服务器 如果我无法访问 microsoft com 该怎么办 sch http schemas m
  • 如何在发送PHP邮件时隐藏服务器信息?

    我有这样的事情 to subject msg from From me lt email protected cdn cgi l email protection gt mail to subject msg from 当我发送电子邮件时
  • 函数模板显式特化声明中尾随模板参数的推导(无函数参数推导)

    这个问题是评论中讨论的分支变量模板的模板特化和类型推导 https stackoverflow com questions 61384251 template specialization of variable template and
  • 找到实际的 RTMP 流 URL?

    让我举个例子 这是视频嵌入代码 div Loading the player div
  • Swift 4:Firebase 时间戳

    我应该如何将 Firebase 时间戳与本地设备时间进行比较 let serverTIme FIRServerValue timestamp let localtime Date let dbRef FirebaseServerRefere
  • TypeScript 中的 WebView 扩展

    在代码示例 catcoding 中 支持 webview 逻辑被编写为 JavaScript 中的匿名函数 但我想在 Typescript 中构建此支持逻辑 我厌倦了用 requireJS 将这个逻辑重现为打字稿包 但我无法让它工作 Thi
  • 在 C# 中使用 CreateRemoteThread 传递多个参数

    我的目标是使用 C 中的 P Invoke CreateRemoteThread 调用远程进程中的函数 问题是该函数需要多个参数 有没有办法将多个参数传递给函数 DllImport kernel32 dll SetLastError tru
  • 编译时常量 id

    鉴于以下情况 template
  • 如何限制“v-for”中元素的迭代

    我正在构建一个小型应用程序Vuejs 2 0我有大约 15 个迭代元素 我想限制v for仅 5 个元素 并且可以有更多按钮来显示整个列表 有没有可能 你可以试试这个代码 div div div div div div div div
  • sort 如何计算出有多少 RAM?

    If I do ulimit v 200000 和跑步 sort largefile 我可以看到从top该类型最多使用 142232 Virt 和 92764 Res 但一段时间后会减少更多 sort 如何知道 ulimit 限制设置为多少
  • 将位图加载到 PictureBox 控件

    由于某种原因 这不起作用 我不知道为什么 objBitmap new Bitmap Resource1 im Stream stream objBitmap Save stream ImageFormat Bmp this pictureB
  • Nodejs:返回异步结果的结果

    我正在尝试在 Node js 中编写一个 RESTful API 它基本上围绕控制器 模型模式 并且我遇到了一些关于 Node js 异步性质的问题 Station js 控制器 use strict var url require url
  • 如何使用 Express 框架发出 AJAX 请求?

    我想使用 Express 发送 AJAX 请求 我正在运行如下所示的代码 var express require express var app express app get function req res here I would l
  • 如何实时返回鼠标坐标?

    我是 PyQt 的新手 我正在尝试使用它来创建一个实时返回鼠标位置的小部件 这是我所拥有的 import sys from PyQt5 QtWidgets import QWidget QToolTip QPushButton QAppli
  • scrollIntoView() 在 Chrome 中的多个元素上使用 smooth 函数

    element scrollIntoView行为设置为smooth在 Chrome 中没有像我预期的那样工作 当它仅用于调用堆栈中的一个元素时 它可以正常工作 但如果它用于多个元素 则只有最后一个元素会实际滚动 这在 Firefox 中运行