热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5全屏模式下隐藏默认视频控制栏

HTML5在全屏模式下隐藏默认视频控制栏原文HidingNativeHTML5VideoControlsinFull-ScreenMode前言如果你曾经使用过HTML5的video

HTML5 在全屏模式下隐藏默认视频控制栏


原文 Hiding Native HTML5 Video Controls in Full-Screen Mode



前言

 如果你曾经使用过HTML5的video,那么你肯定有想过为什么你仅仅向DOM添加了一个 标签却会多出了一堆的播放控制按钮

播放控制栏

浏览器以video标签子DOM的形式添加到渲染的文档中。这些播放控制元素也是DOM的一部分,但你并不能在主DOM树上看到他们,你只能看到他们被渲染在页面中


HTML 视频在全屏模式下控制栏的问题

 当我最近在做自定义HTML5视频播放框架的时候,遇到了很多设计师和开发者都遇到的一个问题,当视频进入全屏模式的时候,显示的是浏览器默认的播放控制栏而不是自定义的控制栏。跟别人一样,我在网上搜索但并没有找到相关的资料。

F12查看了开发者工具之后,我们可以发现:


  1. 默认的控制栏还在。把video元素的controls属性设置为false,在非全屏模式下控制栏确实是隐藏的,但是当我们进入全屏模式的时候,控制栏又出现了,这是为什么呢?

  2. 在全屏模式下自定义的控制栏被隐藏在视频的下面。在开发者工具中检查自定义的控制栏可以发现被隐藏的原因是控制栏应用了用户代理的样式表(the user agernt’s style sheet),而在这个样式表中有一个奇怪的z-index值,这是必须要注意的。

奇怪的z-index值

那么如何使得自定义控制栏在全屏模式下得到显示呢?
其实思路很简单,就是覆盖用户代理样式表。平时写样式表就是用来覆盖用户代理样式表的。但很重要的一点是,怎么隐藏浏览器插入的而不能在默认DOM树上发现的元素。

需要注意的是这篇文章所提到的技术仅仅在支持影子DOM(Shadow DOM)的浏览器中隐藏全屏模式下的控制栏。


影子DOM速览

 什么是影子DOM?影子DOM就是浏览器创建的在DOM子树。简单来说,它是一系列的DOM元素,跟熟悉的

一样,只不过影子DOM是浏览器添加的文档片段(document fragment)并且能够像DOM树一样在页面中得到渲染。下面引用James Edwards的话简要概括一下影子DOM的作用


影子DOM通过创建文档片段的形式高效地封装内容,影子DOM的内容是特殊的文档,会通过合并到主文档的方式来创建所有被渲染的内容。
实际上一些浏览器已经通过影子DOM的方式来渲染浏览器的插件


到现在了解到了添加到标签的控制栏是浏览器创建的影子DOM的一部分,以及影子DOM的相关知识,接下来就会接触到如何隐藏默认的视频控制栏。


隐藏默认的视频控制栏

 现在需要重写影子DOM里控制栏的样式,然而在常规的CSS选择器不能获取影子DOM的情况下怎么实现呢?
Dimitri Glazkov的文章指出,有一个简单的伪属性可以允许影子DOM子树的任意伪元素和子树的元素联系起来。也就是说影子DOM子树中的一些元素可以通过与它们关联的伪元素来获取进而重写它们的样式。
但我们怎么确定我们需要重写样式的的影子DOM元素和哪个伪元素关联呢?我们或多或少知道像范围输入这样的控件在webkit浏览器中我们可以通过伪元素来重写它的指针样式,如

::-webkit-slider-thumb

FireFox同样提供了两个伪元素来重写样式

::-moz-range-track

::-moz-range-thumb

但其他更加少见的和影子DOM相关联的伪元素呢?又有什么伪元素和其他的影子DOM元素关联?Chrome的开发者工具可以帮助我们来找到他们。


确定伪元素和影子DOM元素的关联

 Chrome开发者工具有一个很好的特性就是你可以在Elements选项卡中检查影子DOM子树,就如同你检查普通的DOM树一样,所有想要做的东西都可一通过这个特性完美解决:


  1. 进入开发者模式按F1进入设置
  2. 在Preferences选项卡中的Elements中把Show user agent shadow DOM前的复选框勾上(并没有找到原文所说的Genral所以按照网上的其他文章重写了这个步骤)
  3. 重启开发者工具

现在我们就可以看到下的影子DOM

z-index

并不了解为什么开发者会选择这样一个特殊的数值,可能因为浏览器的开发者使用32位有符号整数来表示z-index值,而2147483647是最大值,为了确保自定义控制栏的可见性,你必须吧z-index值设置大于或等于该值。

.custom-video-controls{z-index:217483647;
}

总结

 为了在全屏模式下隐藏默认的控制栏并显示自定义控制栏,浏览器提供了影子DOM给开发者使用,使用步骤如下:

1.确认影子DOM元素和伪元素的关联关系,然后将其display属性设置为none
2.将自定义控制栏的z-index设置为32为有符号整数的最大值保证其可见性

最后可以看一下实现效果DEMO


推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 如何压缩网站页面以减少页面加载时间
    本文介绍了影响网站打开时间的两个因素,即网页加载速度和网站页面大小。重点讲解了如何通过压缩网站页面来减少页面加载时间。具体包括图片压缩、Javascript压缩、CSS压缩和HTML压缩等方法,并推荐了相应的压缩工具。此外,还提到了一款Google Chrome插件——网页加载速度分析工具Speed Tracer。 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • ①页面初始化----------收到客户端的请求,产生相应页面的Page对象,通过Page_Init事件进行page对象及其控件的初始化.②加载视图状态-------ViewSta ... [详细]
  • CSS|网格-行-结束属性原文:https://www.gee ... [详细]
author-avatar
huangxianghuo127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有