通过节流函数实现记录视频播放的位置

该代码示例展示了如何利用lodash.js的_.throttle函数限制视频播放的ontimeupdate事件处理函数的触发频率,每秒记录一次播放时间并存储在本地。当页面加载时,视频从本地存储的上次播放时间点继续播放,有效控制了事件触发并优化了存储效率。
摘要由CSDN通过智能技术生成

使用了 lodash.js 的 _.throttle 函数来实现节流。在这段代码中,_.throttle 函数用于包装视频播放的 ontimeupdate 事件处理函数,以确保事件处理函数每隔一定时间只会被触发一次。

具体的实现逻辑是,当视频的播放时间更新时,_.throttle 函数会限制事件处理函数的触发频率,这里设置为每秒触发一次。在事件处理函数中,获取当前视频的播放时间 currentTime,然后将其存储在本地存储中,使用 localStorage.setItem 方法将播放时间保存为键为 "videoTime" 的值。

另外,当页面加载完毕后,使用 video.onloadeddata 事件处理函数来恢复视频的播放位置。它会从本地存储中获取之前保存的播放时间,然后将其赋值给视频的 currentTime 属性,使视频从上次播放的位置开始播放。

这样,通过节流函数的应用,可以有效地控制视频播放事件的触发频率,避免过于频繁地更新和存储播放时间。

        //使用lodash.js实现节流
        const video = document.querySelector('video');
        //节流每个一秒记录播放的位置
        video.ontimeupdate = _.throttle(() => {
            //获取视频的播放时间
            const currentTime = video.currentTime
            //存储视频播放时间
            localStorage.setItem('videoTime', currentTime)
        }, 1000)

        //打开页面将触发事件,将时间节点赋值给视频
        video.onloadeddata = () => {
            video.currentTime = localStorage.getItem('videoTime') || 0
        }

实现input的节流函数,可以使用定时器或时间戳两种方式。下面是两种实现方式的代码示例: 定时器实现方式: ```javascript // 定时器实现节流函数 function throttle(fn, delay) { let timer = null; let flag = true; return function (...args) { if (!flag) return; clearTimeout(timer); flag = false; timer = setTimeout(() => { fn.apply(this, args); flag = true; }, delay); }; } // 监听input事件并应用节流函数 let inputElement = document.getElementById('input'); let fn = throttle(function(e) { console.log('节流成功', e.target.value); }, 2000); inputElement.addEventListener('input', fn); ``` 时间戳实现方式: ```javascript // 时间戳实现节流函数 function throttle(fn, delay) { let previous = 0; return function (...args) { let now = Date.now(); if (now - previous > delay) { fn.apply(this, args); previous = now; } }; } // 监听input事件并应用节流函数 let inputElement = document.getElementById('input'); let fn = throttle(function(e) { console.log('节流成功', e.target.value); }, 2000); inputElement.addEventListener('input', fn); ``` 这两种方式都可以实现input的节流函数,通过设置合适的延迟时间,可以控制函数的执行频率,避免频繁调用查询接口。 #### 引用[.reference_title] - *1* *3* [JS写定时器节流函数 配合Oninput事件](https://blog.csdn.net/qq_45619623/article/details/111622828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JS节流函数实现](https://blog.csdn.net/weixin_45309872/article/details/111562303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hz没头脑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值