HTML5视频 - 淡化效果无法在Chrome上运行

时间:2013-12-06 12:36:15

标签: javascript jquery html5 html5-video

我目前在Chrome中遇到了一种奇怪的行为。基本上,我要做的是将视频置于其他视频之上。

我有一个位于基础层的基本视频(z-index:0)。它一直在重复。当用户执行某些操作(单击按钮等等)时,另一个在单击按钮之前不可见的视频应该在另一个视频的顶部淡入。

在Firefox(fe)中,一切正常。在Chrome中没有任何反应。在淡出动画耗尽的时间之后,不会立即显示淡出的视频。

http://jsfiddle.net/J36nQ/

我设置了一个小提琴。正如您所看到的,1000毫秒正在运行,之后,顶部视频直接显示而不会淡入。尝试在Firefox中执行相同操作将导致成功的淡入淡出动画。

这就是我到目前为止所做的:

<!DOCTYPE html>
<html>
<head>
    <title>Video Test</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0; 
        }

        .video{
            position: absolute;
        }

        #video{
            z-index: 0;
        }

        #action-1-wrapper{
            z-index: 1;
            display: none;
        }

        button{
            position: absolute;
            bottom: 10px;
        }

    </style>

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(function(){

            $action1 = $('#action-1').get(0);
            $mainVid = $('#main-video').get(0);

            $('#play1').click(function(){
                // Main Video should be paused when playing a video on top
                stopMainVideo();

                // I fade in the container which holds the video
                $('#action-1-wrapper').fadeIn(1000, function(){
                    // After fading in the video in the top wrapper should be played
                    $action1.play();                
                });
            });

            $('.actionvideo').bind('ended', function(){

                var $video = $(this).get(0);

                $video.currentTime = 0;                 
                $(this).parent().fadeOut(1000, function(){
                    playMainVideo();
                });

            });

            function stopMainVideo()
            {
                $mainVid.pause();
            }

            function playMainVideo()
            {
                $mainVid.play();
            }

        });
    </script>   
</head>
<body>
    <div id="video" class="video">
        <video autobuffer width="100%" autoplay="autoplay" loop="loop" id="main-video">
            <source src="https://workid-service.de/samplevids/loop.mp4" type="video/mp4" />
        </video>        
    </div>
    <div id="action-1-wrapper" class="video">
        <video autobuffer width="100%" id="action-1" class="actionvideo">
            <source src="https://workid-service.de/samplevids/aktion1.mp4" type="video/mp4" />
        </video>        
    </div>
    <button id="play1">Animation 1</button>
</body>
</html>

我希望有人能给我一个提示,说明为什么chrome会像那样。

提前致谢, 托马斯

3 个答案:

答案 0 :(得分:1)

在适当/必要时使用不同的ID和类将帮助您找出问题。我在这里提供的jsfiddle中清理了它:http://jsfiddle.net/bas5D/2/

不要尝试使用.fadeIn().fadeOut()视频元素,只需应用css类,确保元素上有适当的位置,让CSS完成淡化视频的工作。

答案 1 :(得分:0)

添加

$("#action-1").attr("style", "");

$('#play1').click(function(){});

查看the jsfiddle i created以查看正在进行中。

答案 2 :(得分:0)

我只是想出了这个问题的来源。有些人甚至没有问题,因为chrome上的视频透明度仅适用于启用gpu加速。如果您的计算机不支持GPU加速,则不透明度始终为100%