Vue切换回页面可见状态后,避免执行多次滚动定位的动画

目录

一. 问题场景描述

二. 问题解决方案

三. 相关知识点

四. 注意点

五. 相关代码实现


一. 问题场景描述

        vue里的一个页面组件涉及到音频文件的自动播放,并且在自动播放时要自动滚动聚焦定位到对应的语音文本列表项,那么当用户点击了自动播放后,点击浏览器的其它标签页页面 或者 打开了电脑的其它软件完全遮盖住了 该页面,那么过了一段时间,再重新查看浏览器的该页面时,该页面里累积的自动滚动聚焦定位动画会连续执行,一直到积攒的未执行的自动滚动聚焦定位动画全部执行完后才会停止,而页面看起来就是连续快速定位多次,会严重影响到用户体验。

二. 问题解决方案

        通过监听window对象的visibilitychange事件来知道当前页面的可见性,当页面不可见时保存最后一次应该去滚动定位的锚点,当页面切换回可见状态时,检查是否存在需要去滚动定位的锚点,如果有,则执行一次滚动定位 并清空 保存的 应该去执行滚动定位的锚点。

三. 相关知识点

        window对象的visibilitychange事件 可以在 支持W3C规范的现代浏览器上使用,是当页面的可见性状态发生更改时触发的事件,该事件可用于监测页面是否处于活动状态或隐藏状态。

四. 注意点

        当页面刚加载时,e.target.visibilityState的值会是"hidden" 而不是 "visible",因为visibilitychange事件是在页面可见性状态发生改变时触发的,而当页面刚加载完成时,默认情况下页面处于隐藏状态,因此事件会被触发,而e.target.visibilityState的值会被设置为"hidden",而非预期的"visible",因此需要针对这个特殊情况进行特殊处理。

五. 相关代码实现

<script>import VueScrollTo from "vue-scrollto";const scrolConfig = {container: "#scroll-area", // 滚动的容器。duration: 500, // 滚动时间。easing: "ease", // 缓动类型。 // ease。offset: -50, // 滚动时应应用的偏移量。此选项接受回调函数。force: false, // 是否应执行滚动。 // 默认为true,改成false可以改善一下抖动问题。cancelable: true, // 用户是否可以取消滚动。onStart: false, // 滚动开始时的钩子函数。onDone: false, // 滚动结束时候的钩子函数。onCancel: false, // 用户取消滚动的钩子函数。x: false, // 是否要在x轴上也滚动。y: true // 是否要在y轴上滚动。};export default {data() {return {pageVisible: false, // 页面是否可见。isNotFirst:false,   // 是否 非首次查看此页面。lastAnchorId:'',    // 页面不可见期间,应定位的最后一个锚点。};},created() {let that = this;window.addEventListener('visibilitychange',that.visibleChange);this.$once('hook:beforeDestroy',()=>{window.removeEventListener('visibilitychange',that.visibleChange);})},methods: {async scrollTo(anchorId = "") {if(this.pageVisible){this.$nextTick(()=>{VueScrollTo.scrollTo("#" + anchorId, 500, scrolConfig);})}else{if(this.isNotFirst){this.lastAnchorId = "#" + anchorId;}else{this.$nextTick(()=>{VueScrollTo.scrollTo("#" + anchorId, 500, scrolConfig);})}}},visibleChange:function(e){if(e.target.visibilityState === "visible"){this.pageVisible = true;if(this.lastAnchorId){let anchorId = this.lastAnchorId;this.lastAnchorId = '';this.$nextTick(()=>{VueScrollTo.scrollTo(anchorId, 500, scrolConfig);})}}else if(e.target.visibilityState === "hidden"){if(!this.pageVisible){this.isNotFirst = true; // 如果this.pageVisible前一次值就是false,那么再次为false表示页面可见性改变为真的不可见了,那么再次进入此页面就视为不是第一次打开页面。}this.pageVisible = false;}}},};<script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行业追踪,2023-10-20

自动复盘 2023-10-20 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

记一次EDU证书站

如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏一键三连支持以下哦&#xff01; 想要一起交流学习的小伙伴可以加zkaq222&#xff08;备注CSDN&#xff0c;不备注通不过哦&#xff09;进入学习&#xff0c;共同学习进步 目录 目录 1.前言&#xff1a; 2.信息搜集 3.漏…

代码随想录算法训练营第五十六天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和

代码随想录算法训练营第五十六天|1143.最长公共子序列、1035.不相交的线、53. 最大子序和 1143.最长公共子序列1035.不相交的线53. 最大子序和 做了一个小时左右 1143.最长公共子序列 题目链接&#xff1a;1143.最长公共子序列 文章链接 状态&#xff1a;会做 代码 class Solu…

MAC 配置 Maven

Maven 是一个流行的 Java 项目管理和构建工具&#xff0c;它可以帮助我们管理项目依赖、构建和发布等过程。本文将指导您在 MAC 上配置 Maven 的详细步骤。 1、下载 Maven 首先&#xff0c;从 Maven 官方网站下载最新版本的 Maven 安装包。下载完成后&#xff0c;将其解压到您…

C++11——多线程

目录 一.thread类的简单介绍 二.线程函数参数 三.原子性操作库(atomic) 四.lock_guard与unique_lock 1.lock_guard 2.unique_lock 五.条件变量 一.thread类的简单介绍 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如windows和linu…

【Qt-19】按Q退出应用程序

如何将Qt窗口应用程序改成控制台程序呢&#xff1f; 下面进入正文&#xff0c;如何控制控制台程序退出呢&#xff1f; 这里采用线程方式&#xff0c;通过单独线程监视用户输入来执行是否退出程序。 监视线程头文件thread.h #include <QThread> #include "TDRServe…

API网关与社保模块

API网关与社保模块 理解zuul网关的作用完成zuul网关的搭建 实现社保模块的代码开发 zuul网关 在学习完前面的知识后&#xff0c;微服务架构已经初具雏形。但还有一些问题&#xff1a;不同的微服务一般会有不同的网 络地址&#xff0c;客户端在访问这些微服务时必须记住几十甚至…

API 排行榜,盘点用的最多的 API 协议!

每个人都用过 HTTP 协议。在网页端&#xff0c;在 App 端&#xff0c;大部分的数据交换都基于 HTTP 协议&#xff0c;但你也许会听过其他的一些协议。 从 《2023 全球 API 状况报告》 里的数据&#xff0c;我们能看到全球的开发者使用最多的 API 协议&#xff1a; 这些协议有什…

使用poco出现Cannot find any visible node by query UIObjectProxy of “xxx“怎么办

在编写脚本的时候&#xff0c;使用poco的控件识别已经是大家非常喜欢的一种方式&#xff0c;准确度很高&#xff0c;而且也很容上手。 但是有时候会出现下面这种报错&#xff0c;提示 Cannot find any visible node by query UIObjectProxy of “xxx“这个时候是不是开始着急…

前端 js 之 浏览器工作原理 和 v8引擎 01

嘿&#xff0c;老哥&#xff0c;来了就别跑 &#xff01;学完 &#xff0c;不亏 &#x1f602; 文章目录 一、输入url 之后做了什么二、简单了解下浏览器内核三、浏览器渲染过程 &#xff08;渲染引擎&#xff09;四、js 引擎五、chrome五、v8 引擎原理八、浏览器性能优化九、前…

计算机算法分析与设计(13)---贪心算法(多机调度问题)

文章目录 一、问题概述1.1 思路分析1.2 实例分析 二、代码编写 一、问题概述 1.1 思路分析 1. 设有 n n n 个独立的作业 1 , 2 , … , n {1, 2, …, n} 1,2,…,n&#xff0c;由 m m m 台相同的机器 M 1 , M 2 , … , M m {M_1, M_2, …, M_m} M1​,M2​,…,Mm​ 进行加工处…

Qemu镜像安全加密测试

文章目录 简介1.已经过时的qemu自带的加密方式介绍1.1.创建secret uuid的xml1.2.产生uuid1.3.给secret赋值1.4.创建一个存储池1.5.在存储池中创建一个镜像1.6.在虚拟机中使用该镜像 2.弃用以上加密方式2.1.原作者Daniel Berrange的观点2.2.Markus Armbruster更深入的操作 3. LU…

vue实现在页面拖拽放大缩小div并显示鼠标在div的坐标

1、功能要求&#xff1a; 实现在一个指定区域拖拽div,并可以放大缩小&#xff0c;同时显示鼠标在该div里的坐标&#xff0c;如图可示 缩小并拖动 2、实现 <div class"div_content" ref"div_content"><div class"div_image" id"…

【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+分布式构建)

CI/CD是持续集成&#xff0c;持续部署&#xff0c;集成就是开发人员通过自动化编译&#xff0c;发布&#xff0c;测试的手段集成软件&#xff0c;在开发的测试环境上测试发现自己的错误&#xff1b;持续部署是自动化构建&#xff0c;部署&#xff0c;通常也是在测试环境上进行&…

014 - ARM64上的GIC-400(GICv2)

本章节涉及到的参考文档有三个&#xff1a; BCM2711 ARM Peripherals.pdfARM Generic Interrupt Controller Architecture Specification.pdf (简称gic_v2)CoreLink GIC-400 Generic Interrupt Controller Technical Reference Manual.pdf 1. GIC 发展历史 在早期的 ARM 系统…

深度学习技巧应用29-软件设计模式与神经网络巧妙结合,如何快速记忆软件设计模式

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下软件设计模式与神经网络巧妙结合&#xff0c;如何快速记忆软件设计模式。我们知道软件设计模式有23种&#xff0c;考试的时候经常会考到&#xff0c;但是这么种里面我们如何取判断它呢&#xff0c;如何去记忆它呢&a…

双指针——盛水最多的容器

一, 题目要求 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…

Jmeter接口自动化测试 —— Jmeter下载安装及入门

jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 下载 下载地址&#xff1a;Apache JMeter - Download Apache JMeter 安装 由于Jmeter是基于Java的…

Linux查看日志文件的常用命令

1、查看文件最后1000行内容 tail -n 1000 filename 2、实时查看文件最后1000行内容&#xff0c;动态刷新 tailf -n 1000 filename tail -f -n 1000 filename 3、按照关键字搜索日志 cat filename | grep 关键字 4、按照关键字搜索并包含前(后)多少行 【&#xff08;A前B后C前…

【数据结构】——数据结构概论简答题模板

目录 前言一、数据结构的概念二、数据对象三、数据类型和抽象数据类型四、逻辑结构五、存储结构&#xff08;物理结构&#xff09;六、算法的概念 前言 本系列文章的主要选题来自于重点常考的《数据结构》、《数据结构与算法》等科目的简答题&#xff0c;对其进行一定的整理&am…