H5视频兼容安卓、IOS踩坑相关

1.视频暂停和播放

将JQ对象转换为原生JS对象

$('.icon-play').on('click', function () {
        let video_cur = $(this).parent().find('video')[0];
        if (video_cur.paused) {
            video_cur.play();
            video_cur.controls=true; // 显示控制条
            $(this).hide();// 播放器按钮隐藏
        } else {
            video_cur.pause();
        }
    })

有遮罩层的视频播放和暂停

/**
 * 视频播放
 */
$('.maskBox').on('click', function () {
    let video_cur = $(this).parent().find('video')[0];
    if (video_cur.paused) {
        video_cur.play();
        video_cur.controls = true;  // 显示控制条
        $(this).hide();             // 遮罩隐藏
    }
});

/**
 * 视频暂停
 */
$('.slide-video').on('click', function () {
    let video_cur = $(this)[0];
    if (video_cur.pause) {
        video_cur.pause();
        $('.maskBox').show();
        video_cur.controls = false; // 隐藏控制条
    }
});

2.音乐开关

// 音乐开关

$music.on('click',function () {
    if (flag) {
        $music.removeClass('rotate');
        oMusic.pause();
        flag = !flag;
    } else {
        $music.addClass('rotate');
        oMusic.play();
        flag = !flag;
    }
})

3.视频切换+音量播放

pug

// 视频切换
.showVideo.hide
    video.video-1.hide
        source(src="media/north.mp4", type="video/mp4")
        source(src="media/north.ogv", type="video/ogv")
        source(src="media/north.webm", type="video/webm")
    video.video-2.hide
        source(src="media/tai.mp4", type="video/mp4")
        source(src="media/tai.ogv", type="video/ogv")
        source(src="media/tai.webm", type="video/webm")
    video.video-3.hide
        source(src="media/eng.mp4", type="video/mp4")
        source(src="media/eng.ogv", type="video/ogv")
        source(src="media/eng.webm", type="video/webm")

js

// 视频切换
    let $showVideo = $('.showVideo'),
        $videoBtnEnter = $('.videoBtn-enter'),
        $musicClose = $('.music-close'),
        $musicOpen = $('.music-open'),
        music = document.getElementById('closeSound'),
        html = '',
        timer = '',
        flag = true;

    $videoBtnEnter.on('click', function () {
        let index = $(this).index() + 1;
        let name = `video-${index}`;
        let v = document.getElementsByClassName(name)[0];
        $showVideo.removeClass('hide').addClass('show');
        v.classList.remove('hide');
        v.classList.add('show');
        if (flag) {
            v.volume = 1;
        } else {
            v.volume = 0;
        }
        v.play();
        clearInterval(timer);
        timer = setInterval(function () {
            $showVideo.removeClass('show').addClass('hide');
            v.classList.remove('show');
            v.classList.add('hide');
            v.autoplay = false;
        }, 3000)
    });

    // 音乐开关
    music.onclick = function (e) {
        if (flag) {
            $musicClose.removeClass('hide').addClass('show');
            $musicOpen.addClass('hide').removeClass('show');
            flag = !flag;
        } else {
            $musicOpen.removeClass('hide').addClass('show');
            $musicClose.removeClass('show').addClass('hide');
            flag = !flag;
        }
        e.stopPropagation();
        return false;
    }

4.微信不能够自动播放

// 微信自动播放
let video = document.getElementById('video');
    video.play();
document.addEventListener("WeixinJSBridgeReady", function () {
video.play();
}, false);

5.页面强制横屏问题

// 利用 CSS3 旋转 对根容器逆时针旋转 90 度
  let detectOrient = function () {
    let width = document.documentElement.clientWidth,
      height = document.documentElement.clientHeight,
      $wrap = $('#wrap');
    // 横屏
    if (width >= height) {
      $wrap.css({
        'font-size': '1066.67%',
        'width': width,
        'height': height,
        'top': 0,
        'left': 0,
        '-webkit-transform': 'none',
        'transform': 'none',
        '-webkit-transform-origin': '0 0',
        'transform-origin': '0 0'
      });

    } else {
      // 竖屏
      $wrap.css({
        'font-size': '625%',
        'width': height,
        'height': width,
        'top': (height - width) / 2,
        'left': -(height - width) / 2,
        '-webkit-transform': 'rotate(90deg)',
        'transform': 'rotate(90deg)',
        '-webkit-transform-origin': 'center center',
        'transform-origin': 'center center'
      });
    }
  }

  window.onresize = detectOrient;
  detectOrient();

6.H5--移动端视频video的android兼容,去除播放控件、全屏等

android下的html5的视频播放一直是前端兼容的重灾区、各种体验差,被诟病已久。
问题主要有几个方面:
1.全屏处理;

2.自动播放;

3.播放控制;

4.隐藏播放控件;

video全屏的处理

只需在video标签加个webkit-playsinline属性即可,这个属性基本上在基于webkit内核的移动端都是没问题的,此全屏非彼全屏,它是在浏览器视窗内的全屏,并不是占居整个手机的全屏,当然我们做web端需要的就是在document的body内的视窗范围的全屏。

<video id="myvideo" src="test.mp4" webkit-playsinline="true"></video>

在ios下,视频被嵌入后,媒体的元数据加载完成后,会以全屏的形式显示出来,或者加个poster,可以看到画面。但在android下,多数机子是不显示视频画面的,要不就是显示一个黑色的还不是全屏的播放控件,即使及加个poster封面也不济于是。因为poster在android兼容的并不好,不如在视频上层加个div铺张图片,这个比较好的处理方式应该是:视频上加一层div做封面,由于android不允许视频上层有东西,所以首先将视频设为的width:1px,当播放后,上层的封面remove掉,同时width:100%或者你想要的宽度。

video的自动播放

问题:android下是不允许自动播放的,使用了video.play(),也是不行的,必须有用户的主动触发,比如触碰了屏幕,有click或者是touch事件产生。

解决:引导用户触发,滑屏或touch的行为,然后调用video.play()播放,给用户一个自动播放的错觉。

微信禁止下拉出现域名

body, html {
  position: fixed;
  top: 0px;
  bottom: 0px;
  width: 100%;
  height: 100%;
}

7.audio自动播放

在手机端浏览器中不能自动播放音频,需要借助事件

html

audio#audio(loop src="media/audio/music.mp3")

js

 document.getElementById('audio').play();

8.H5 监听手机浏览器 后台唤醒 激活

// H5 监听手机浏览器 后台唤醒 激活
var reLoadLeftTime = false ;
var hiddenProperty = 'hidden' in document ? 'hidden' :
'webkitHidden' in document ? 'webkitHidden' :
  'mozHidden' in document ? 'mozHidden' :
    null;
    
var visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');

var onVisibilityChange = function(){

    if(document[hiddenProperty]){
    
        document.getElementById('audio').pause();
        
    }else{
    
        document.getElementById('audio').play();
    }
}

document.addEventListener(visibilityChangeEvent, onVisibilityChange);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容