fix seek for items

This commit is contained in:
j 2025-01-30 08:53:25 +05:30
commit 5591739531
4 changed files with 24 additions and 13 deletions

View file

@ -8,6 +8,7 @@ VideoElement <f> VideoElement Object
loop <b|false> loop playback loop <b|false> loop playback
playbackRate <n|1> playback rate playbackRate <n|1> playback rate
position <n|0> start position position <n|0> start position
in <n|0> start offset
self <o> Shared private variable self <o> Shared private variable
([options[, self]]) -> <o:Element> VideoElement Object ([options[, self]]) -> <o:Element> VideoElement Object
loadedmetadata <!> loadedmetadata loadedmetadata <!> loadedmetadata
@ -38,6 +39,7 @@ window.VideoElement = function(options) {
muted: false, muted: false,
playbackRate: 1, playbackRate: 1,
position: 0, position: 0,
"in": 0,
volume: 1 volume: 1
} }
Object.assign(self.options, options); Object.assign(self.options, options);
@ -166,9 +168,10 @@ window.VideoElement = function(options) {
function getCurrentTime() { function getCurrentTime() {
var item = self.items[self.currentItem]; var item = self.items[self.currentItem];
return self.seeking || self.loading var currentTime = self.seeking || self.loading
? self.currentTime ? self.currentTime
: item ? item.position + self.video.currentTime - item['in'] : 0; : item ? item.position + self.video.currentTime - item['in'] - self.options["in"] : 0;
return currentTime
} }
function getset(key, value) { function getset(key, value) {
@ -508,6 +511,7 @@ window.VideoElement = function(options) {
} }
function setCurrentItemTime(currentTime) { function setCurrentItemTime(currentTime) {
currentTime += self.options["in"]
debug('Video', 'sCIT', currentTime, self.video.currentTime, debug('Video', 'sCIT', currentTime, self.video.currentTime,
'delta', currentTime - self.video.currentTime); 'delta', currentTime - self.video.currentTime);
isReady(self.video, function(video) { isReady(self.video, function(video) {

View file

@ -10,6 +10,7 @@ window.VideoPlayer = function(options) {
loop: false, loop: false,
muted: false, muted: false,
playbackRate: 1, playbackRate: 1,
"in": 0,
position: 0, position: 0,
volume: 1 volume: 1
} }

View file

@ -67,6 +67,7 @@ function parseURL() {
id = id.replace('/editor/', '/').replace('/player/', '/') id = id.replace('/editor/', '/').replace('/player/', '/')
type = "item" type = "item"
} }
//console.log(type, id, args)
return [type, id, args] return [type, id, args]
} }

View file

@ -75,7 +75,8 @@ function renderItem(data) {
var video = window.video = VideoPlayer({ var video = window.video = VideoPlayer({
items: data.videos, items: data.videos,
poster: data.poster, poster: data.poster,
position: data["in"] || 0, "in": data["in"] || 0,
position: 0,
duration: data.duration, duration: data.duration,
aspectratio: data.aspectratio aspectratio: data.aspectratio
}) })
@ -85,16 +86,10 @@ function renderItem(data) {
video.addEventListener("loadedmetadata", event => { video.addEventListener("loadedmetadata", event => {
// //
}) })
video.addEventListener("timeupdate", event => {
var currentTime = video.currentTime() function updateAnnotations(currentTime) {
if (currentTime >= data['out']) {
if (!video.paused) {
video.pause()
}
video.currentTime(data['in'])
}
div.querySelectorAll('.annotation').forEach(annot => { div.querySelectorAll('.annotation').forEach(annot => {
var now = currentTime var now = currentTime + (data["in"] || 0)
var start = parseFloat(annot.dataset.in) var start = parseFloat(annot.dataset.in)
var end = parseFloat(annot.dataset.out) var end = parseFloat(annot.dataset.out)
if (now >= start && now <= end) { if (now >= start && now <= end) {
@ -107,8 +102,18 @@ function renderItem(data) {
} }
} }
}) })
}
video.addEventListener("timeupdate", event => {
var currentTime = video.currentTime()
if ((currentTime + (data["in"] || 0)) >= data['out']) {
if (!video.paused) {
video.pause()
}
video.currentTime(0)
}
updateAnnotations(currentTime)
}) })
updateAnnotations(data["position"] || 0)
if (item.next || item.previous) { if (item.next || item.previous) {
var nav = document.createElement('nav') var nav = document.createElement('nav')
nav.classList.add('items') nav.classList.add('items')