惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
J
Java Code Geeks
月光博客
月光博客
博客园_首页
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
B
Blog RSS Feed
博客园 - 聂微东
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
Jina AI
Jina AI
S
SegmentFault 最新的问题
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
量子位
Martin Fowler
Martin Fowler
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
JS PageSwap PageReveal事件干嘛用的? « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2025-06-04 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=11717
本文可全文转载,但需要保留原作者、出处以及文中链接,AI抓取保留原文地址,任何网站均可摘要聚合,商用请联系授权。

JS PageSwap PageReveal事件封面图

一、总算有点眉目了

PageSwapEvent事件是一个新支持的全局事件,其兼容性如下:

PageSwapEvent事件

目前Safari和Chrome均支持此事件类型。

乍一看,这个事件与页面选项卡切换相关,对吧,Swap就是交换的意思,但是,如果你在页面中写下类似这样的测试代码,是看不到任何效果的。

window.addEventListener("pageswap", (event) => {
  console.log(event);
});

怎么回事,难道这个事件不是这样执行的?对,没错,不是这样执行的。

这个事件必须与页面级可视动画View Transitions API一同使用才有效果。

不知大家阅读过之前这篇热文没有:“页面级可视动画View Transitions API初体验

其中展示了一个案例,就是页面A调整到页面B(直接刷新的那种跳转),也是可以有transition过渡效果的。

这里有演示页面,您可以狠狠地点击这里:传统跳转页面变得单页一样滑来滑去demo

页面滑来滑去示意

而JS PageSwapEvent事件就是为了这个交互场景而设计的。

二、PageSwap事件语法与作用

如果我们的Web页面设置了页面级别的view-transition,包含下面这段CSS代码:

@view-transition {
  navigation: auto;
}

那么当页面准备卸载(unload)的时候,pageswap实践就会触发。

如果仅仅是普通的页面跳转,是不会有事件触发的。

我们可以对比下效果,比方说这个测试页面:纯粹的页面刷新跳转demo

页面中设置了pageswap事件代码:

window.addEventListener("pageswap", (event) => {
  console.log(event);
});

但是,我们点击链接跳转的时候,只有导航提示,并没有任何console输出,如下截图所示:

普通跳转控制台提示

但是,如果是上面的滑来滑去demo,我们可以在控制台看到PageSwapEvent对象的输出(需要开启Preserve log选项),如下图所示:

pageSwap对象输出截图示意

所以,PageSwapEvent事件是伴随View Transitions API一同出现的事物。

语法

PageSwapEvent对象支持两个只读属性,分别是:

activation
包含一个NavigationActivation对象,该对象包含同一源导航的导航类型以及当前和目标文档历史条目。如果导航在重定向链中的任何位置都有跨源URL,则返回null
viewTransition
返回表示入站跨文档视图转换的ViewTransition对象(如果事件触发时有一个处于活动状态)。若非如此,则返回null。

至于返回对象的细节,这里不深入。

三、PageReveal事件表示进入

pageswap表示当前页面离开,那么进入则是PageReveal事件。

window.addEventListener("pagereveal", (event) => {
  console.log(event);
});

pagereveal对象展示

不过语法上有所区别,仅支持viewTransition这个只读属性:

viewTransition
包含一个ViewTransition对象,表示跨文档导航的活动视图转换。

其他就没什么好讲的了。

三、好了,了解这么多足够了

一方面受制于兼容性,另一方面受制于PageSwapEvent事件的小众应用场景,再一方面受制于前端行业进入稳定期,再再一方面由于AI的出现,注定PageSwap事件是个很少有人会真正在生产环境使用的特性。

冷门知识,小众特性,虽然有设计价值,但注定无人问津。

大家了解下有这么个东西就好了。

其他就没什么好说的了,感谢大家的阅读,我们下一篇文章再见。

😉😊😇
🥰😍😘

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:https://www.zhangxinxu.com/wordpress/?p=11717

(本篇完)