【问题标题】:HTML5 Video - timeupdate and scrubbingHTML5 视频 - 时间更新和擦洗
【发布时间】:2013-05-15 02:06:11
【问题描述】:

我有一个 HTML5 视频,它在 jquery 拖放元素位于正确的插槽后显示和播放。在播放视频时,我有一个脚本,它会监听视频的时间更新,并将拖动的元素背景颜色更改为高亮,然后根据时间恢复为原始颜色。

现在的问题是,在完成后向后滑动视频时,当代码为时,拖动的元素全部突出显示:

function play_vid(){
$("#slots").addClass('left');
$( "#element1" ).position({my: "left top",at: "left top",of: "#slot_1"});
$( "#element2" ).position({my: "left top",at: "left top",of: "#slot_2"});
$( "#element3" ).position({my: "left top",at: "left top",of: "#slot_3"});
$( "#element4" ).position({my: "left top",at: "left top",of: "#slot_4"});
$( "#element5" ).position({my: "left top",at: "left top",of: "#slot_5"});
$(".video").show();
$("#v1").show();
v1.play();
document.getElementById('v1').addEventListener("timeupdate", function() {
$("#element1").removeClass('correct');
$("#element1").addClass('highlighted');
if(this.currentTime > 15) {
$("#element1").removeClass('highlighted');
$("#element1").addClass('correct');
$("#element2").removeClass('correct');
$("#element2").addClass('highlighted');
}
    if(this.currentTime > 30) {
$("#element2").removeClass('highlighted');
$("#element2").addClass('correct');
$("#element3").removeClass('correct');
$("#element3").addClass('highlighted');
}
        if(this.currentTime > 45) {
$("#element3").removeClass('highlighted');
$("#element3").addClass('correct');
$("#element4").removeClass('correct');
$("#element4").addClass('highlighted');
}
            if(this.currentTime > 60) {
$("#element4").removeClass('highlighted');
$("#element4").addClass('correct');
$("#element5").removeClass('correct');
$("#element5").addClass('highlighted');
}
});

如何才能使擦洗视频仅突出显示上述时间的元素?

请参阅http://jsfiddle.net/7YW59/ 的小提琴

【问题讨论】:

    标签: jquery jquery-ui html5-video


    【解决方案1】:

    不确定这是否是一个好的解决方案,但作为一种选择,如果您有一个明确列出每个元素在特定时间跨度内应具有哪些类的结构,则可能更容易对此进行推理。

    var classesAtTime = {
        0 : { // starting at time 0 these elements should have these classes
            element1 : 'highlighted',
            element2 : '',
            element3 : ''
        },
        15 : { // starting at time 15 ...
            element1 : 'correct',
            element2 : 'highlighted',
            element3 : ''
        },
        30 : {
            element1 : 'highlighted',
            element2 : 'correct',
            element3 : 'highlighted'
        }
        // ... and so on
    };
    

    虽然这有点长,但很容易看出你在什么时候会处于什么状态。然后在你的 timeupdate 中你可以有这样的东西来选择此时哪些元素应该有哪些类:

    document.getElementById('v1').addEventListener("timeupdate", function() {
        var neededClasses = {};
        for (var i = 0; i <= this.currentTime; i++) {
            neededClasses = classesAtTime[i];
        }
    
        // Go through elements
        for (var elementID in classesAtTime) {
            if (!classesAtTime.hasOwnProperty(elementID)) continue;
            $('#' + elementID).attr('class', neededClasses[elementID]);
        }
    }
    

    如果某些东西需要有多个类,您可以将它们列为例如 element1 : 'highlighted foo bar'。

    【讨论】:

    • 感谢 Bemmu……这当然是一种更好的处理方式,但我不确定这是否有助于解决擦洗问题。我用你的代码创建了一个小提琴,但它没有改变元素的类......
    • 对不起,我应该使用伪代码或避免包含代码。我只是想粗略地展示一下这个想法。
    • 感谢您的帮助 Bemmu...实际上,解决方案只是为视频中的时间点不应突出显示的所有元素(不仅仅是前一个元素)删除突出显示的类。因此,您将元素分成时隙的想法值得作为答案。仍然要实施您的解决方案...请参阅更新的小提琴jsfiddle.net/AYXmD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2019-07-15
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多