【兼容性记录】video标签在 IOS 和 安卓中的问题

news2024/12/23 22:06:53

业务需求背景:由于业务中涉及到有视频播放的内容,所以就使用了 video 标签去做,但是 video 标签在 ios 设备安卓设备中的默认行为不一致,故记录下解决方法(折中办法)。

ios 自动全屏

ios 设备点击播放视频会自动进入全屏(弹层播放),而安卓不会

这个比较好处理,有对应的属性设置,只需要在 video 标签中添加即可和安卓保持一致。

  • playsinline:告诉支持它的浏览器(包括现代的 iOS Safari)在网页内部播放视频。
  • webkit-playsinline:旧版本的 iOS Safari 添加的特殊属性,作用与 playsinline 相同
<video webkit-playsinline playsinline src="xxx" />

ios 设备中无视频头帧

ios 设备没有预览图的情况下不会展示视频头帧,播放前video标签背景是透明的,而安卓自动展示头帧

在这里插入图片描述
这是因为 ios 的保护机制:如果 video 标签未开始播放时不会去加载视频的,所以就没有头帧图。解决方法有几种,一种是设置video poster属性:在页面加载的时候获取视频的首帧图,然后将这个图赋值给poster。另外一种就是简单封装一下,这个问题就 over 了,唯一的缺点就是需要写额外的逻辑。

<!-- 方式一 -->
<video width="100%" controls accept-ranges content-length poster="xxx.png" src="xxx.mp4">

<!-- 方式二 -->
<div class="video-container">
  <div class="video">
      <div class="play-overlay">  
        <button class="play-button"></button>  
      </div>
	  <!-- content-length:提供了文件大小信息,帮助浏览器管理下载过程 -->
      <!-- accept-ranges:允许浏览器分段请求 -->
      <video width="100%" controls accept-ranges content-length src="xxx.mp4">   
    </video>
    <img class="video-cover-image" src="xxx.jpg" />  
  </div>
</div>
<script>
// 为所有的 video-container 增加点击事件监听
document.querySelectorAll('.video-container .play-button').forEach(function(playButton) {
  playButton.addEventListener('click', function() {
    let videoContainer = this.closest('.video-container');
    videoContainer.querySelector('.play-overlay').style.display = 'none';
    videoContainer.querySelector('.video img').style.display = 'none';
    let video = videoContainer.querySelector('video')
    video.play();
  });
});
</script>

安卓设备全屏后退出页面位置出现偏移

安卓设备播放视频后点击全屏,然后点击退出按钮后页面位置会发生偏移(只遇到过向下移的情况)

这个问题来来回回折腾了一两天后面直接将方案改了:网页上点击播放按钮后页面出现一个弹出层进行播放

<a href="javascript:;" class="video_btn" data-mp4="xxx.mp4"></a>
<script>
document.body.addEventListener('click', function(event) {
  if (event.target.matches('.video_btn')) {
    const item = event.target;
    let mp4 = item.getAttribute('data-mp4')
    // 将 mp4 地址赋值给弹出层的video标签
    let html =`<div class="pop_video_bg"></div>
			    <div class="pop_video" style="display: block;">
			    	<div id="pop_vv">
			    	<div style="position:relative;left:0;top:0;display:inline-block;width:100%;max-height:100%">
			    		<video controls controlslist="nodownload" src="xxx.mp4" loop="false" width="100%" height="100%" disablepictureinpicture autoplay style="background-color: black;">
			    			<source src="xxx.mp4" type="video/mp4">
			    		</video>
			    	</div>
			    </div>
			   <div class="close_pv"></div>
			  </div>`
  }
  // 将html放入body中
  ...
});
</script>

如倩女幽魂类似
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STC分散文件加载

一、什么是分散加载文件&#xff1f; 分散加载文件通常以.sct结尾&#xff0c;英文名是&#xff1a;Linker Control File, scatter loading&#xff0c;链接器根据这个文件的配置来分配各个节区的地址空间&#xff0c;并且生成分散加载代码&#xff0c;因此我们只要修改分散加载…

另一款插件开发中......

欢迎插眼&#xff01;&#xff01;&#xff01; 一款关于源码阅读和笔记记录的插件。发个图&#xff0c;还在开发中......Command Assist的难点是第一次接触IDEA插件&#xff0c;不管是项目工程结构&#xff0c;还是开发发布流程都比较陌生&#xff0c;然后是功能点里面的终端…

编码规范之注释、条件语句中限制代码行数和避免硬编码

对于软件开发管理来说&#xff0c;制订编码规范是一个历久弥新的话题。每一个大有为开发头目&#xff0c;都强调编码规范。或者程序员也互相攻讦&#xff08;jie&#xff0c;第二声&#xff0c;阳平&#xff09;&#xff0c;说你写的代码很乱&#xff0c;不规范&#xff0c;很难…

黑马JavaWeb开发笔记16——请求(postman、简单参数、实体参数、@RequestParam映射)

文章目录 前言一、postman工具1. 引入2. 介绍3. 安装4. 使用 二、简单参数1. 原始方式&#xff08;仅了解&#xff0c;以后的开发不会使用&#xff09;2. SpringBoot方式3. 参数名不一致(RequestParam映射) 三、实体参数1. 简单实体对象2. 复杂实体对象 总结 前言 本篇文章是2…

[CocosCreator]全栈接入微信支付宝SDK(V3)

原文再续,书接上一回!上一期我介绍了接入支付宝的SDK,本文就来讲讲微信的SDK接入.还是那句话,官方的文档,我只能用一句话形容:一言难尽!本屌还是一如既往,把"恶心的东西"嚼碎了喂给各位宝吃. 一.前言 首先还是要集齐可以召唤神龙的法器,给大家一一列举一下: 1.…

python学习第十节:爬虫基于requests库的方法

python学习第十节&#xff1a;爬虫基于requests库的方法 requests模块的作用&#xff1a; 发送http请求&#xff0c;获取响应数据&#xff0c;requests 库是一个原生的 HTTP 库&#xff0c;比 urllib 库更为容易使用。requests 库发送原生的 HTTP 1.1 请求&#xff0c;无需手动…

Notepad++插件:TextFX 去除重复行

目录 一、下载插件 TextFX Characters 二、去重实操 2.1 选中需要去重的文本 2.2 操作插件 2.3 结果展示 2.3.1 点击 Sort lines case sensitive (at column) 2.3.2 点击 Sort lines case insensitive (at column) 一、下载插件 TextFX Characters 点【插件】-【插件管理…

unity编辑器c#脚本

目录 1.编辑器窗口再介绍 1.1添加对象 1.2文件夹的管理 1.3参数的设置 1.4对象的移动方式 2.对于外形和材质的修改 2.1对于外形的修改 2.2对于材质的修改 3.添加有趣的组件 3.1如何添加组件 3.2添加刚体组件 3.3碰撞器的介绍 3.4添加c#组件 3.5c#脚本代码的说明 1…

通过知识蒸馏提升大模型训练效率

人工智能咨询培训老师叶梓 转载标明出处 随着模型规模的不断扩大&#xff0c;如GPT-4这样的模型拥有约1.7万亿参数&#xff0c;其预训练所需的巨大能源和计算资源引发了对可持续发展AI解决方案的迫切需求。麦吉尔大学的研究团队介绍了一种创新的方法来解决与LLMs预训练相关的效…

MySQL5.7基于mysqldump、xtrbackup、innobackupex工具进行全量备份/恢复、增量备份/恢复

mysql全量备份脚本 文章目录 前言一、数据库备份分类二、为什么需要备份&#xff1f;三、备份工具示例1.逻辑备份工具1.1.使用场景1.2.备份操作示例1.3.恢复操作示例 2.物理备份工具2.1.xtrbackup介绍2.2.使用场景2.3.安装percona-xtrabackup2.4.xtrbackup备份原理2.5.percona-…

西门子PLC读取时间相差8小时

当前时间与PLC读取到的时间相差8小时&#xff0c;如下图所示 原因&#xff1a;指令问题 模块时间总是存储在 CPU 时钟中&#xff0c;而不带因子“本地时区”或“夏令时”。之后&#xff0c;CPU 时钟将基于模块时间计算 CPU 时钟的本地时间。 解决办法&#xff1a;将读取时间指…

leetcode hot100_part01_哈希

1.两数之和 遍历数组&#xff0c;map中存在target - nums[i]就返回结果&#xff0c;不存在就把当前元素存入map; 49.字母异位词分组 分组&#xff0c;怎么分&#xff0c;用hashMap, key为每一组的标识&#xff0c;value为每一组包含的字符串&#xff08;属于同一组的&#xff…

【笔记】第一节. 引言

• 轨道用钢的加工过程 • 钢轨结构及其标准 • 轨道结构特点 • 钢轨的商业化及其发展趋势 轨道用钢的加工过程 钢轨形式及其标准 钢轨的基本结构 轨头、轨腰、轨底。 钢轨的技术标准 • 铁道行业标准《TB/T2344-2003&#xff1a;43&#xff5e;75 kg/m 热轧钢轨订货技术…

腾讯云Ubuntu系统安装宝塔,配置Java环境,运行spring boot项目

致谢 本次学习宝塔部署spring boot项目&#xff0c;参考如下资料 https://www.cnblogs.com/daen/p/15997872.html 系统安装宝塔 直接用的腾讯云云服务器面板上的登录&#xff0c;你可以换成 xshell 进入宝塔官网&#xff1a; https://www.bt.cn/new/download.html 我们采…

【Android】Handler用法及原理解析

文章目录 用处基本用法用法一&#xff1a;使用sendMessage和handleMessage方法用法二&#xff1a;使用post方法 法一工作原理Handler的sendMessageMessage成员变量 MessageQueueLooper主线程自动初始化子线程手动创建**prepare**loop Handler的dispatchMessage 法二工作原理Han…

机器学习中最常见的50个问题(进阶篇)

机器学习中最常见的50个问题 进阶篇 1.解释SVM的工作原理。 SVM&#xff0c;全称支持向量机&#xff08;Support Vector Machine&#xff09;&#xff0c;是一种有监督学习算法&#xff0c;主要用于解决数据挖掘或模式识别领域中的数据分类问题。 SVM的工作原理是建立一个最…

TypeScript 扩展

扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性&#xff0c;它是ES11&#xff08;ES2020&#xff09;中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时&#xff0c;会短路&#xff0c;直接返回undefined&#xff0c;如果存在&#xff0c;那么…

小程序开发设计-小程序简介①

1.小程序与普通网页开发的区别&#xff1a; 1.运行环境不同&#xff1a; 网页运行在浏览器环境中。 小程序运行在微信环境中。 2.API不同&#xff1a; 由于运行环境不同&#xff0c;所以小程序中&#xff0c;无法调用DOM和BOM的API。但是&#xff0c;小程序中可以调用微信环境提…

摊牌了!一文教会你轻松上手豆包MarsCode 编程助手!

豆包MarsCode 编程助手是豆包旗下的 AI 编程助手&#xff0c;提供以智能代码补全为代表的 AI 功能。豆包MarsCode 编程助手支持主流的编程语言和 IDE&#xff0c;在开发过程中提供单行代码或整个函数的编写建议。此外&#xff0c;它还支持代码解释、单测生成和问题修复等功能&a…

收藏!6个PPT素材模板网站,快速做出好看的PPT

找PPT模板一定要收藏好这6个网站&#xff0c;能让你快速做出好看的PPT&#xff0c;重点十可以免费下载&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都…