关于statisticsPage.js文件 todo onShow.call(this)
参考:
https://juejin.cn/post/6844903645180329991
https://www.cnblogs.com/wangacan/p/15029251.html
有点类似iOS开发的runtime, 给所有页面的viewDidLoad添加一个统一的逻辑
statisticsPage.js文件的核心代码:
const util = require('util.js')
const statisticsPage = Page
const statistics = require('statistics.js')
var appFirst = true
// isNeedStatis: true
// currSpm: ""
Page = function (config) {
const { onShow} = config
config.onShow = function () {
this.statisEnter = parseInt((Date.parse(new Date()) - getApp().globalData.cValue)/1000)
console.log("收拾收拾statisEnter:"+this.statisEnter)
setTimeout(() => {
this.getPageHeight()
}, 2000);
if (typeof onShow === 'function') {
onShow.call(this)
}
}
// 获取页面可滑动高度
config.getPageHeight = function() {
wx.createSelectorQuery().select('.root').boundingClientRect().exec((res) => {
console.log(res)
if (res[0]) {
this.statisPageHeight = res[0].height - wx.getSystemInfoSync().windowHeight
} else {
this.statisPageHeight = 0
}
})
}
return statisticsPage(config)
}
export default statisticsPage
这个文件需要在app.js的第一行引入:
import Page from 'utils/statisticsPage.js'
statisticsPage的作用就是给每个页面的生命周期函数添加一些统一的逻辑,我们这里是用来做埋点,统计页面进入,离开的时间,处理场景值(推广渠道)
statisticsPage的实现思路是什么?
将原有的page函数保存到statisticsPage变量中
重写Page函数里面的onShow函数,增加获取页面高度的逻辑
最后再返回statisticsPage
onShow.call(this)
这一行还不太明白
下面是chatGpt的注释
// 引入相关文件
const util = require('util.js')
const statisticsPage = Page
const statistics = require('statistics.js')
// 定义一个变量,表示应用程序是否是首次启动
var appFirst = true
// 重写 Page 函数
Page = function (config) {
// 从 config 中获取 onShow 函数
const { onShow} = config
// 在 onShow 函数中添加一个计算页面停留时间和获取页面高度的逻辑
config.onShow = function () {
// 计算页面停留时间
this.statisEnter = parseInt((Date.parse(new Date()) - getApp().globalData.cValue)/1000)
console.log("收拾收拾statisEnter:"+this.statisEnter)
// 延迟2秒后,调用 getPageHeight 方法获取页面高度
setTimeout(() => {
this.getPageHeight()
}, 2000);
// 执行原有的 onShow 函数
if (typeof onShow === 'function') {
onShow.call(this)
}
}
// 定义一个方法,用于获取页面可滑动高度
config.getPageHeight = function() {
// 创建一个选择器,获取 .root 元素的 boundingClientRect 信息
wx.createSelectorQuery().select('.root').boundingClientRect().exec((res) => {
console.log(res)
// 如果成功获取到 .root 元素的信息,则计算可滑动高度
if (res[0]) {
this.statisPageHeight = res[0].height - wx.getSystemInfoSync().windowHeight
} else {
// 如果未成功获取到 .root 元素的信息,则可滑动高度为 0
this.statisPageHeight = 0
}
})
}
// 返回重写后的 config 对象
return statisticsPage(config)
}
// 导出重写后的 Page 函数
export default statisticsPage
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-05-14 有感触的文字
2019-05-14 UIScrollView setContentOffset: animated:YES 偶尔卡顿解决方案