当前位置: 首页 > news >正文

uniapp nvue开发App 横竖屏切换丢失上下文导致 setTimeout和clearTimeout报错

报错内容如下

[JS Framework] Failed to find taskCenter (35).
[JS Framework] Failed to execute the callback function:TypeError: c.clearTimeout is not a function
reportJSException >>>> exception function:__WEEX_CALL_JAVASCRIPT__, exception:JavaScript execute error!Uncaught TypeError: c.clearTimeout is not a function

报错代码如下

<script setup lang="ts">
const videoHeight = ref(0);
const videoWidth = ref(0);
onLoad(() => {plus.screen.lockOrientation('landscape-primary');
});
function handleWindowResize(res) {videoWidth.value = res.size.windowWidth;videoHeight.value = res.size.windowHeight;
}
onMounted(() => {uni.onWindowResize(debounce(handleWindowResize, 200))
})
onBeforeUnmount(() => {uni.offWindowResize(handleWindowResize)
})// debounce函数定义
function debounce(fn: Function, wait: number) {let timer: any;return function () {timer && clearTimeout(timer);timer = setTimeout(() => {timer = false;fn.apply(this, arguments); // 把参数传进去}, wait);};
}
</script>

进入页面,切换横屏获取宽高设置video组件占满全屏,监听横竖屏切换防抖避免多次重复赋值。从开发流程上没啥问题onWindowResize和offWindowResize就是用来解决这个问题的。搜了一些帖子也没搜到相关答案,本想着实在不行就把防抖取消掉也不是不能用。今天有空翻了下官方文档看到一个没用过的 生命周期 onResize 觉得也可以解决此问题就试了一下。

改后的代码如下

<script setup lang="ts">
import { onResize } from '@dcloudio/uni-app'
const videoHeight = ref(0);
const videoWidth = ref(0);
onLoad(() => {plus.screen.lockOrientation('landscape-primary');
});
function handleWindowResize(res) {videoWidth.value = res.size.windowWidth;videoHeight.value = res.size.windowHeight;
}
onResize(debounce(handleWindowResize, 200))// debounce函数定义
function debounce(fn: Function, wait: number) {let timer: any;return function () {timer && clearTimeout(timer);timer = setTimeout(() => {timer = false;fn.apply(this, arguments); // 把参数传进去}, wait);};
}
</script>

弃用onWindowResize和offWindowResize改用生命周期,不仅更加简单方便而且解决了我的问题

http://www.lryc.cn/news/598237.html

相关文章:

  • 全面解析 CSS Flex 布局:从入门到精通的所有属性详解
  • 深入掌握CSS Grid布局:每个属性详解与实战示例
  • k8s通过NUMA亲和分配GPU和VF接口
  • DeepSeek-R1+豆包迭代一次完成中国象棋游戏
  • 二、计算机网络技术——第6章:应用层
  • rk3588开发板使用硬件编码处理视频
  • 国产数据库拐点已至:电科金仓用“融合+AI”重新定义下一代数据底座
  • C++ 23种设计模式-工厂模式
  • (实用攻略)Linux操作系统(一)
  • 输电线路微气象在线监测装置:保障电网安全的科技屏障
  • 【基础】go基础学习笔记
  • 进阶向:基于Python的本地文件内容搜索工具
  • SpringCloud【Sentinel】
  • 【C++】类和对象(1)
  • CDH yarn 重启后RM两个备
  • Compose 适配 - 键鼠模式
  • 图像认知与OpenCV——图像预处理2
  • 到底可不可以用jion?jion如何优化?
  • 【学习】数字化车间与智能工厂如何推进制造业转型
  • MIT线性代数02_矩阵消元
  • 云祺容灾备份系统AWS S3对象存储备份与恢复实操手册
  • 电商项目_秒杀_架构升级
  • 4G手机控车模块的核心功能与应用价值
  • 告别束缚:这款“隐形心电监测仪”让心脏健康管理更自由
  • Oracle 时间处理函数和操作符笔记
  • Python-初学openCV——图像预处理(二)
  • 服务器带宽具体是指什么意思?
  • 硅基计划3.0 学习总结 贰 顺序表与链表
  • 图论:搜索问题
  • 深度分析Android多线程编程