Chrome 中的 HTML5 视频边框半径不起作用
HTML5 Video Border Radius in Chrome Not Working
我正在尝试使我的HTML5视频具有透明度的左上角和左下角圆角,就像使用边框半径时的行为一样。不幸的是,在Chrome中,由于某种原因,边框半径在HTML视频标签上不起作用,但在IE10和Firefox中起作用。
经过几次尝试,我偶然发现了这个答案:https://stackoverflow.com/a/16470150/1115367 但我很快发现,这将填充圆角的颜色,而不是使其透明。
如何在不降低视频性能的情况下使边框半径在谷歌浏览器中处理 HTML5 视频?
如有必要,我愿意使用javascript/jQuery。
引用另一篇文章:
WebKit中有一些突出的错误与它与边框半径一致的内容剪辑有关,
例如这个或专门关于视频元素的这个。
如果您将边框半径应用于环绕视频的元素,并添加-webkit-mask-image
,则可以在Chrome中完成。这是一个演示,它遮罩了一个透明的png并剪辑了视频的角落:
演示(透明背景):http://jsfiddle.net/pe3QS/24/
更新:我将HTML/CSS更改为仅使用一个包装元素,它至少适用于IE9 +,FF和Chrome。
CSS:
div.outer {
float: left;
height: 240px;
}
div.outer video {
width: 320px;
height: 100%;
-webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
border-radius: 32px 0 32px 0;
}
HTML:
<div class="outer">
<video src="http://www.w3schools.com/html/movie.ogg" type="video/ogg" controls></video>
</div>
您可以使用 canvas 元素来解决此问题。它需要更多的代码,但这种方法也开辟了许多其他可能性和控制。
您可以将 CSS 与 Canvas 元素一起应用:
#canvas {
background:#000;
border-radius:20px 0 0 20px; /* top left and bottom left as in OP */
}
然后手动创建并加载视频(或者您可以使用HTML加载视频并隐藏原始视频元素):
在这里现场小提琴
var video = document.createElement('video'),
url;
/// setup video instance
video.preload = 'auto';
video.addEventListener('canplaythrough', start, false);
/// check what we can play and borrow some online video link
if (video.canPlayType('video/ogg').length > 0 ) {
url = 'http://www.w3schools.com/html/movie.ogg';
} else {
url = 'http://www.w3schools.com/html/movie.mp4';
}
/// start loading video
video.src = url;
/// start the loop
function start(e) {
/// get canvas and context
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
w = canvas.width,
h = canvas.height,
toggle = false;
/// start video and loop
video.play();
loop();
function loop() {
/// we won't need 60 FPS so reduce to 30 FPS
toggle = !toggle;
if (toggle === false) {
requestAnimationFrame(loop);
return;
}
/// draw video frame onto canvas
ctx.drawImage(video, 0, 0, w, h);
requestAnimationFrame(loop);
}
}
当然,这只是最小的例子:您还需要正确检查其他类型(即.webm)的canPlayType
参数(某些浏览器说"no",因此也请检查这一点或用空字符串替换 no 以使用此处的长度)。
但需要注意的是:这不适用于 Safari 浏览器,因为它们不符合(目前撰写)Canvas 标准。在这种情况下,它们不支持以视频元素作为源的绘图图像。
我们有一个带有圆角和投影的视频,它就像
: border-radius: 22px;
overflow: hidden;
-webkit-transform: translateZ(0);
box-shadow: 0 19px 51px 0 rgba(0,0,0,0.16), 0 14px 19px 0 rgba(0,0,0,0.07);
关键是-webkit-transform: translateZ(0)
.这行代码告诉浏览器在 GPU 上渲染,而不是使用 CPU 进行渲染,从而允许像这样处理更多繁重的样式。
在Safari 11,Chrome 65,Firefox 59,Edge Win 10和IE 11中进行测试并工作
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Chrome 中的 HTML5 视频边框半径不起作用
- 边框半径在 IE9 中不起作用
- fabricJS在某些事件上更改边框大小和颜色不起作用
- 单击边框时,将单击事件绑定到jquery移动按钮不起作用
- 边框样式不起作用