视频播放器DPlayer全屏水印不显示?
在h5中用视频播放器DPlayer监听竖屏和横屏(webfullscreen、fullscreen),更改水印范围,在竖屏的时候没问题,在横屏的时候看不到水印
/** 水印添加方法 */
let setWatermark = (str1, str2, container) => {
let id = '1.23452384164.123412415';
if (container === undefined) {
return;
}
if (document.getElementById(id) !== null) {
document.body.removeChild(document.getElementById(id));
}
// 设置局部水印
var containerWidth = container.offsetWidth; // 获取父容器宽
var containerHeight = container.offsetHeight; // 获取父容器高
container.style.position = 'relative'; // 设置布局为相对布局
var top = Math.random() * (containerHeight - 92);
var left = Math.random() * (containerWidth - 548);
let can = document.createElement('canvas');
// 设置canvas画布大小
can.width = 294;
// can.width = 334;
can.height = 90;
let cans = can.getContext('2d');
cans.rotate((-20 * Math.PI) / 180); // 水印旋转角度
cans.font = '15px Vedana';
// cans.font = '20px Vedana';
cans.fillStyle = '#FFFF00 ';
// cans.fillStyle = '#AAAAAA';
// cans.textAlign = 'center';
cans.border = '1px solid red';
cans.textBaseline = 'Middle';
cans.fillText(str1, can.width / 2, can.height); // 水印在画布的位置x,y轴
cans.fillText(str2, can.width / 2, can.height + 22);
let div = document.createElement('div');
div.id = id;
div.style.pointerEvents = 'none';
div.style.top = top + 'px';
div.style.left = left + 'px';
div.style.opacity = '0.15';
div.style.position = 'fixed';
div.style.zIndex = '400000';
div.style.width = '294px';
// div.style.width = '394px';
div.style.height = '90px';
div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
// document.body.appendChild(div);
container.appendChild(div);
console.log('container', container);
return id;
};
// 添加水印方法
export const setWaterMark = (str1, str2, container) => {
let id = setWatermark(str1, str2, container);
if (document.getElementById(id) === null) {
id = setWatermark(str1, str2, container, isfullscreen);
}
};
// 移除水印方法
export const removeWatermark = () => {
let id = '1.23452384164.123412415';
if (document.getElementById(id) !== null) {
document.body.removeChild(document.getElementById(id));
}
};
回复
1个回答
test
2024-07-03
原因: 我设置水印的时候,把画布放在document.body或传过来的container节点节点下, 由于视频播放器全屏的时候会置于最顶层,这是会把画布盖住解决方案:把视频元素节点跟画布放在同一层
<view
class="video"
id="directrecordwp"
>
<view id="dplayer"></view>
</view>
this.videoDp = new Dplayer({
//播放器的一些参数
container: document.getElementById('dplayer'),
autoplay: true, //是否自动播放
theme: '#65E1C0', //主题色
loop: false, //视频是否循环播放
lang: 'zh-cn',
screenshot: false, //是否开启截图
hotkey: false, //是否开启热键
preload: 'auto', //视频是否预加载
volume: 1, //默认音量
mutex: false, //阻止多个播放器同时播放,当前播放器播放时暂停其他播放器
video: {
url: vm.videoUrl + vm.videoDetail.videoUrl, //视频地址
type: 'customHls',
customType: {
customHls: function (video, player) {
const hls = new Hls(); //实例化Hls 用于解析m3u8
hls.loadSource(video.src);
hls.attachMedia(video);
},
},
},
});
Watermark (设置水印方法)中的document.body.appendChild(div)改为document.getElementById('dplayer').appendChild(div)
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容