zoukankan      html  css  js  c++  java
  • 微信开发中,H5的video标签使用

    <video></video>是HTML5新加入的标签,最近流行的h5开发多以video技术集成一个H5页面,效果也是很6的。现在总结一下用到的技术,主要的使用环境是微信,部分属性一些手机的默认浏览器不支持,这些还需要读者亲测。

    <video
         id="videoID"
         src="video.mp4"
         poster="loadbg.jpg" 视频封面
         preload="auto"
         x-webkit-airplay="allow"
         x5-video-player-type="h5" 启用H5播放器,是wechat安卓版特性
         x5-video-player-fullscreen="true" 全屏设置,设置为 true 是防止横屏
         x5-video-orientation="portraint" 播放器支付的方向,landscape横屏,portraint竖屏,默认值为竖屏
         webkit-playsinline="true" 这个属性是ios 10中设置可以让视频在小窗内播放,也就是不是全屏播放
         playsinline="true" IOS微信浏览器支持小窗内播放
         style="object-fit:fill">
    </video>

    这里介绍下它的样式属性object-fit属性,它有两个可以用的值:fill和contain。fill是把视频拉伸或缩小,是视频正好平铺在video上,这样会造成影响的拉伸,慎重使用;而contain类似于background-size的contain值,它把视频放或缩小到容器能容下的最大尺寸,按照视频的分辨率放入video标签,这个属性不会引起影响的变形,但是如果video的宽高比不等于影响的宽高比,那么会又video的背景露出。

    一般产品经理希望保证影像不变形的情况下,全屏播放(不露出video的背景),我的思路是,采用contain值,设置video的宽高都为100%,通过操作video标签的父容器尺寸改变video显示的部分。即,首先比较屏幕的宽高比和视频的宽高比,得出视频的宽不够还是高不够导致露出白边,然后让露出白边的video的父容器宽或高等于屏幕的宽或高,通过视频的分辨率即宽高比,计算出video父容器的另一个方向的长度(款或高),然后在屏幕上居中,并且超出部分隐藏即可。注意,不能直接操作video的宽或高,这样会没有作用,因为他的宽或高是跟着父容器走的。

    献上代码:

    function initVideoSize() {
            var videoBox = doc.querySelector(".videoBox");
            var fpsBox = doc.querySelector(".fpsBox");
            var maxBorder = Math.max(winWidth,winHeight),minBorder = Math.min(winWidth,winHeight);//最大的一边
            screenRatio = maxBorder / minBorder;//屏幕宽高比,我的视频是横屏,所以默认最长的是宽
    
            //视频不够宽
            if ( screenRatio > videoRatio ) {
                videoBox.style.height = maxBorder /  videoRatio + "px";
                videoBox.style.width = maxBorder + "px";
                videoBox.style.marginTop = - (maxBorder /  videoRatio - minBorder) / 2 + "px";
                videoBox.style.marginLeft = "0";
    
                fpsBox.style.height = maxBorder /  videoRatio + "px";
                fpsBox.style.width = maxBorder + "px";
                fpsBox.style.marginTop = - (maxBorder /  videoRatio - minBorder) / 2 + "px";
                fpsBox.style.marginLeft = "0";
            } else { //视频不够高
                videoBox.style.width = minBorder *  videoRatio + "px";
                videoBox.style.height = minBorder + "px";
    
                videoBox.style.marginLeft = - (minBorder *  videoRatio - maxBorder) / 2 + "px";
                videoBox.style.marginTop = "0";
    
                fpsBox.style.width = minBorder *  videoRatio + "px";
                fpsBox.style.height = minBorder + "px";
    
                fpsBox.style.marginLeft = - (minBorder *  videoRatio - maxBorder) / 2 + "px";
                fpsBox.style.marginTop = "0";
            }
        }
  • 相关阅读:
    MySQL JDBC驱动 01 Class.forName
    Sybase性能调试 Statistics
    MySQL InnoDB存储引擎 MySQL介绍
    Sybase性能调试 dbcc trace
    ASP.NET页面的生命周期
    注册JavaScript?
    泛型
    静态类和静态类成员
    构造函数
    MYSQL常用操作
  • 原文地址:https://www.cnblogs.com/zhangbob/p/8400109.html
Copyright © 2011-2022 走看看