操作滚动条小结:scrollIntoView/animate等方法的来龙去脉
操作滚动条可以通过锚点跳转,JS操作滚动条,与scrollIntoView等方法。对此,我来考古一下。
锚点跳转滚动滚动条
网页中的锚点跳转是HTML早期功能之一,锚点(anchor)跳转是1991年发布的HTML标准的一部分,这是超文本链接的基本特性。
锚点跳转通过使用<a>标签的href属性来创建指向页面内部某个ID或名称(使用id或name属性标记的)的链接来实现。
<!-- 目标位置 -->
<div id="section1">This is Section 1</div>
**************长内容********************
<!-- 页内跳转链接,条件跳转到 Section 1-->
<a href="#section1">Jump to Section 1</a>
即使是最早的Web浏览器,如NCSA Mosaic,也支持页面内通过锚点进行跳转!
关于浏览器历史,参看:《浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战》
浏览器始祖NCSA Mosaic在1993年1月发布(于1992年末由国家超级计算机应用中心—National Center for Supercomputing Applications开发)。Mosaic可以同时展示文字和图片,从此浏览器变得有趣多了。 在当时人气爆发的大受欢迎。Mosaic的出现,算是点燃了后期互联网热潮的火种之一。NCSA将Mosaic的商业运营权转售给了Spyglass公司,该公司又向包括微软公司在内的多家公司技术授权,允许其在 Mosaic的基础上开发自己的产品
1994年10月13日,网景通信公司推出发布了Mosaic Netscape 0.9
1994年开始,网景通信公司推出了代号为Netscape Navigator 1.0(网景导航者、网景浏览器),随后迭代版本迅速占领浏览器大部分份额。Netscape自称“Mozilla/1.0(Win3.1)”,一说 Mozilla = Mosaic + Killer,意为Mosaic杀手,也有说法是 Mozilla = Mosaic & Godzilla,意为马赛克和哥斯拉,而Mozilla最初的吉祥物是只绿色大蜥蜴,后来更改为红色暴龙,跟哥斯拉长得一样。
1995年起搭载cookie、框架和JavaScript等多样独自功能的2.0版上市。从前前端码农开始可以大踏步干活了,与通宵达旦干兼容血战到底。网景支持框架(frame),但是Mosaic不支持框架,于是网站管理员探测user agent,对Mozilla浏览器发送含有框架的页面,对非Mozilla浏览器发送没有框架的页面。
关于JavaScript,参看:《ECMAScript进化史(1):话说Web脚本语言王者JavaScript的加冕历史》与《JS引擎(0):JavaScript引擎群雄演义—起底JavaScript引擎》
1995年Sun公司将Oak语言改名为Java,正式向市场推出(次年,LiveScript改名为JavaScript)。
Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。
网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。
1995年4月,网景公司录用34岁Brendan Eich( JavaScript 之父 闪亮登场)。
Brendan Eich被指定为这种"简化版Java语言"的设计师。但是,他对Java一点兴趣也没有。为了完成(应付)公司安排的任务,他只用10天时间就把JavaScript设计出来了。虽然语言的设计者水平非常NB,但谁也架不住“时间紧,任务重”。由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果不是公司的决策,Brendan Eich绝不可能把Java作为Javascript设计的原型。作为设计者,他都不喜欢这个作品!
1995年浏览器有JavaScript 功能,可以通过JavaScript 手动更爱hash进行跳转
window.location.hash="section1"
JavaScript操作滚动条,还是不尽人意
操作滚动条滚动
1997年,JavaScript由ECMA International采纳为标准(ECMAScript),从而确保了不同浏览器之间的一致性和兼容性。
scroll和scrollTo在现代浏览器中都支持的
// 使用scrollTo滚动页面到指定位置(100px, 100px)
window.scrollTo(100, 100); // 使用scroll执行相同的操作
window.scroll(100, 100);
允许你指定滚动行为(如是否平滑滚动):
// 使用对象参数带有平滑滚动
window.scrollTo({ top: 100, left: 100, behavior: 'smooth' }); // 使用scroll实现同样的滚动效果
window.scroll({ top: 100, left: 100, behavior: 'smooth' });
但是要滚动锚点位置,需要计算滚动的位置,如果是嵌套套娃,就非常复杂——可以复习下:《再谈BOM和DOM(6):dom对象及event对象位值计算—如offsetX/Top,clentX》
这个方法,我劝读者放弃!
scrollIntoView滚动到指定为止
2000年,DOM2规范 带来了scrollIntoView API,但是微软从屠龙少年变恶龙后,就奔对新规范置之不理了!——这个API目前除了IE,可以放心用!
document.getElementById("section1").scrollIntoView();
// 或者
document.querySelector("#section1").scrollIntoView(true);
更加精细化控制:
element.scrollIntoView({ behavior: "smooth", block: "end", inline: "nearest" });
具体查看:https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
animate大法
是否还记得jquery时代的(2006年8月发布的jquery1.0 版本就推出了animate)
$("#button").click(function() {
$("html, body").animate({
scrollTop: $("#section1").offset().top }, {duration: 500,easing: "swing"});
return false;
});
animate()方法使得很容易对CSS属性实施动画效果,并且随着jQuery库的普及,animate()方法也迅速成为一个广为人知的标准做法。
1999年,CSS 3的草稿开始制定
2001年5月23日W3C完成了CSS3的工作草案,主要包括盒子模型、列表模块、超链接方式、语言模块、背景和边框、文字特效、多栏布局等模块
2005 年 12 月,W3C 开始 CSS3 标准的制定。css是有一系列的标准组成。每个系列完成的时间不一样。所以css3是不断的演进的,直到现在。
CSS逐步普及,但是精确控制css3的动画,还是非常麻烦。
《复杂web动画,不慌,选择 web Animations API 》,比如直播的世界消息或者弹幕:
我们需要消息先运动到屏幕中间,消息最少需要在停留2秒,如果消息过长,消息还需要
匀速滚动,之后再滑出屏幕。
滑入
暂停,如果消息过长,消息还需要匀速滚动
滑出
难点就在于,暂停阶段,消息滚动的时间并不是确定的,需要计算。 这个时候,纯CSS3的动画,难度就有些高了,采用 Web Animations API,天然的和JS亲和,那就简单多了。
2013年,W3C 提出 Web Animation API(简称 WAAPI)工作草案,但是知道如今(截止2024年1月)还是草案状态(十年磨一剑——CSS3又何尝不是如此!)。但是目前chrome基本都支持!
具体可以MDN例子:https://developer.mozilla.org/zh-CN/docs/Web/API/Element/animate
这里不在赘述,但是只是为了滚动条滚动,用这个api 是大材小用哈!
转载本站文章《操作滚动条小结:scrollIntoView/animate等方法的来龙去脉》,
请注明出处:https://www.zhoulujun.cn/html/webfront/SGML/htmlBase/2022_1223_9017.html
操作滚动条小结:scrollIntoView/animate等方法的来龙去脉的更多相关文章
- webdriver-js操作滚动条
webdriver-js操作滚动条 1. webdriver高级应用-js操作滚动条 1.滑动页面的滚动条到页面最下面 2.滑动页面的滚动条到页面的某个元素 3.滑动页面的滚动条向下移动某个 ...
- selenium操作滚动条的几种方式
1.操作滚动条到当前可见视图的元素位置 WebElement element = dr.findElement(By.id("4")); ((JavascriptExecutor) ...
- java使用dom4j和XPath解析XML与.net 操作XML小结
最近研究java的dom4j包,使用 dom4j包来操作了xml 文件 包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), ...
- selenium——操作滚动条
在自动化测试的过程中,难免会应用到翻页键,但是webdriver提供的方法都是操作当前页面可见的元素,对于未在当前范围展示的翻页键,该如何操作呢? 小编在这里介绍一种方法:使用JavaScript操作 ...
- jQuery---jq操作标签文本(html(),text()),jq操作文档标签(插入,删除,修改),克隆,,jq操作属性,jq操作class属性,jq操作表单value,jq操作css,jq操作盒子(重要),jq操作滚动条
jQuery---jq操作标签文本(html(),text()),jq操作文档标签(插入,删除,修改),克隆,,jq操作属性,jq操作class属性,jq操作表单value,jq操作css,jq操作盒 ...
- jQuery操作Table tr td常用的方法
虽然现在DIV+CSS进行页的布局大行其道,但是很多地方使用table还是有很多优势,用table展示数据是比较方便的,下面汇总了jQuery操作Table tr td常用的方法,熟记这些操作技巧,下 ...
- 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句
如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...
- 编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]
前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理解的东西,有些地方可能理解的不太到位,还望指正. 建议1. ...
- sqlite:多线程操作数据库“database is locked”解决方法(二)
上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...
- JS前端开发判断是否是手机端并跳转操作(小结)
JS前端开发判断是否是手机端并跳转操作(小结) 这篇文章主要介绍了JS前端开发判断是否是手机端并跳转操作,非常不错,具有参考借鉴价值,需要的朋友可以参考下 常用跳转代码 ? 1 2 3 4 5 6 7 ...
随机推荐
- 面试题:MySQL事务的ACID如何实现?
大家好,我是[码老思],事务是一个数据库绕不开的话题,今天和大家一起聊聊. 事务是什么? 事务(Transaction)是并发控制的基本单位.所谓的事务呢,它是一个操作序列,这些操作要么都执行,要么都 ...
- http1.x,http2.0,https分别介绍以及他们的区别
一.HTTP/1.x Http1.x 缺陷:线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞 http1.0 缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要 ...
- JAVA架构师
https://github.com/zq99299/note-architect https://zq99299.github.io/note-architect/hc/ https://zq992 ...
- XML文件的解析--libxml库函数解释
[c语言]XML文件的解析--libxml库函数解释 2009-09-02 13:12 XML文件的解析--libxml库函数解释 libxml(一) ...
- 小景的Dba之路--压力测试和Oracle数据库缓存
小景最近在做系统查询接口的压测相关的工作,其中涉及到了查询接口的数据库缓存相关的内容,在这里做一个汇总和思维发散,顺便简单说下自己的心得: 针对系统的查询接口,首次压测执行的时候TPS较低,平均响应时 ...
- Android 11 后的应用数据和文件
Android应用数据的保存方式有四种,分别是应用专属存储空间.共享存储.偏好设置.数据库. 应用专属存储空间 应用专属存储空间:存放应用专属文件,主要包括两个空间,卸载后移除 内部存储空间:位于系统 ...
- xv6:labs2 syscall
lab2 1.lab2的内容总结:关于系统调用整个跟踪过程: 使用系统调用时,用户态会通过软中断(trap,陷阱)进入内核中,由trap识别中断来自系统调用,然后调用syscall函数, 跟踪过程: ...
- C# 字节数组、各进制字符串数据互转
前言 日常开发过程中,格式转换是必不可少的重要环节,经常是十进制转十六进制.十六进制转byte数组又转换回来来回转换,最然进制转换很基础同时 C# 也提供了很多直接方便进行格式转换的方法,但是封装一个 ...
- LIS和LCS算法分析
LIS(最长上升子序列) 常规的解法就是动态规划. mx[ j ]表示长度为j的上升子序列最小的值a[i]; dp[ i ]表示前i个数的最长上升子序列长度多少. 1 for(int i=1;i< ...
- 什么是革命性技术eBPF?为什么可观测性领域都得用它
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 如果有一种技术可以监控和采集任何应用信息,支持任何语言,并且应用完全无感知,零侵入,想想是不是很激动,那么这个技术是什么呢 ...